web-dev-qa-db-fra.com

REJECT vs DROP lors de l'utilisation d'iptables

Y a-t-il une raison pour laquelle je voudrais avoir

iptables -A INPUT -j REJECT

au lieu de

iptables -A INPUT -j DROP
93
Mike B

En règle générale, utilisez REJECT lorsque vous voulez que l'autre extrémité sache que le port est inaccessible 'utilisez DROP pour les connexions aux hôtes que vous ne voulez pas que les gens voient.

En règle générale, toutes les règles de connexion à l'intérieur de votre réseau local doivent utiliser REJECT. Pour Internet, à l'exception de l'ident sur certains serveurs, les connexions depuis Internet sont généralement PERDUES.

L'utilisation de DROP fait apparaître la connexion à une adresse IP inoccupée. Les scanners peuvent choisir de ne pas poursuivre la numérisation des adresses qui semblent inoccupées. Étant donné que NAT peut être utilisé pour rediriger une connexion sur le pare-feu, l'existence d'un service bien connu n'indique pas nécessairement l'existence d'un serveur sur une adresse.

L'identité doit être transmise ou rejetée sur toute adresse fournissant un service SMTP. Cependant, l'utilisation des recherches Ident par les serveurs SMTP est tombée en désuétude. Il existe des protocoles de chat qui reposent également sur un service d'identification fonctionnel.

EDIT: Lorsque vous utilisez des règles DROP: - Les paquets UDP seront supprimés et le comportement sera le même que la connexion à un port non protégé par un mur sans service. - TCP renverront un ACK/RST qui est la même réponse qu'un port ouvert sans service répondra. Certains routeurs répondront avec et ACK/RST au nom des serveurs qui sont en baisse.

Lors de l'utilisation des règles REJECT, un paquet ICMP est envoyé indiquant que le port n'est pas disponible.

81
BillThor

La différence est que la cible REJECT envoie une réponse de rejet à la source, tandis que la cible DROP n'envoie rien.

Cela peut être utile, par exemple pour le service d'identification. Si vous utilisez REJECT, les clients n'ont pas besoin d'attendre le délai d'expiration.

Plus d'informations à ce sujet: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html

28
Zizzencs

Habituellement, vous voulez ignorer les sondes des attaquants vers certains ports, ce qui signifie que vous ne voulez pas renvoyer la 'connexion refusée'. `` Connexion refusée '' signifie: `` il y a un serveur ici '', et donne peut-être plus d'informations, tandis que la suppression d'un paquet ne donne pas d'indices sur les versions du logiciel, les vulnérabilités possibles ou même le fait qu'un serveur vous écoute sur IP.

Ce qui précède est l'une des principales raisons d'utiliser DROP au lieu de REJECT.

8
wzzrd

Je vois beaucoup de réponses contradictoires ici et étant donné que c'est le premier article de Google avec les bons mots clés; voici l'explication correcte.
C'est simple:

DROP ne fait rien du tout avec le paquet. Il n'est pas transmis à un hôte, il ne reçoit pas de réponse. La page de manuel d'IPtables indique qu'elle laisse tomber le paquet sur le sol, c'est-à-dire qu'elle ne fait rien avec le paquet.

REJECT diffère de DROP par le fait qu'il renvoie un paquet, mais la réponse est comme si un serveur se trouve sur l'IP, mais n'a pas le port en état d'écoute. IPtables enverra un RST/ACK en cas de TCP ou avec UDP un port de destination ICMP inaccessible.

7
Ecko

Si vous essayez de masquer complètement l'existence de votre machine, -j DROP est approprié. Par exemple, vous pouvez l'utiliser pour implémenter une liste noire.

Si vous essayez de masquer le fait qu'un port est ouvert, vous devez imiter le comportement qui se produirait si le port n'était pas ouvert:

  • TCP: -p tcp -j REJECT --reject-with tcp-reset
  • UDP: -p udp -j REJECT --reject-with icmp-port-unreachable

Si un analyseur de ports constate que quelques ports abandonnent des paquets alors que la plupart les rejettent, il peut supposer que les paquets abandonnés se trouvent sur des ports ouverts mais masqués.

4
Raptor007

Malgré beaucoup de bonnes réponses, juste mes deux cents:

Voici un court PoC FW.IDS-DROP-vs-REJECT de moi au sujet en ce qui concerne les règles d'interdiction du système (pare-feu, IDS, etc.).

Prochainement:

  • DROP peut être utilisé pour les intrus récidivistes, si vous interdisez tous les ports (il semble donc que le serveur soit en panne du côté des intrus)
  • REJECT --reject-with tcp-reset est le meilleur choix pour l'interdiction multi-ports, car il semble se comporter comme un véritable port fermé
  • si certains ports répondent (l'intrus sait que l'hôte est vivant), DROP et REJECT (sans tcp-reset) donnera à l'intrus un "signal" indiquant la présence d'un blocage (ce qui pourrait le stimuler à poursuivre "l'attaque" dans l'espoir de fournir les données requises à un moment donné)
0
sebres