Pare-feu IPv4/IPv6, versions bureau serveur

OK merci.

J’ai l’impression que les sites se recopient les uns les autres. Ils ont tous les mêmes règles et donc les mêmes fautes. La preuve, leurs règles sont identiques aux miennes !! Ils expliquent surtout comment faire des scans XMAS et NULL mais nullement comment s’en protéger.
J’ai trouvé un site qui expliquait bien les flags et qui proposait une protection plus élargie.

# DROP paquets autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# DROP paquets incomplets
iptables -A INPUT -f -j DROP

# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP

# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP

# DROP SYN FLOOD
iptables -N SYN-FLOOD
iptables -A SYN-FLOOD -m limit --limit 1/sec --limit-burst 4 -j RETURN
iptables -A SYN-FLOOD -j DROP

# DROP port scans
iptables -N PORT-SCAN
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN
iptables -A PORT-SCAN -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A PORT-SCAN -j DROP

# Blocage IP attaque 24h
iptables -A INPUT -m recent --name DUMBASS --rcheck --seconds 86400 -j DROP

# Levée du blocage
iptables -A INPUT -m recent --name DUMBASS --remove

Le commentaire est ambigu. As-tu bien compris la portée de cette règle ?

Euh, en quoi cette chaîne est-elle censée lutter contre un SYN flood ?

Pourquoi traiter ces paquets invalides différemment des autres type de scan, et en laisser passer un par seconde au lieu de tous les bloquer ?

Je recommande la plus grande prudence avec la correspondance “recent”. Un attaquant capable d’envoyer des paquets avec une adresse source arbitraire peut non seulement se sortir du blocage mais aussi l’exploiter pour provoquer un déni de service à l’encontre de l’utilisateur légitime d’une adresse IP usurpée.

# DROP paquets autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# DROP paquets incomplets
# Force la vérification des paquets fragmentés
# DROP les paquets fragmentés
iptables -A INPUT -f -j DROP

# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP

# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP

# DROP port scans
iptables -N PORT-SCAN
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN
iptables -A PORT-SCAN -j DROP

Je ne sais pas si je peux supprimer la deuxième ligne et ne garder donc que ces deux règles:

    iptables -N PORT-SCAN
    iptables -A PORT-SCAN -j DROP

# DROP SYN FLOOD
#limite le nombre de connections tcp entrantes
iptables -N syn_flood
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn_flood -j DROP

Je vais alors supprimer ces deux règles.

Je répète ma question : comprends-tu la portée de cette règle ?

Si tu supprimes la deuxième ligne, la chaîne utilisateur PORT-SCAN ne sera pas parcourue par les paquets entrants. Je ne vois pas l’intérêt de passer par une chaîne utilisateur juste pour ce type de paquet. Pourquoi ne pas faire comme pour les autres ?

Quels genres de connexions TCP entrante veux-tu limiter globalement à un taux aussi faible ? Ne vaudrait-il pas mieux mettre des limites individuelles dans les règles autorisant chaque type de connexion (s’il y en a) ?

Franchement non.

Tu veux dire comme ceci ?
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

J’aimerais bien mais je ne sais pas comment écrire ce genre de règles. Peux-tu me donner un exemple ?

Franchement non.

Tu veux dire comme ceci ?
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

J’aimerais bien mais je ne sais pas comment écrire ce genre de règles. Peux-tu me donner un exemple ?

L’option -f détecte les fragments de paquets IP.

Qu’est-ce qu’un fragment ?
Un fragment est un paquet IP. Mais ce n’est pas un paquet complet (parfois appelé datagramme), il ne contient qu’une partie de la charge utile.
Un fragment est un paquet valide, contrairement à un paquet tronqué dont la taille réelle ne correspond pas à la taille annoncée dans son en-tête IP.
Un paquet IP doit être fragmenté lorsqu’il doit être transmis à travers un lien réseau dont la taille maximum de paquet (MTU) est inférieure à la taille du paquet. Pour rappel, la taille maximum d’un paquet IP est 65535 octets mais la MTU typique des liaisons ethernet est de l’ordre de 1500. Le paquet est alors divisé en fragments de taille inférieure ou égale à la MTU. Comme tout paquet IP, chaque fragment a un en-tête IP comportant notamment les adresses source et destination, le protocole (TCP, UDP, ICMP…).

Pourquoi filtrer les fragments ?
Les fragments ont été exploités par divers types d’attaques ou pour contourner les pare-feux.

  • Lorsqu’un hôte reçoit un premier fragment, il doit allouer un tampon en mémoire de taille suffisante pour contenir le paquet complet et attendre de recevoir tous les autres fragments afin de compléter le paquet originel. Un attaquant peut envoyer de faux fragments pour faire consommer des ressources à la cible et provoquer un déni de service.
  • Les informations de l’en-tête du protocole transporté (ports source et destination TCP ou UDP, type de message ICMP…) ne sont pas dupliquées dans tous les fragments. Au mieux, l’en-tête complet est contenu dans le premier fragment s’il est assez grand. Au pire, il est réparti dans plusieurs fragments s’ils sont de taille très réduite. Or les pare-feux utilisent souvent ces informations pour déterminer si un paquet doit être accepté ou bloqué.

Cependant, netfilter a une fonctionnalité appelée “suivi de connexion” (connection tracking) qui est activée notamment quand on crée une règle iptables utilisant les correspondances state ou conntrack ou quand on active la table nat. Le suivi de connexion a besoin d’examiner les paquets complets, donc il intègre son propre mécanisme de réassemblage des paquets fragmentés. Le suivi de connexion en entrée s’insère entre les chaînes PREROUTING des tables raw et mangle. En sortie, il s’insère avant la chaîne OUTPUT. Par conséquent, lorsque le suivi de connexion est activé, aucun fragment ne peut être vu dans les chaînes INPUT ou FORWARD.

Donc en pratique, ta règle n’a aucun effet. Dans le cas contraire, elle bloquerait des paquets légitimes.

Oui.

Pour limiter le nombre de connexions SSH entrantes par seconde :

iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT

au lieu de

iptables -A INPUT -p tcp --dport 22 --state NEW -j ACCEPT
2 J'aime

OK. Merci pour ton explication.

Voici le script corrigé. J’espère n’avoir rien omis.

#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
#autorise lo
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i lo -d 127.0.0.0/8 -j DROP
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser les connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#
# DROP paquets autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
#
# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
#
# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
#
# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#

#
# On log les paquets en entrée.
iptables -A INPUT -j LOG
#
# On log les paquets forward.
iptables -A FORWARD -j LOG

Je pense alors que je n’ai plus besoin de ces deux règles:

 # DROP SYN FLOOD
 iptables -N syn_flood
 iptables -A syn_flood -j DROP
iptables -A INPUT -i lo -d 127.0.0.0/8 -j DROP

Cette règle est inutile car elle intervient après une règle plus permissive. Et c’est tant mieux. Quelle était ton intention ?

  • Limiter le trafic sur l’interface de loopback au seul préfixe 127.0.0.0/8 (ACCEPT au lieu de DROP) ? Ce n’est pas une bonne idée car le trafic sur cette interface peut utiliser n’importe quelle adresse “locale”, c’est-à-dire configurée sur n’importe quelle interface de la machine.

  • Bloquer les paquets entrants par une interface autre que loopback avec une adresse destination dans iptables 127.0.0.0/8 ? C’est une bonne idée puisque ces adresses ne devraient jamais être utilisées avec une autre interface ou à l’extérieur d’un hôte mais il y a un erreur dans la réalisation, il faut inverser la condition -i en la précédant d’un “!” :

    iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP

On peut faire de même avec l’adresse source.

Les règles DROP qui bloquent les paquets invalides de toute sorte devraient intervenir avant les règles ACCEPT qui autrement pourraient accepter ces paquets.

Concernant les règles LOG, quel est l’objectif ? Ici, elles loggent seulement les paquets qui n’ont été ni acceptés ni explicitement bloqués par une règle précédente. Par exemple les demandes de connexion valides à des ports non autorisés, comme un scan de port standard (SYN scan). Attention à l’espace disque occupé par ces logs.

En effet puisqu’un simple DROP fait le même chose.

Je vais alors plutôt logger les paquets refusés:

iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
# DROP paquets autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
#autorise lo
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT ! -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#
# On log les paquets refusés
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
#
# On log les paquets forward.
iptables -A FORWARD -j LOG

Je répète que ce que va logger cette règle dépend de son placement dans la chaîne. En fin de chaîne, elle ne va logger que les paquets qui n’ont été ni acceptés par une règle ACCEPT ni bloqués par une règle DROP, et qui vont être bloqués ensuite par la politique par défaut DROP de la chaîne.

J’ai oublié de dire que ce commentaire devrait être “DROP paquets TCP NEW autres que SYN” pour correspondre à la règle (et pas l’inverse, sinon aucune connexion TCP ne serait possible).

Pas d’inversion dans cette règle ! Il ne fallait pas la modifier. Sinon cela accepte tous les paquets entrants sur n’importe quelle interface sauf le loopback…

Où vaudrait-il mieux la placer?

Simplement logger ce qui pose un problème de sécurité.

J’ai mal compris votre commentaire. Que voulez-vous dire par “On peut faire de même avec l’adresse source”?

Je répète que cela dépend de ce qu’il faut logger. Choix de l’administrateur.

Ça n’avance pas beaucoup. Qu’est-ce qui doit être considéré comme un problème de sécurité ? Là encore, choix de l’administrateur.
D’un point de vue extrême que je ne suis pas loin de partager, un paquet bloqué n’est pas un problème de sécurité puisqu’il est bloqué.

La plage d’adresses de loopback est invalide sur une interface autre que loopback, en source ou en destination. La règle suivante vérifie l’adresse destination :

iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP

en toute rigueur il faudrait aussi une règle qui vérifie l’adresse source :

iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j DROP

Peut-être que ça serait utile de logger les paquets droppés après les règles des scans et ensuite de logger les paquets acceptés en fin de script?

#
#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
# DROP paquets TCP NEW autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
#on log les paquets droppés
iptables -A INPUT -j LOG --log-prefix "INPUT:DROP:" --log-level 6
#
#autorise lo
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#
# On log les paquets acceptés
iptables -A INPUT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
#
# On log les paquets forward.
iptables -A FORWARD -j LOG

Peut-être, mais ce n’est pas ce que fait la dernière version du script.
Il faut bien comprendre que les cibles DROP et ACCEPT interrompent le parcours des règles suivantes.

Le premier LOG ne loggue pas les paquets bloqués mais les paquets qui n’ont pas été bloqués par les règles DROP précédentes.
Le second LOG ne loggue pas les paquets acceptés mais les paquets (éventuellement une deuxième fois) qui n’ont pas été acceptés par les règles ACCEPT précédentes.

Quant au LOG dans FORWARD, il ne sert à rien si le forwarding IP n’est pas activé, aucun paquet ne sera jamais envoyé dans cette chaîne.

1 J'aime

Donc je dois faire l’inverse.

#
#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
# DROP paquets TCP NEW autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
#on log les paquets droppés
iptables -A INPUT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
#
#autorise lo
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#
# On log les paquets acceptés
iptables -A INPUT -j LOG --log-prefix "INPUT:DROP:" --log-level 6
#

Visiblement tu as du mal à comprendre la logique de fonctionnement, et je ne sais pas comme l’expliquer mieux. Changer le préfixe des LOG ne change pas ce qui est loggé. On ne peut pas LOGer un paquet qui a déjà été ACCEPTé ou DROPé, c’est trop tard. Il faut le faire avant car ACCEPT et DROP sont des cibles dites “terminales” qui arrêtent le parcours des règles de la chaîne.

Par exemple si on veut logger les paquets acceptés par une règle, il faut soit doubler la règle ACCEPT par une règle LOG avec les mêmes correspondances (quand c’est possible, attention avec les correspondances utilisant des compteurs comme limit ou recent) juste avant, soit remplacer la cible ACCEPT de cette règle par une chaîne utilisateur qui va contenir deux règles LOG et ACCEPT. Même chose avec les paquets bloqués.

La seule exception est si on veut logger les paquets qui atteignent la fin de la chaîne sans avoir été acceptés ni bloqués par les règles et auxquels la politique par défaut de la chaîne va être appliquée : on peut mettre une règle LOG en fin de chaîne pour ces paquets.

Voilà, j’espère que j’approche du but. J’ai créé une chaîne LOG_ACCEPT ou DROP qui accepte tous les paquets. Ensuite je l’ai appliquée aux chaînes souhaitées.

#
#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
#logguer les paquets droppés
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A LOG_DROP -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG_DROP
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG_DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_DROP
#
# DROP paquets TCP NEW autres que SYN
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
#
#autorise lo
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i lo -j ACCEPT
#
#logger les paquets acceptés
iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
iptables -A LOG_ACCEPT -j ACCEPT
iptables -A INPUT -j LOG_ACCEPT

#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#

#

Je suppose que c’est une grosse coquille ?

Maintenant que tu as créé des versions LOG_DROP de (presque) toutes les règles DROP, les règles DROP originelles ne servent plus à rien et peuvent être supprimées.

Jusqu’ici, tout va bien. Mais ensuite, ça se gâte :

accepte inconditionnellement tous les paquets entrants qui n’ont pas déjà été bloqués, rendant les règles suivantes et la politique par défaut de la chaîne inutiles.

Je conseillerais plutôt d’utiliser LOG_ACCEPT à la place de ACCEPT dans les règles qui autorisent les demandes de onnexion, comme celle qui est commentée en exemple. Je ne vois pas l’utilité de logger tous les paquets des connexions établies.

Si ce n’est pas utile, je ne vais pas rajouter de règles pour logger les paquets acceptés.

Pour éviter de te faire perdre davantage ton temps, ce serait beaucoup plus simple que tu rectifies une des règle LOG . J’y verrais beaucoup plus clair avec un exemple.

Je te remercie d’avance.

#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
#
# DROP paquets TCP NEW autres que SYN +logger paquets droppés
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
#
# DROP paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#
# DROP NULL
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#
# DROP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP SYNFIN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

# DROP FIN scan
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

# DROP SYN RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# DROP NMAP XMAS
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
#
# DROP NMAP 
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP
#
# DROP port scans
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
#
#
#autorise lo
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh)
# iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#