Iptables / xt_owner : un pare-feu pour la station de travail Linux

Iptables / xt_owner : un pare-feu pour la station de travail LinuxSi j’ai abandonné la station de travail Linux, c’est en grande partie à cause de son pare-feu, incapable d’associer un process à la règle de pare-feu comme on peut le faire très simplement sous Windows depuis Vista. Je n’avais jamais trouvé de solution pour le filtrage des flux sortants par process sous Linux. Je n’ai pas eu d’autres choix que d’installer Fedora sur un NVMe en mode Thunderbolt au niveau de mon ordinateur portable dont une des soudures internes s’est cassée. Avec Iptables et le module xt_owner, je suis parvenu à associer la règle de pare-feu sortante avec le process en passant par la création d’un groupe. Le module xt_owner ne semble fonctionner qu’en OUTPUT. C’est tout de même une sacrée limitation !

Pré-requis

Sur Fedora, j’ai tout d’abord désinstallé firewalld, pour installer iptables.

dnf remove firewalld -y
dnf install iptables-services xtables-addons -y

Ajoutez le module xt_owner au chargement du système dans le fichier /etc/modules. Vous pouvez aussi, sans que j’en sache la réelle utilité, ajouter ce module à la configuration du service iptables dans le fichier /etc/sysconfig/iptables-config :

IPTABLES_MODULES="xt_owner"

Création des groupes d’applications

J’ai dû d’abord créer les groupes que j’ai associé à mes règles de pare-feu et auxquels mon utilisateur doit appartenir pour pouvoir sortir à partir de l’application.

groupadd http vlc torrent
usermod -g administrateur -G administrateur,wheel,http,vlc,torrent

Les règles de pare-feu

Éditez le fichier /etc/sysconfig/iptables pour la configuration IPv4 :

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

#Etats de connexion
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#Loopback
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

#DHCP
-A INPUT -p udp -m state --state NEW -m udp --dport 68 -j ACCEPT
-A OUTPUT -p udp -m state --state NEW -m udp --dport 67 -j ACCEPT

#NTP
-A OUTPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
#DNS FDN
-A OUTPUT -p udp -m state --state NEW -m udp --dport 53 -d 80.67.169.12 -j ACCEPT
-A OUTPUT -p udp -m state --state NEW -m udp --dport 53 -d 80.67.169.40 -j ACCEPT

#Surf pour Firefox, dnf, etc
-A OUTPUT -m state --state NEW -p tcp -m tcp -m owner --gid-owner http -m multiport --dports 80,443 -j ACCEPT
-A OUTPUT -m state --state NEW -p udp -m udp -m owner --gid-owner http -m multiport --dports 80,443 -j ACCEPT

#Torrent / Port 49302 redirigé à partir de la FreeBox
-A OUTPUT -m state --state NEW -p udp -m udp -m owner --gid-owner torrent -m multiport --dports 1:65535 -j ACCEPT
-A INPUT -m state --state NEW -p udp -m udp --dport 49302 -j ACCEPT

#VLC / FreeBox
-A OUTPUT -m state --state NEW -p tcp -m tcp -m owner --gid-owner vlc -m multiport --dports 80,443,554 -d 212.27.38.253 -j ACCEPT
-A INPUT -m state --state NEW -p udp -m udp -s 212.27.38.253 -j ACCEPT

COMMIT

Une fois la configuration terminée, vous devez lancer le service et l’activer au démarrage :

systemctl start iptables
systemctl stop iptables

Les scripts de lancements d’application

Pour que l’application soit associée à la règle de pare-feu, vous devez spécifier le groupe utilisé à l’aide de la commande sg.

Pour Firefox :

#! /bin/bash
sg http -c "/usr/bin/firefox" &
exit 0

Pour VLC :

#! /bin/bash
sg vlc -c "/usr/bin/vlc" &
exit 0

Pour qBittorrent :

#! /bin/bash
sg torrent -c "/usr/bin/qbittorrent" &
exit 0

Sécurité informatique /