Pare-feu IPv4/IPv6, versions bureau serveur

C’est dommage d’avoir supprimé la chaîne LOG_DROP et doublé chaque règle DROP avec une règle LOG. Il fallait juste corriger la cible ACCEPT de la dernière règle de la chaîne en DROP.

Un exemple d’utilisation de la règle LOG_ACCEPT si les connexions SSH étaient autorisées :

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

En fin de chaîne, si on veut logger les paquets avec un préfixe différent de celui des logs de paquets invalides explicitement bloqués :

iptables -A INPUT -j LOG --log-prefix "INPUT:end of chain:" --log-level 6

Merci, j’y vois un peu plus clair.

Cette règle logge aussi les paquets acceptés, c’est bien ça?
Ou serait-il le plus judicieux de placer ce genre de règle? Après toutes les règles de scans ou à la fin du script?

Quelles règles DROP puis-je supprimer?

Je cherchais midi à 14h mais c’était tout simple!

#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
#
#logger 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 DROP
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
#
#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) + logger les connexions acceptées
#iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j LOG_ACCEPT
#iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j ACCEPT
#
#logger les paquets avec un préfixe différent de celui des logs de paquets invalides explicitement bloqués
iptables -A INPUT -j LOG --log-prefix "INPUT:end of chain:" --log-level 6
#

Pas si c’est la dernière règle de la chaîne et les paquets qui sont arrivés là vont être traités par la politique par défaut réglée à DROP.

Je croyais que c’était enfin clair après tous ces échanges…

Toutes celles qui ont été dupliquées avec une règle LOG_DROP. J’observe que tu ne les as pas toutes dupliquées (celles relatives à 127.0.0.0), une raison particulière ?

Avant d’utiliser la chaîne LOG_ACCEPT, il faut la créer et la remplir, comme la chaîne LOG_DROP.
Ensuite, la règle ACCEPT dupliquée pourra être supprimée, comme les règles DROP.

Non aucune. C’est vrai qu’il serait intéressant de les rajouter.

#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
#
#logger 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 DROP
# DROP paquets TCP NEW autres que SYN + log
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG_DROP
# DROP paquets invalides +log
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG_DROP
# DROP NULL +log
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG_DROP
# DROP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG_DROP
# DROP SYNFIN +log
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG_DROP
# DROP FIN scan +log
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j LOG_DROP
# DROP SYN RST +log
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG_DROP
# DROP NMAP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG_DROP
# DROP NMAP +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG_DROP
# DROP port scans +log
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_DROP
#autorise lo +log
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j LOG_DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j LOG_DROP
iptables -A INPUT -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#logger les paquets avec un préfixe différent de celui des logs de paquets invalides explicitement bloqués
iptables -A INPUT -j LOG --log-prefix "INPUT:end of chain:" --log-level 6
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh) + logger les connexions acceptées
#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 -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j LOG_ACCEPT
#

La règle LOG “end of chain” n’est plus à la fin de la chaîne, ce qui va engendrer une difficulté d’interprétation des logs. Les paquets envoyés dans LOG_ACCEPT après avoir passé cette règle seront loggés en double.

Voilà je pense que l’on est au bout.

#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
#
#logger 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 DROP
# DROP paquets TCP NEW autres que SYN + log
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG_DROP
# DROP paquets invalides +log
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG_DROP
# DROP NULL +log
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG_DROP
# DROP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG_DROP
# DROP SYNFIN +log
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG_DROP
# DROP FIN scan +log
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j LOG_DROP
# DROP SYN RST +log
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG_DROP
# DROP NMAP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG_DROP
# DROP NMAP +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG_DROP
# DROP port scans +log
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_DROP
#autorise lo +log
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j LOG_DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j LOG_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) + logger les connexions acceptées
#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 -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j LOG_ACCEPT
#logger les paquets avec un préfixe différent de celui des logs de paquets invalides explicitement bloqués
iptables -A INPUT -j LOG --log-prefix "INPUT:end of chain:" --log-level 6

En effet, je n’ai plus de remarque à faire. Il n’y a plus qu’à mettre en place et tester.
Attention à surveiller la taille des logs si la machine reçoit beaucoup de trafic indésirable.

Un grand merci pour votre suivi.