La présentation détaillée des ipsets est proposée dans le wiki bloquer des adresses IP indésirables.
On cherche ici à créer une règle autorisant le trafic en sortie sur un port particulier (8000) vers un groupe d'adresses IP seulement.
# Création d'une groupe contenant au maximum 256 adresses sudo ipset create canon_mfc hash:ip maxelem 256 # ajout de quelques adresses dans le groupe sudo ipset add canon_mfc 192.168.0.10 sudo ipset add canon_mfc 192.168.0.20 sudo ipset add canon_mfc 192.168.0.33
Dans un premier temps on utilise le cli iptables, les changements seront ainsi réversibles en cas d'erreur en rechargeant simplement le pare-feu ufw
# Journalise le trafic sortant à destination des machines de l'ensemble canon_mfc iptables -A ufw-after-output -m set --match-set canon_mfc dst -p tcp --dport 8000 -j ufw-logging-allow # Autorise le trafic sortant à destination des machines de l'ensemble canon_mfc iptables -A ufw-after-output -m set --match-set canon_mfc dst -p tcp --dport 8000 -j ACCEPT # Journalise le trafic provenant des machines de l'ensemble set_autorized_hosts iptables -A ufw-after-input -i eth0 -m set --match-set set_autorized_hosts src -j ufw-logging-allow # Autorise le trafic en provenance des machines de l'ensemble set_autorized_hosts iptables -A ufw-after-input -i eth0 -m set --match-set mgmt src -j ACCEPT
Vérifier la présence de la nouvelle règle dans la chaîne:
iptables -L ufw-after-output ... ufw-logging-allow tcp -- anywhere anywhere match-set canon_mfc dst tcp dpt:8000 ACCEPT tcp -- anywhere anywhere match-set canon_mfc dst tcp dpt:8000
Contacter l’hôte sur le port 8000 et vérifier les traces dans les journaux système:
journalctl -k --since "1 minutes ago" -- Logs begin at Wed 2021-06-16 14:39:52 CEST, end at Tue 2021-10-19 18:06:04 CEST. -- oct. 19 18:05:32 node-7c87 kernel: [UFW ALLOW] IN= OUT=enp0s31f6 SRC=192.168.0.1 DST=192.168.0.10 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48686 DF PROTO=TCP SPT=38250 DPT=8000 WINDOW=64240 RES=0x00 SYN URGP=0 ...
En cas de problème ou une fois le fonctionnement de la règle confirmé, on peut recharger le pare-feu, les modifications apportées précédemment seront effacées.
ufw reload
Pour rendre la règle permanente, il faut l'intégrer dans le framework UFW. La règle ne pourra être valide syntaxiquement que si les ensembles existent. Il faut donc que les ensembles ipset soient créés avant.
# rendre executable le script before.init s'il ne l'est pas chmod +x before.init # Sauvegarder les ensembles ipset existants: ipset save > /etc/ufw/ipsets.save
Modifier le fichier /etc/ufw/before.init
pour que les ensembles soient recréés depuis la sauvegarde lors du redémarrage
#!/bin/sh # # before.init: if executable, called by ufw-init. See 'man ufw-framework' for # details. Note that output from these scripts is not seen via the # the ufw command, but instead via ufw-init. # # Copyright 2013 Canonical Ltd. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # set -e case "$1" in start) # create ipsets from definition file ipset restore < /etc/ufw/ipsets.save ;; stop) # delete all ipsets ipset destroy ;; status) # optional ;; flush-all) # optional ;; *) echo "'$1' not supported" echo "Usage: before.init {start|stop|flush-all|status}" ;; esac
Pour l'exemple présent, on cherche à autoriser le traffic à destination du port managment de certaines impirmantes. Le traffic n'est pas proritaire ou régulier, on va l'intégrer au règles évaluées après les règles utilisateur ufw. Pour cela on modifie le fichier le /etc/ufw/after.rules
# Journalise et autorise le traffic vers l'interface Web de gestion des MFC Canon -A ufw-after-output -m set --match-set canon_mfc dst -p tcp --dport 8000 -j ufw-logging-allow -m comment --comment "Allow Management Canon MFC" -A ufw-after-output -m set --match-set canon_mfc dst -p tcp --dport 8000 -j ACCEPT -m comment --comment "Allow Management Canon MFC"
On recharge les règles:
ufw reload
D'autres machines pourront ainsi être ajoutées à ce groupe sans qu'il soit nécessaire de créer une nouvelle règle ou de recharger les règles existantes.
# Ajoute une nouvelle machine au groupe. La règle existante s'applique immédiatement à ce nouveau membre
ipset add canon_mfc 192.168.0.42
# root ipset save > /etc/ufw/ipsets.save # ou depuis un sudoer sudo ipset save | sudo tee /etc/ufw/ipsets.save
Pour afficher les règles évaluées après les règles utilisateur auxquelles notre nouvelle règle a été ajoutée:
ufw show after-rules