Lier iptables et shorewall [Réglé]
je tourne en rond...
Système et matériels / Réseau Internet Wi-Fi

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur

J'ai besoin d'un ch'ti coup de main, car je tourne en rond.

Pour protéger mon serveur, je récupère une liste d'IP du site abuseipdb.com (et d'autres) et je les injecte en iptable dans shorewall.
Seulement, voilà, cela ne semble pas marcher, car je vois quand même des requêtes de ces IP qui atteignent mon serveur.
Par exemple, dans mon log d'erreurs du serveur, j'ai :
2021/08/11 18:11:21 [error] 2182#2182: *1109 open() "/usr/share/nginx/html/boaform/admin/formLogin" failed (2: No such file or directory), client: 205.185.119.197, server: localhost, request: "POST /boaform/admin/formLogin HTTP/1.1", host: "mon_ip:80", referrer: "http://mon_ip:80/admin/login.asp"
Donc la machine avec l'IP 205.185.119.197 a réussi à atteindre mon serveur.
D'ailleurs, le log où shorewall écrit ne mentionne pas un blocage de cette IP en exécutant :
Code BASH :
grep '205.185.119.197' /var/log/syslog
Or, cet IP est dans liste d'adresses à bloquer, comme le montre le retour de la commande suivante :
Code BASH :
# ipset list | grep '205.185.119.197'
205.185.119.197
Pour créer la table d'IP, j'utilise le script suivant :
Code BASH :
#!/bin/bash # Set script variables ABUSE_DROP="/usr/local/src/abuseip.txt" ABUSE_ADD_TO_FW="/usr/local/src/abuseipv4.txt" SAVE_ABUSE="/etc/shorewall/abuseipdb" # Firewall list names ABUSE="abusedrop"; SPAM="spamhausdrop"; SPAME="spamhausedrop"; # # # Purge previous IP # echo "Création ipset DROP rules" /usr/sbin/ipset -exist create $ABUSE hash:net echo "Purge anciennes ipset DROP rules" /usr/sbin/ipset flush $ABUSE # # Téléchargements # echo "Telechargement liste ABUSEIP et extraction des IP" curl -G https://api.abuseipdb.com/api/v2/blacklist -d confidenceMinimum=90 -H "Key: xxxxxxxxxx" -H "Accept: text/plain" > $ABUSE_DROP #efface les IPv6 sed '/:/d' $ABUSE_DROP > $ABUSE_ADD_TO_FW echo "Update ipset avec ABUSE list" while read IP; do /usr/sbin/ipset -exist add $ABUSE $IP done < "$ABUSE_ADD_TO_FW" echo "Update firewall avec ABUSE rule" iptables -I INPUT -m set --match-set "$ABUSE" src -j LOG --log-prefix " ABUSEIPD " iptables -I INPUT -m set --match-set "$ABUSE" src -j DROP echo "Save ipset ABUSE list" ipset save $ABUSE > $SAVE_ABUSE # #make new list active in memory # echo ">" echo "Reload firewall" echo "--------------- " shorewall restart
Comme le montre la commande ipset list plus haut, cela fonctionne.
Par contre, je pense que l'intégration dans shorewall a un souci...
Bien entendu, le pare-feu est actif et bloque parfois des choses, mais pas les IP des listes que je fournis...
Pour lier, la table d'IP et shorewall, voici ma démarche.
1/Installation des paquets nécessaires :
Code BASH :
sudo urpmi xtables-addons xtables-geoip xtables-addons-kernel-desktop-latest
2/Ajout d'une règle dans /etc/shorewall/blrules :
Code BASH :
# # Shorewall -- /etc/shorewall/blrules # # For information about entries in this file, type "man shorewall-blrules" # # Please see https://shorewall.org/blacklisting_support.htm for additional # information. # ############################################################################################################################################################## #ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER MARK CONNLIMIT TIME HEADERS SWITCH HELPER DROP net:+[abusedrop,spamhausdrop,spamhausedrop] all
(J'ai en fait 3 iptables abusedrop, spamhausdrop,spamhausedrop car je récupère les listes d'IP depuis 3 sources. Mais je ne pense pas que le souci soit là.)
3/Rendre ce blocage persistent lors du redémarrage de la machine.
Editer pour cela le fichier /etc/shorewall/init et ajouter le bloc suivant :
Code BASH :
# # Shorewall -- /etc/shorewall/init # # Add commands below that you want to be executed at the beginning of # a "shorewall start", "shorewall-reload" or "shorewall restart" command. # # For additional information, see # https://shorewall.org/shorewall_extension_scripts.htm # ############################################################################### # restore Abuseipdb blacklist if present if [ -f /etc/shorewall/abuseipdb ]; then ipset destroy abusedrop ipset -file /etc/shorewall/abuseipdb restore fi
En fait, c'est en ligne avec le wiki https://wiki.mageia.org/en/Firewall que j'avais aussi enrichi.
Mais cela ne fonctionne pas, en fait...

Pourtant, il semble bien que shorewall voit les iptables :
Code BASH :
# shorewall show bl Shorewall 5.2.8 blacklist chains at cbct-serv - mer. 11 août 2021 18:48:37 CEST Chain net-fw~ (1 references) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 match-set abusedrop src match-set spamhausdrop src match-set spamhausedrop src
Quelqu'un aurait-il une idée ??

Merci

A+
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Me confirmes tu que :
Ton script vient définir des règles iptables
Shorewall vient définir des règles iptables
D'après le man mentionné en commentaire et particulièrement les exemples :
> DROP net:192.88.99.1 all
je me dis, pourquoi ne définies tu pas une telle liste avec ta liste d'ip ? Tu peux la générer, et "laisser tomber" la portion "ipset". Lorsque shorewall redémarrera, il viendra faire ces règles iptables.
Me trompe-je ?
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur

En fait, en installant les paquets xtables-addons xtables-geoip xtables-addons-kernel-desktop-latest cela doit cohabiter.
J'ai lu pas mal de blog et tuto sur le sujet ; y compris le wiki Mageia.
Je ne suis pas certain que shorewall écrive forcément des iptables.
Je peux bien sûr regarder pour faire comme tu dis. J'ai peur par contre d'une limite sur le nombre de IP. Ceci dit encore une fois, basé sur la littérature, cela devrait marcher ; en théorie (bis repetita...).
Avant de tout casser, pas d'autres idées ?
A+
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

funix Membre non connecté
-
- Voir le profil du membre funix
- Inscrit le : 17/12/2012
- Site internet
- Groupes :

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur
Oui, j'ai fail2ban aussi d'installé et de connecté avec shorewall ; ça, ça marche...
En fait, jybz, toutes mes excuses :
1/je n'utilise pas iptable mais bien ipset pour définir des listes à lire par shorewall via le fichier /etc/shorewall/blrules
2/il faut ignorer les commandes iptable de mon script. J'avais fini par les enlever au fil de mes recherches...
A+
Edit: le problème reste entier après cet erratum / mea culpa

Édité par squid-f Le 11/08/2021 à 23h03
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

funix Membre non connecté
-
- Voir le profil du membre funix
- Inscrit le : 17/12/2012
- Site internet
- Groupes :
Édité par funix Le 12/08/2021 à 07h37

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur
funix :
désolé je n'ai pas de réponse à ton problème, iptables m'a toujours paru particulièrement obscur, mais je suis ton post avec grand intérêt
Toutes les bonnes volontés sont les bienvenues

« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

gustine Membre non connecté
-
- Voir le profil du membre gustine
- Inscrit le : 26/09/2010
- Site internet
- Groupes :
squid-f :
j'ai fail2ban aussi d'installé et de connecté avec shorewall ; ça, ça marche...
Bonjour et désolé de détourner ce fil mais puisque fail2ban semble fonctionner, j'en profite.
De toute évidence, quelque chose m'échappe car chez moi (Mageia 7) fail2ban est activé mais sans effet.
Peut-tu me dire comment tu l'as paramétré ?
Merci d'avance.
I7-8700 - UHD Graphics 630 - 2x8 MO - Mageia 9 - Mate - serveur LAMP.

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
je t'invite à ouvrir un sujet dédié, on y répondra.
Ce sujet très spécifique et complexe ne devrait pas être détourner.
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
squid-f :
En fait, jybz, toutes mes excuses :
1/je n'utilise pas iptable mais bien ipset pour définir des listes à lire par shorewall via le fichier /etc/shorewall/blrules
2/il faut ignorer les commandes iptable de mon script. J'avais fini par les enlever au fil de mes recherches...
1/je n'utilise pas iptable mais bien ipset pour définir des listes à lire par shorewall via le fichier /etc/shorewall/blrules
2/il faut ignorer les commandes iptable de mon script. J'avais fini par les enlever au fil de mes recherches...
Étrange, j'ai lu un article, il utilise ipset pour définir une liste, puis iptables pour appliquer cette liste.
À mon avis, iptables reste bien le "moteur", celui qui filtre. Et j'ai l'impression que shorewall reste l'interface de plus haut niveau. Peut-être est-ce shorewall qui utilise ipset puis applique avec iptables ?
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
https://shorewall.org/blacklisting_support.htm#idm79
Même s'il est précisé :
Citation :
The name of the ipset can be optionally followed by a comma-separated list of flags enclosed in square brackets ([...])
Peux-tu remplacer :
Code TEXT :
DROP net:+[abusedrop,spamhausdrop,spamhausedrop] all
par
Code TEXT :
DROP net:+abusedrop DROP net:+spamhausdrop DROP net:+spamhausedrop
?
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
ipset ne fait que créer une base de donnée d'ip qu'elle garde en mémoire vive (donc à regénérer à chaque démarrage, ou à recharger si elle a été sauvegardée à l'extinction/reboot). C'est juste des listes d'ip, sans indications.
iptables est le moteur qui contrôle et applique les règles.
Shorewall vient "concevoir" les règles à appliquer par iptables.
Alors nous, nous n'avons jamais à toucher à iptables, c'est le rôle de shorewall.
Nous devons générer la "base de donnée (avec hash)" grâce à ipset, configurer shorewall pour prendre en compte ces bases de donnée lors de la conception des règles.
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur
Jybz :
Ai-je bien compris :
ipset ne fait que créer une base de donnée d'ip qu'elle garde en mémoire vive (donc à regénérer à chaque démarrage, ou à recharger si elle a été sauvegardée à l'extinction/reboot). C'est juste des listes d'ip, sans indications.
iptables est le moteur qui contrôle et applique les règles.
Shorewall vient "concevoir" les règles à appliquer par iptables.
Alors nous, nous n'avons jamais à toucher à iptables, c'est le rôle de shorewall.
Nous devons générer la "base de donnée (avec hash)" grâce à ipset, configurer shorewall pour prendre en compte ces bases de donnée lors de la conception des règles.
ipset ne fait que créer une base de donnée d'ip qu'elle garde en mémoire vive (donc à regénérer à chaque démarrage, ou à recharger si elle a été sauvegardée à l'extinction/reboot). C'est juste des listes d'ip, sans indications.
iptables est le moteur qui contrôle et applique les règles.
Shorewall vient "concevoir" les règles à appliquer par iptables.
Alors nous, nous n'avons jamais à toucher à iptables, c'est le rôle de shorewall.
Nous devons générer la "base de donnée (avec hash)" grâce à ipset, configurer shorewall pour prendre en compte ces bases de donnée lors de la conception des règles.
Oui, c'est ce que j'ai compris aussi. J'avais en fait commencé par appliquer par iptable (d'où la confusion que j'ai créé à l'ouverture du poste), puis je suis revenu en arrière pour faire appliquer par ipset, comme tu l'indiques fort bien.
Je suis sous le IRC de shorewall, après discussion, quelqu'un essaye de repliquer ma configuration pour voir si cela bloque chez lui / elle. A suivre...
@gustine, oui, ouvre un post spécifique. J'ai dû modifier la configuration par défaut de Mageia pour que fail2ban fonctionne. Après, cela dépend de ce que tu veux bloquer et il faut en savoir plus.
A+
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur
Il y a donc quelque chose lié à ma configuration ou à l'intégration de shorewall dans MGA ; mais quoi.... !
A+
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire

squid-f Membre non connecté
-
- Voir le profil du membre squid-f
- Inscrit le : 03/04/2016
- Groupes :
-
Membre d'Honneur
après avoir monopolisé l'IRC de shorewall, tout le monde était sec.
J'ai appliqué la proposition de jybz de couper les règles dans blrules, même si personne ni croyait, cela fonctionne maintenant !
Apparemment, il semble que je sois le seul à utiliser cela. Ils vont supprimer cette syntaxe de la documentation ! Probablement un bug mais il semble plus simple de ne pas chercher à utiliser cette fonctionnalité !
En résumer ne pas utiliser dans /etc/shorewall/blrules :
Code BASH :
DROP net:+[abusedrop,spamhausdrop,spamhausedrop] all
mais
Code BASH :
DROP net:+abusedrop all DROP net:+spamhausdrop all DROP net:+spamhausedrop all
Merci à tous.
A+
« Plus les hommes seront éclairés et plus ils seront libres. » ~ Voltaire
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie