web-dev-qa-db-fra.com

Est-il préférable de se mettre -j Rejeter ou -J Drop in Iptables?

Il y a un exemple de règles d'IPTABLES sur Archlinux Wiki:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

Il y a quelques jours, mon ami m'a demandé pourquoi y a-t-il REJECT dans les trois dernières règles. Il m'a dit qu'il devrait y avoir DROP au lieu de cela, et il a mentionné quelque chose sur une meilleure sécurité en cas de DROP.

Donc, j'ai deux questions:

  1. Que font les trois règles?

  2. Cela fait-il une différence quand je mets là DROP en place REJECT --reject-with? Si oui, quelle est la différence?

33
Mikhail Morfikov

Que font les trois règles?

Ces 3 règles semblent assez explicatives:

  1. Rejeter les paquets UDP entrants avec un message ICMP "Port inaccessible"
  2. Rejeter entrant TCP paquets avec "RESET TCP"
  3. Rejeter des paquets entrants (de tout autre protocole) avec message ICMP "Protocole inaccessible"

Si vous recherchez plus de détails (sur les paquets UDP/TCP, ICMP), vous devez creuser dans la mise en réseau des documents et peut-être le man iptables trop.

Est-ce que cela fait de la différence quand je pose y at-il une baisse de rejet à la place? Si oui, quelqu'un pourrait-il m'expliquer la différence pour moi, je l'apprécierai vraiment.

Cela fait une différence. Et contrairement à la croyance populaire, DROP ne donne pas une meilleure sécurité que REJECT. Il inconvénient les utilisateurs légitimes et il n'est effectivement aucune protection contre les malveillants. Cet article explique le raisonnement en détail:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Une raison commune de l'utilisation de la goutte plutôt que de rejeter est d'éviter de donner des informations sur lesquelles les ports sont ouverts, cependant, les paquets éliminant exactement autant d'informations que le rejet.

Avec Rejeter, vous faites votre analyse et classez les résultats dans "Connexion établie" et "Connexion rejetée".

Avec une chute, vous classez les résultats dans "Connexion établie" et "Connexion expirée".

Le scanner le plus trivial utilisera l'appel "Connecter" du système d'exploitation et attendra jusqu'à la fin d'une tentative de connexion avant de commencer le suivant. Ce type de scanner sera considérablement ralentie en laissant tomber des paquets. Toutefois, si l'attaque définit un délai d'attente de 5 secondes par tentative de connexion, il est possible de numériser chaque port réservé (1..1023) sur une machine en seulement 1,5 heure. Les analyses sont toujours automatisées et un attaquant ne se soucie pas que le résultat n'est pas immédiat.

Un scanner plus sophistiqué enverra des paquets lui-même plutôt que de compter sur le système d'exploitation TCP Mise en œuvre. Ces scanners sont rapides, efficaces et indifférents au choix de la rejet ou de la chute.

[~ # ~] Conclusion [~ # ~]

La chute n'offre aucune barrière efficace aux forces hostiles, mais peut ralentir considérablement les applications exécutées par des utilisateurs légitimes. La chute ne doit normalement pas être utilisée.

34
janos