Comment puis-je bloquer tous les ports sauf Ubuntu?

22

Comment bloquer tous les ports sauf 1962, 999, 12020?

Un port pour SSH et deux autres pour une sorte de script. Il est donc nécessaire d'autoriser les sorties sur ces ports, non?

Mes iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Désolé, mais je suis un vrai débutant en ce qui concerne ce genre de choses et je veux juste rendre mon serveur plus sécurisé.

okapa
la source
Pourquoi ne pas utiliser UFW?
Soviero

Réponses:

25

Au début, vous devez toujours rincer pour être sûr de ce qui est déjà défini ... rien

iptables -F

Définissez ensuite la stratégie par défaut de la chaîne INPUT sur DROP si la fin est atteinte et qu'aucune règle ne correspond:

iptables -P INPUT DROP

Pour vous assurer que le bouclage n'est pas affecté, vous devez ajouter

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

pour autoriser tout le trafic sur le lo-if et tout trafic entrant pour les connexions que vous avez établies. Après cela, ajoutez toutes les règles dont vous avez besoin pour vos services (n'oubliez pas d'ouvrir ssh si vous en avez besoin! Sinon vous êtes absent) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Un petit truc que je fais pour m'empêcher, ainsi que les autres, de percer accidentellement des trous dans la sécurité, j'ajoute enfin:

iptables -A INPUT -j DROP

Cette ligne correspond à tout pour la chaîne INPUT et la politique ne doit rien obtenir. l'avantage de ceci est même si vous ajoutez une règle ACCEPT quelque temps après l'initialisation de votre jeu de règles, elle ne sera jamais vérifiée car tout est supprimé auparavant. il garantit donc que vous devez tout garder au même endroit.

Pour votre question, le tout ressemble à ceci en résumé:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mose
la source
1
Juste pour clarifier: -Pdéfinit la politique de la chaîne. Il ne s'agit pas en fait d'ajouter une règle. La politique de la chaîne indique l'action à effectuer sur le paquet si la fin de la chaîne est atteinte. Pour cette raison, il est judicieux d'ajouter vos règles avant de définir une DROPstratégie.
Belmin Fernandez
Si je m'en souviens bien, normalement peu importe où définir la politique… je devrais peut-être donner une petite modification à ma réponse.
Mose
3
une remarque: soyez très prudent en définissant le refus de politique par défaut et le vidage lors de la configuration d'un pare-feu via ssh. Vous vous enfermerez. Oui, je l'ai fait. :-) Maintenant, je fais généralement la dernière règle à la iptables -A INPUT -j DROPplace, pour cette raison même.
Sirex
J'ai un peu mis en évidence mon avertissement ssh ;-)
Mose
@Mose: Corrigez cela, peu importe en général. J'essayais de le souligner. Mais cela pourrait vous mettre en lock-out comme cela a déjà été mentionné heh.
Belmin Fernandez
20

Une réponse d'un débutant comme vous :-) J'avais également besoin de sécuriser mon serveur Ubuntu, apprendre iptables était une douleur que je ne pouvais pas traverser. UFW (Uncomplicated Firewall) est un programme pour rendre la configuration du pare-feu aussi simple que possible.

  • installez ufw:

    sudo apt-get install ufw
    
  • désactivez-le immédiatement (j'ai dû sauver-boot parce que j'étais bloqué sur ma propre connexion SSH):

    sudo ufw disable
    
  • définissez "refuser" comme règle par défaut (cela bloque tous les ports):

    sudo ufw default deny
    
  • autorisez les ports dont vous avez besoin:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • si vous êtes certain que les règles ci-dessus ne cassent pas votre connexion ssh, activez ufw:

    sudo ufw enable
    

Les documents sont bien écrits et fournissent plus d'exemples: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
la source
1
Lorsque vous travaillez avec des configurations de pare-feu, il peut être judicieux de créer une tâche cron qui désactive à nouveau le pare-feu. Juste au cas où vous seriez exclu.
pymkin
Notez que cela ne fonctionne pas avec ufw 0.35, lançant des erreurs comme ERROR: Bad destination addressetERROR: Bad source address
Dave
Et comment autoriser tous les ports sauf un port pour une interface spécifique? J'utilise la règle de refus par défaut et je souhaite bloquer le port DNS 53 sur l'interface Ethernet pour éviter une fuite DNS lors de l'utilisation d'un VPN. Actuellement, je dois autoriser tous les ports que je veux utiliser pour les plages IP privées, ce qui n'est pas très pratique.
baptx