Réponses:
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 à des hôtes que vous ne voulez pas que les gens voient.
Habituellement, toutes les règles pour les connexions à l'intérieur de votre réseau local doivent utiliser REJECT. Pour Internet, à l’exception d’ident sur certains serveurs, les connexions à partir d’Internet sont généralement abandonnées.
L'utilisation de DROP donne l'impression que la connexion est établie avec une adresse IP inoccupée. Les scanneurs peuvent choisir de ne pas continuer à numériser les 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.
Ident doit être transmis ou rejeté pour toute adresse fournissant un service SMTP. Toutefois, l’utilisation des services de recherche d’identité par les serveurs SMTP est devenue inutilisable. Il existe des protocoles de discussion qui reposent également sur un service ident qui fonctionne.
EDIT: Lors de l’utilisation de règles DROP: - Les paquets UDP seront supprimés et le comportement sera identique à la connexion à un port sans pare-feu sans service. - Les paquets TCP renverront un ACK / RST qui correspond à la réponse à laquelle répondra un port ouvert sans service. Certains routeurs répondront avec et ACK / RST pour le compte de serveurs en panne.
Lorsque vous utilisez les règles REJECT, un paquet ICMP est envoyé pour indiquer que le port n'est pas disponible.
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 ident. Si vous utilisez REJECT, les clients n'ont pas besoin d'attendre le délai d'attente.
Plus à ce sujet: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
Habituellement, vous voulez ignorer les sondes des attaquants sur certains ports, ce qui signifie que vous ne voulez pas renvoyer «connexion refusée». 'Connexion refusée' signifie: 'il y a un serveur ici' et donne éventuellement plus d'informations, tandis que laisser tomber un paquet ne donne aucune indication sur les versions du logiciel, les vulnérabilités possibles ou même sur 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.
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 était situé sur l’IP, mais que le port n’était pas à l’écoute. IPtables enverra un RST / ACK en cas de protocole TCP ou avec UDP un port de destination ICMP inaccessible.
Si vous essayez de cacher totalement l'existence de votre machine, -j DROP
c'est approprié. Par exemple, vous pouvez utiliser ceci pour mettre en place une liste noire.
Si vous essayez de cacher le fait qu'un port est ouvert, vous devriez imiter le comportement qui se produirait si le port n'était pas ouvert:
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
Si un scanner de ports constate que quelques ports éliminent des paquets alors que la plupart les rejettent, il peut en déduire que les paquets supprimés se trouvent sur des ports ouverts mais masqués.
Malgré de nombreuses réponses correctes, juste mes deux centimes:
Voici une courte PoC FW.IDS-DROP-vs-REJECT de moi au sujet en ce qui concerne les règles pour ban-système (pare-feu, IDS, etc.).
Prochainement:
DROP
peut être utilisé pour les intrus récidivants, si tous les ports sont interdits (on dirait que le serveur est en panne du côté 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éDROP
et REJECT
(sans tcp-reset
) donnera à l'intrus un "signal" indiquant qu'il y a un blocage (ce qui pourrait l'inciter à poursuivre "l'attaque" dans l'espoir de fournir les données requises à un moment donné)Oui, utiliser DROP est inutile. Utilisez REJECT.
Même lorsque la règle dit "DROP", le système répond toujours à un SYN entrant avec un TCP RST / ACK - qui est le comportement par défaut pour les ports sans service en cours d'exécution. (tcpdump et al n'enregistrent pas cela.)
Si un service est en cours d'exécution, le SYN est rencontré avec TCP SYN / ACK.
Parce que DROP ne répond pas comme d'habitude avec un TCP / ACK TCP, mais avec un RST / ACK, votre règle DROP annoncera votre pare-feu et les scanners de ports sauront que vous utilisez un pare-feu et risquent de continuer à vous marteler dans l'espoir. d'attraper votre pare-feu vers le bas.
C'est maintenant que nmap peut signaler "filtré" au lieu de "fermé", par exemple:
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
1111/tcp filtered lmsocialserver
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -D INPUT 1
En tant que tel, la seule configuration de pare-feu "invisible" est celle dans laquelle un périphérique dédié se place entre vos périphériques et transmet uniquement les ports de manière sélective.
Si vous voulez vraiment bousiller les scanners de base, vous pouvez utiliser les connexions TCP de TARPIT, ce qui définit la fenêtre TCP sur 0 afin qu'aucune donnée ne puisse être transférée après l'ouverture de la connexion, en ignorant les demandes de fermeture, ce qui signifie que le scanneur doit attendre pour que le délai de connexion soit dépassé, s'il veut en être sûr. Mais il est facile pour un attaquant de détecter cela et de faire en sorte que son délai d'attente soit très court.
Tout bien considéré, vous ferez probablement mieux d'utiliser simplement REJECT - ou de mettre un périphérique de transfert de port dédié entre votre serveur et Internet.
Vous pouvez également exécuter des services sur vos ordinateurs connectés à Internet ne nécessitant pas de pare-feu.
En règle générale, REJECT est préférable pour les serveurs Web, car le service qui essaie d'y accéder (probablement le plus souvent, vous obtiendrez rapidement une réponse) et les utilisateurs ou les autres services ne seront plus obligés de se demander s'il y a une panne de réseau.
DROP
émettra un SYN/ACK
? Je n'ai jamais vu cela sur mes machines.
DROP
renvoyant a SYN/ACK
. Moi aussi, je n'ai jamais vu ce comportement sous aucune version de iptables
. Si votre source soutient votre demande, il serait très utile de la voir. certes, les vidages de paquets que je viens de faire ne corroborent pas votre demande.