Utiliser la liste blanche et la liste noire avec iptables
#!/bin/bash
WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt
#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F
#
## Whitelist
#
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Permitting $x..."
$IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done
#
## Blacklist
#
for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
echo "Denying $x..."
$IPTABLES -A INPUT -t filter -s $x -j DROP
done
Script pour ouvrir les ports
#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"
#
## Permitted Ports
#
for port in $ALLOWEDTCP; do
echo "Accepting port TCP $port..."
$IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done
for port in $ALLOWEDUDP; do
echo "Accepting port UDP $port..."
$IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done
Blocage de portscan
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
# Once the day has passed, remove them from the portscan list
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
Paquets spoofés / invalides
# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
Bloquer les attaques de Schtroumpf
# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP
# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
Bloquer ICMP (aka ping)
# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
iptables
ligne 8, et$IPTABLES
plus tard. Est-ce suffisant de l'utiliseriptables
partout? Sinon, je suppose que vous devez attribuer quelque chose commeIPTABLES=/sbin/iptables
:Optimiser les performances de netfilter avec
ipset
Si vous écrivez beaucoup de règles similaires basées sur une simple adresse IP, un port ou les deux, envisagez de les utiliser
ipset
pour optimiser les performances de netfilter.Par exemple:
Cela signifie qu'un paquet avec l'adresse source 192.168.251.177 doit d'abord traverser des centaines de règles avant de pouvoir obtenir le verdict d'ACCEPT.
Bien sûr, les administrateurs système expérimentés diviseront les règles par sous-réseau. Mais cela signifie toujours des centaines de règles.
ipset
à la rescousse!Tout d’abord, définissez un ensemble IP de
ipmap
type:Ensuite, remplissez-le avec les adresses:
Enfin, remplacez les centaines de règles iptables ci-dessus par une seule règle:
Quand un paquet arrive, netfilter effectuera une recherche très rapide de bitmap pour l’adresse IP source (src) du paquet par rapport à l’
Allowed_Hosts
ensemble IP. Tous les paquets provenant de 192.168.0.0/16 connaîtront une règle. Et croyez-moi, rechercher un bitmap est plus rapide d'au moins deux ordres de grandeur que d'effectuer des centaines de vérifications de règles iptables.ipset
n'est pas limité aux adresses IP. Il peut également correspondre aux ports, au tuple de port IP, aux adresses réseau / sous-réseau, au tuple IP-MAC, etc. Et il peut correspondre à ces critères en tant que source ou destination ou un mélange des deux (dans le cas de n-uplets).Et enfin, avec
ipset
vous pouvez automatiquement mettre les adresses IP dans les listes noires / blanches. Ces listes noires / listes blanches peuvent également «vieillir», supprimant ainsi automatiquement l'adresse IP après un laps de temps configurable.Veuillez vous référer à
ipset
la page de manuel de pour plus de détails.NOTE TRÈS IMPORTANTE:
Certaines distributions Linux peuvent ne pas avoir un support "prêt à l'emploi "
ipset
(par exemple, Ubuntu 10.04 avait ce problème). Sur ces systèmes, une méthode consiste à installer àipset
partir du code source.A la place, téléchargez
ipset
la source sur son site Web: http://ipset.netfilter.org/install.htmlAlternativement, si vous utilisez
xtables-addons
, ipset est inclus dans sa source: http://xtables-addons.sourceforge.net/la source
Ajoutez des commentaires à vos règles:
la source
Bloquer les attaques TCP bien connues
Ajoutez les règles suivantes, de préférence dans
-t raw -A PREROUTING
Les attaques bloquées sont, respectivement:
(n'hésitez pas à éditer les noms des attaques ci-dessus)
la source
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
pourrait être enlevé, car il-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
va attraper chaque paquet qu'il pourrait bloquer.Activer le NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
L'étape 1 définit le paramètre du noyau pour autoriser le transfert d'adresse IP, l'étape 2 configure une règle iptables qui active la traduction d'adresses réseau sur l'interface eth0.
la source
/etc/sysctl.conf
net.ipv4.ip_forward = 1
. (En supposant que Red Hat ou un dérivé.)Bloquer les attaques ICMP
Ajoutez les règles suivantes, de préférence dans
-t raw -A PREROUTING
La première règle bloque tous les paquets ICMP dont le "drapeau de fragmentation" n'est pas 0 (ICMP ne devrait jamais être fragmenté; ils devraient transporter de petites charges utiles).
La deuxième règle bloque les paquets ICMP surdimensionnés non fragmentés.
la source
en utilisant FireHOL - wrapper iptables
Je l'ai trouvé beaucoup plus intuitif que les commandes directes iptables. Particulièrement pour les personnes ayant une expérience antérieure avec d'autres pare-feu:
la source
(de mon fichier iptables_tricks.txt, recompilé depuis de nombreux endroits: P)
Permet à iptables d’attendre 15 secondes entre les nouvelles connexions de la même adresse IP sur le port 22 (SSH):
la source
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
Tutoriels vidéo IPTABLES
Épisode 1 http://www.youtube.com/watch?v=ldB8kDEtTZA&feature=player_embedded
Épisode 2 http://www.youtube.com/watch?v=aDaEXxRHeXY&feature=related
Dernier épisode
http://www.youtube.com/watch?v=JojqHKcSxpo&feature=player_embedded
Sera un bon début pour tout débutant.
la source
Les ensembles IP revisités
Il existe déjà une réponse mentionnant les ensembles IP. Cependant, il est plutôt unidimensionnel dans la mesure où il se concentre sur les gains de performances par rapport aux règles classiques et sur le fait que les ensembles IP atténuent le problème rencontré avec de nombreuses adresses IP individuelles qui ne peuvent pas être facilement exprimées sous forme de sous-réseau dans la notation CIDR.
Notation utilisée ci-dessous
Pour que
ipset
je vais utiliser la notation lue paripset restore
écrit et paripset save
.De manière correspondante pour
iptables
(etip6tables
) les règles, je vais utiliser la notation lueiptables-restore
et écrite pariptables-save
. Cela donne une notation plus courte et me permet de mettre en évidence les règles potentielles uniquement IPv4 (préfixées-4
) ou IPv6 uniquement (préfixées-6
).Dans certains exemples, nous allons transférer le flux de paquets dans une autre chaîne. La chaîne est supposée exister à ce point, ainsi les lignes pour créer les chaînes ne sont pas produites (ni le nom de la table ni les commandes
COMMIT
-ted à la fin).Ensembles IP avancés
Les ensembles IP peuvent faire beaucoup plus que ce qui a été mentionné dans la réponse précédente et vous devez absolument lire la documentation de cet ensemble IP (
ipset(8)
) ainsi queiptables-extensions(8)
cette brève entrée ici.Par exemple , je vais me concentrer principalement sur trois types de set:
hash:ip
,hash:net
etlist:set
, mais il y a plus de ceux -ci et ils ont tous les cas d'utilisation valides.Vous pouvez par exemple également faire correspondre les numéros de port, pas seulement les adresses IP .
Sauvegarde et restauration des ensembles IP comme avec
iptables-save
etiptables-restore
Vous pouvez créer des déclarations d'ensemble IP en bloc et les importer en les canalisant dans
ipset restore
. Si vous voulez rendre votre commande plus résistante aux entrées existantes, utilisezipset -exist restore
.Si vos règles sont dans un fichier appelé,
default.set
vous utiliseriez:Un fichier comme celui-ci peut contenir des entrées dans des
create
ensembles et desadd
entrées. Mais généralement, la plupart des commandes de la ligne de commande semblent avoir une version correspondante dans les fichiers. Exemple (création d'un ensemble de serveurs DNS):Ici, un ensemble est créé pour IPv4 (
dns4
) et un autre pour IPv6 (dns6
).Délais d'attente sur les postes IP
Les délais dans les ensembles IP peuvent être définis par défaut par ensemble et également par entrée. Ceci est très utile pour les scénarios dans lesquels vous souhaitez bloquer une personne temporairement (par exemple, pour analyser un port ou tenter de forcer brutalement votre serveur SSH).
Voici comment cela fonctionne (par défaut lors de la création d’ensembles IP):
Nous reviendrons sur ces ensembles particuliers ci-dessous et sur les raisons de leur définition.
Si vous souhaitez définir votre délai d’expiration pour une adresse IP particulière, vous pouvez simplement dire:
Pour bloquer IP 1.2.3.4 pendant deux heures au lieu de la demi-heure par défaut (définie).
Si vous envisagiez cela
ipset save ssh_dynblock4
après un moment, vous verriez quelque chose comme:Mises en garde de délai
Kernel error received: Unknown error -1
).sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))
Vérifier si une entrée existe dans un ensemble IP donné
Dans vos scripts, il peut être utile de voir si une entrée existe déjà. Ceci peut être réalisé avec
ipset test
qui renvoie zéro si l'entrée existe et différent de zéro sinon. Donc, les vérifications habituelles peuvent être appliquées dans un script:Cependant, dans de nombreux cas, vous souhaiterez plutôt utiliser le
-exist
commutateur toipset
afin de ne pas se plaindre des entrées existantes.Remplir des ensembles IP à partir de
iptables
règlesCeci, à mon avis, est l’une des caractéristiques les plus meurtrières des ensembles IP. Vous pouvez non seulement faire correspondre les entrées d'un ensemble IP, vous pouvez également ajouter de nouvelles entrées à un ensemble IP existant.
Par exemple, dans cette réponse à cette question, vous avez:
... avec l'intention de limiter le nombre de tentatives de connexion à SSH (port TCP 22). Le module utilisé
recent
garde une trace des tentatives de connexion récentes. Au lieu dustate
module, je préfère cependant leconntrack
module.Dans ce cas, je redirige le flux vers la
SSH
chaîne de sorte que je n'ai pas à me répéter-p tcp --dport ssh
pour chaque règle.Recommencer:
-m set
faitiptables
savoir que nous utilisons des commutateurs duset
module (qui gère les ensembles IP)--match-set ssh_dynblock4 src
indique deiptables
faire correspondre l' adresse source (src
) à l'ensemble nommé (ssh_dynblock4
)sudo ipset test ssh_dynblock4 $IP
(où$IP
contient l'adresse IP source du paquet)-j SET --add-set ssh_dynblock4 src --exist
ajoute ou met à jour l' adresse source (src
) du paquet dans l'ensemble IPssh_dynblock4
. Si une entrée existe (--exist
), elle sera simplement mise à jour.sudo ipset -exist add ssh_dynblock4 $IP
(où$IP
contient l'adresse IP source du paquet)Si vous souhaitez faire correspondre l'adresse de destination / destination à la place, vous utiliserez à la
dst
place desrc
. Consultez le manuel pour plus d'options.Ensembles d'ensembles
Les ensembles IP peuvent contenir d'autres ensembles. Maintenant, si vous avez suivi l'article jusqu'à présent, vous vous êtes déjà demandé s'il était possible de combiner des ensembles. Et bien sûr que ça l'est. Pour les ensembles IP ci-dessus, nous pouvons créer deux ensembles conjoints
ssh_dynblock
etssh_loggedon
contenir respectivement les ensembles IPv4 uniquement et IPv6 uniquement:Et la question suivante qui devrait vous être posée est de savoir si cela nous permet de faire correspondre et de manipuler les ensembles IP de manière indépendante de la version IP.
Et la réponse à cela est un retentissant: OUI! (hélas, cela n'a pas été documenté explicitement la dernière fois que j'ai vérifié)
Par conséquent, les règles de la section précédente peuvent être réécrites comme suit:
ce qui est beaucoup plus concis. Et oui, cela a fait ses preuves et fonctionne à merveille.
Rassembler tout cela: la défense de force brute SSH
Sur mes serveurs, j'ai un script exécuté comme un
cron
travail qui prend un tas de noms d'hôtes et les résout en adresses IP, puis les alimente dans l'IP défini pour les "hôtes approuvés". L'idée est que les hôtes de confiance ont plus de tentatives de connexion au serveur et ne sont pas nécessairement bloqués aussi longtemps que quiconque.À l'inverse, des pays entiers sont empêchés de se connecter à mon serveur SSH, à l'exception (potentielle) des hôtes de confiance (c'est-à-dire que l'ordre des règles est important).
Cependant, cela reste comme un exercice pour le lecteur. Ici, je voudrais ajouter une solution soignée qui utilisera les ensembles contenus dans l'
ssh_loggedon
ensemble pour permettre aux tentatives de connexion ultérieures d'être transmises et non soumises au même contrôle que les autres paquets.Il est important de garder à l'esprit les délais d'expiration par défaut de 90 minutes
ssh_loggedon
et de 30 minutesssh_dynblock
lorsque vous examinez lesiptables
règles suivantes :A présent, vous devriez vous demander comment l'adresse IP de connexion se retrouve dans les
ssh_loggedon
sous-ensembles. Alors lisez la suite ...Bonus: ajout de l'IP avec laquelle vous vous connectez lors de la connexion SSH
Si vous avez expérimenté avec des
sshrc
amis, vous aurez appris ses inconvénients. Mais PAM vient à la rescousse. Un module nommépam_exec.so
nous permet d’appeler un script lors de la connexion SSH à un moment où nous savons que l’utilisateur est admis.En
/etc/pam.d/sshd
dessous des entréespam_env
et,pam_selinux
ajoutez la ligne suivante:et assurez-vous que votre version du script (
/path/to/your/script
ci-dessus) existe et est exécutable.PAM utilise des variables d'environnement pour communiquer ce qui se passe, vous pouvez donc utiliser un script simple comme celui-ci:
Malheureusement, l'
ipset
utilitaire ne semble pas avoir l'intelligence intégrée de netfilter. Nous devons donc faire la distinction entre IPv4 et IPv6 lorsque vous ajoutez notre entrée. Sinonipset
, supposons que nous voulions ajouter un autre ensemble à l'ensemble des ensembles, au lieu de l'adresse IP. Et bien sûr, il est peu probable qu'il y ait un ensemble nommé d'après une adresse IP :)Nous vérifions donc
:
l'adresse IP et ajoutons6
le nom de l'ensemble dans ce cas et dans les autres cas4
.La fin.
la source
Firewall Builder est une autre interface graphique pouvant être utilisée pour configurer iptables . Il permet aux utilisateurs de créer des éléments de règle en tant qu'objets dans une base de données, puis de les glisser-déposer dans un éditeur de règles pour créer la stratégie de pare-feu souhaitée. L'application génère ensuite un fichier de script avec toutes les commandes iptables requises pour implémenter les règles.
Contrairement à d'autres solutions d'interface graphique iptables dans lesquelles vous ne pouvez gérer qu'une configuration à la fois, avec Firewall Builder, vous pouvez gérer un grand nombre de configurations iptables à partir d'une seule application. Firewall Builder fonctionne sous Linux, Windows et Mac OS X, existe depuis plus de 10 ans et compte des milliers d'utilisateurs actifs dans le monde entier.
Full Disclosure - Je suis le cofondateur de NetCitadel, la société qui développe Firewall Builder.
la source
connecter la connexion sortante avec uid
transfert de port / connexion:
la source
NFLOG
cible. Il permet un préfixe de ligne plus long et le démon en mode utilisateur peut également se connecter aux bases de données.Faire correspondre plusieurs noms d'interface avec un caractère générique
Exemple: vous avez
eth0
eteth1
souhaitez autoriser le trafic entre eux?Je l'ai déjà utilisé pour faire correspondre les
veth<something>
interfaces créées dynamiquement et nommées par LXC. Donc, je peux faire correspondre tout à la fois avecveth+
.J'ai aussi intentionnellement nommé certaines interfaces
_<something>
afin de les comparer_+
.la source
Bloquer les valeurs MSS inhabituelles
SYNPROXY cible pour la protection DDos
Définir les paquets syn à la table de suivi de connexion dans la table brute
Activer synproxy pour le serveur http:
Ressource: cible SYNPROXY du blog RHEL
la source
Limiter toutes les adresses IP individuelles à un quota de bande passante sortante avec des ensembles IP
Vous pouvez configurer votre serveur de manière à n’autoriser que chaque utilisation individuelle de la bande passante IP 15Gi par octet, dans l’espoir de refléter ou d’éviter une attaque contre l’utilisation de la bande passante, éventuellement pour votre quota de bande passante mesurée chez votre fournisseur de services Internet. Cela peut être accompli comme suit:
Commencez par créer les ensembles IP pour IPv4 et IPv6:
Ajoutez maintenant vos règles iptables. La première ligne ajoutera l'adresse IP à l'ensemble si ce n'est déjà fait. La deuxième ligne ne correspondra pas si les octets transférés pour l’IP dans l’ensemble sont supérieurs au montant spécifié. Ensuite, la même chose est faite pour IPv6.
Cela empêchera des attaques telles qu'un utilisateur demandant un fichier volumineux à votre serveur Web pendant une longue période, ou à tout service de ce fait. La même chose peut être faite pour la chaîne INPUT.
la source
Une des choses que je fais, principalement à cause de mon ignorance d'une solution plus élégante, consiste à vérifier manuellement mes journaux Nginx toutes les 4 heures et le serveur de messagerie enregistre toutes les 2 minutes afin de détecter tout accès excessif par IP. Je lance quelques scripts ensemble qui:
access.log
et répertoriez les 10 principales adresses IP organisées en fonction du nombre de visites sur le serveur.iptables.save
Voici à quoi ça ressemble:
autoBanIPs_mail.sh checkBadIPs_mail.shIl est TRÈS important de noter ici que vous devez BESOIN d’établir une liste blanche ou vous allez commencer à bloquer beaucoup d’adresses IP authentiques provenant de serveurs pour lesquels vous venez de recevoir beaucoup d’e-mails ou, dans le cas d’autres journaux, des adresses IP qui frappez beaucoup votre serveur pour des raisons légitimes. Ma liste blanche est simplement intégrée à ce script en ajoutant des tuyaux grep juste après | grep ']' | qui ressemble à ceci "grep -v 127.0 |" .
BlockIPVous devez prendre le temps d'enseigner à votre serveur quelles adresses IP à fort trafic sont légitimes et lesquelles ne le sont pas. Pour moi, cela signifiait que je devais passer la première semaine environ à vérifier mes journaux manuellement toutes les deux heures, à rechercher des adresses IP à fort trafic sur iplocation.net, puis à ajouter des adresses légitimes comme amazon, box.com ou même mon domicile / bureau. IP va à cette liste blanche. Si vous ne le faites pas, vous serez probablement bloqué depuis votre propre serveur ou vous allez commencer à bloquer les serveurs de courrier électronique / Web légitimes et provoquer des interruptions dans le courrier électronique ou le trafic.
Encore une fois, je sais que c’est cruel et qu’il existe probablement un protocole propre et efficace qui fait tout cela, mais je ne le savais pas et cette situation dure depuis un an ou deux maintenant et met les méchants à distance. La seule chose que je recommanderais TRÈS GRAVEMENT est que vous ayez un proxy ou un autre serveur dans les coulisses que vous pouvez utiliser pour accéder à votre serveur principal. La raison en est que si vous faites du développement Web un jour à l'improviste, vous cinglez vous-même 2000 fois en 5 heures pour certains tests, vous pourriez être bloqué sans aucun retour, sauf pour un proxy.
Vous pouvez voir que
checkBadIPs.sh
j'ai mis grep -v 127.0 et que dans mes fichiers réels, j'ai une tonne de règles d'ignorance pour ma propre adresse IP et d'autres plages d'adresses IP de confiance, mais parfois votre adresse IP change, vous oubliez de mettre à jour, puis vous êtes verrouillé. sur votre propre serveur.Quoi qu'il en soit, espérons que cela aide.
MISE À JOUR
J'ai un peu changé les choses afin qu'au lieu de vérifier toutes les deux heures, je vérifie quelques journaux toutes les 2 minutes, principalement mon journal d'authentification ssh et le journal de messagerie au fur et à mesure qu'ils se faisaient pilonner :(.
Je configure des scripts spécifiques pour chaque fichier journal, même si le script manuel que je m'utilise moi-même me permet de contrôler les journaux. Ressemble à ça:
Cela nécessite 2 entrées lors de l’exécution, le fichier journal que vous souhaitez analyser et la période écoulée dans le passé que vous souhaitez analyser.
Donc, si je voulais vérifier mail.log pour les comptes d'IP, disons 75 minutes dans le passé, je lancerais:
la source
ipset
plutôt que d'allonger la chaîne iptables, mais l'idée est géniale et je pense que je vais les appliquer à mes serveurs de production. Merci d'avoir partagé!Je suis d'accord avec les commentaires sur les ipsets et les drapeaux tcp, mais il manque encore beaucoup:
Utilisez la correspondance geoip d'xtables-addons au lieu d'ipsets pour les listes de pays. Mettez à jour les données geoip régulièrement (au moins une fois par mois). Les données sont plus dynamiques qu’une liste ipset feu et oublie.
Envisagez le suivi de l'état de la connexion avec les drapeaux TCP. Par exemple, un RTC ou ACK TCP n'a de sens que pour une connexion établie. SYN n'a de sens que pour les connexions nouvelles et connexes. Un SYN pour une connexion établie signifie que votre SYN + ACK a été perdu ou une tentative de piratage. Il doit être réinitialisé car les deux côtés de la connexion ne sont pas d’accord pour le dire.
Bien que aucune, SYN + RST et FIN + RST soient des combinaisons illégales, SYN + FIN est maintenant valide sous TCP à ouverture rapide (option TCP 34), en particulier pour DNS. Les paquets SYN, même à ouverture rapide, ne doivent pas être fragmentés. Je ne considère pas les règles avec les drapeaux PSH et URG comme utiles. Ne confondez pas l'état de suivi de connexion avec l'état TCP: une réponse RST à un paquet SYN est établie à des fins de suivi.
SYNPROXY est destiné aux paquets transférés et n’ajoute rien pour les paquets livrés localement au-delà du support syncookie.
Les paquets d'erreur ICMP seront toujours dans l'état associé et de longueur 48: 576 s'ils sont valides. Longueur 84: 1280 pour IPv6. Tous les autres doivent être ignorés. Comme leur taille maximale est également le MTU minimum, ils ne doivent jamais être fragmentés. Les requêtes ICMP (pings, horodatages, etc.) seront toujours nouvelles et les réponses établies. Déposez les paquets ICMP dans d'autres états.
Comme dans l'exemple SSH avec une liste récente et n'acceptant que les paquets SYN ultérieurs, il devrait en être de même pour SMTP. Cette procédure est similaire à «liste grise» sur la seule donnée d'adresse IP.
Dans la table de filtrage, la première règle (ou la seconde, si les paquets d'état établis sont acceptés en premier), dans les chaînes d'entrée et de sortie, doit accepter tout ce qui se trouve sur l'interface de bouclage. Vous devriez faire confiance à vos propres paquets internes. Si vous ne pouvez pas, vous avez des problèmes plus graves au-delà d'une solution de pare-feu.
Enfin, ne copiez pas aveuglément les règles, sauf si vous comprenez vraiment ce qu'elles font. De nombreuses listes de règles similaires le font, et la plupart du temps, le résultat est risible.
la source
la source