Linux – Configuration durcie d’iptables (parefeu)

Iptables, pour faire simple, est le (un des) parefeu sous Linux.

Voici une configuration durcie mais permissive à appliquer dès installation pour renforcer la sécurité.

-s 0.0.0.0/0: permet de limiter au réseau source spécifié, si tout est à zéro tout est autorisé
-d 0.0.0.0/0: permet de limiter au réseau de destination spécifié, si tout est à zéro tout est autorisé

### Partie nécessaire

# Suppression de toutes les règles
sudo iptables -F FORWARD
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -X

# Application de la politique DROP par défaut (tout rejeter)
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

# Autoriser tout trafic sur l’adresse interne en 127
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Autoriser toute connexion entrante relative à une connexion sortante autorisée
sudo iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# Autoriser toute connexion sortante relative à une connexion sortante autorisée
sudo iptables -I OUTPUT 1 -m state –state RELATED,ESTABLISHED -j ACCEPT

### Partie où chaque règle est optionnelle

# Autoriser le SSH entrant
sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -s 0.0.0.0/0 -j ACCEPT

# Autoriser openvpn en entrée, si vous installez un serveur openvpn sur votre pc
sudo iptables -A INPUT -p udp –dport 1194 -m state –state NEW -s 0.0.0.0/0 -j ACCEPT

# Idem, sur le port 443 si vous décidiez de cacher votre flux dans du https afin de vous échapper d’un portail captif vers le vpn chez vous 😉
sudo iptables -A INPUT -p tcp –dport 443 -m state –state NEW -s 0.0.0.0/0 -j ACCEPT

# Autoriser les requêtes DNS en sortie (sauf si vous paramétrez votre pc en DNS over TLS
sudo iptables -A OUTPUT -p udp –dport 53 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 53 -m state –state NEW -j ACCEPT

# Autoriser le surf en HTTP
sudo iptables -A OUTPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT

# Autoriser le surf en HTTPS
sudo iptables -A OUTPUT -p tcp –dport 443 -m state –state NEW -j ACCEPT

# Autoriser le DNS over TLS
sudo iptables -A OUTPUT -p tcp –dport 853 -m state –state NEW -j ACCEPT

# Autoriser le FTP en sortie
sudo iptables -A OUTPUT -p tcp –dport 21 -m state –state NEW -j ACCEPT

# Autoriser le SSH en sortie
sudo iptables -A OUTPUT -p tcp –dport 22 -m state –state NEW -j ACCEPT

# Autoriser la sortie sur Nordvpn (si vous utilisez un client autre que le natif qui applique ses propres règles)
sudo iptables -A OUTPUT -p tcp –dport 1723 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 1194 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 443 -m state –state NEW -j ACCEPT

# Autoriser l’envoi de mails depuis le pc (smtp) avec un client dédié, pas utile depuis le navigateur
# Le port 25, smtp non chiffré, ne doit pas être ouvert, à vous de choisir
sudo iptables -A OUTPUT -p tcp –dport 25 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 465 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 587 -m state –state NEW -j ACCEPT

# Autoriser la réception de mails depuis le pc (pop3) avec un client dédié, pas utile depuis le navigateur
# Le port 110, pop3 non chiffré, ne doit pas être ouvert, à vous de choisir
sudo iptables -A OUTPUT -p tcp –dport 110 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 995 -m state –state NEW -j ACCEPT

# Autoriser l’envoi et la réception de mails depuis le pc (imap) avec un client dédié, pas utile depuis le navigateur
# Le port 143, imap non chiffré, ne doit pas être ouvert, à vous de choisir
sudo iptables -A OUTPUT -p tcp –dport 143 -m state –state NEW -j ACCEPT
sudo iptables -A OUTPUT -p tcp –dport 993 -m state –state NEW -j ACCEPT

# Autoriser le ntp chez ubuntu
iptables -A OUTPUT -p udp –dport 123 -d 91.189.94.4 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.89.199 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.89.198 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.91.157 -j ACCEPT

# Logger les paquets droppés, sans limite
iptables -N LOGGINGO
iptables -N LOGGINGI
iptables -A INPUT -j LOGGINGI
iptables -A OUTPUT -j LOGGINGO
iptables -A LOGGINGI -j LOG –log-prefix « IPTables-Input-Dropped:  » –log-level 4
iptables -A LOGGINGI -j DROP
iptables -A LOGGINGO -j LOG –log-prefix « IPTables-Output-Dropped:  » –log-level 4
iptables -A LOGGINGO -j DROP

# Logger les paquets droppés, avec limite pour ne pas saturer le /var/log
iptables -N LOGGINGO
iptables -N LOGGINGI
iptables -A INPUT -j LOGGINGI
iptables -A OUTPUT -j LOGGINGO
iptables -A LOGGINGI -m limit –limit 2/min -j LOG –log-prefix « IPTables-Input-Dropped:  » –log-level 4
iptables -A LOGGINGI -j DROP
iptables -A LOGGINGO -m limit –limit 2/min -j LOG –log-prefix « IPTables-Output-Dropped:  » –log-level 4
iptables -A LOGGINGO -j DROP

# Afficher les règles actives
sudo iptables -L -n -v

# Désactiver UFW, le parefeu simplifié concurrent (requis pour le client nordvpn officiel)
sudo ufw disable

 

On installe iptables-persistent, pour garder les règles à chaque démarrage:
sudo apt-get install iptables-persistent
L’installeur vous proposera de les sauvegarder pendant l’installation

Si vous modifiez vos règles, voici comment les resauvegarder ou les recharger:
sudo netfilter-persistent save
sudo netfilter-persistent reload

 

 

 

Pour info, voici les miennes, un poil plus restrictives 🙂 :
# Flushing all rules
iptables -F FORWARD
iptables -F INPUT
iptables -F OUTPUT
iptables -X

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Accept inbound TCP packets
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# Accept outbound packets
iptables -I OUTPUT 1 -m state –state RELATED,ESTABLISHED -j ACCEPT

# Autoriser le ping
iptables -A OUTPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT

# Allow HTTP outbound
iptables -A OUTPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT

# Allow HTTPS outbound
iptables -A OUTPUT -p tcp –dport 443 -m state –state NEW -j ACCEPT

# Allow DNS-tls outbound – adguard
iptables -A OUTPUT -p tcp –dport 853 -d 176.103.130.130 -m state –state NEW -j ACCEPT
iptables -A OUTPUT -p tcp –dport 853 -d 176.103.130.131 -m state –state NEW -j ACCEPT

# Allow SSH outbound – MON HEBERGEUR WEB
iptables -A OUTPUT -p tcp –dport 22 -d IP_MASQUEE -m state –state NEW -j ACCEPT

# Allow FTP outbound – MON SITE D’UPLOAD
iptables -A OUTPUT -p tcp –dport 21 -d IP_MASQUEE -m state –state NEW -j ACCEPT

# Autoriser sortie sur nordvpn
iptables -A OUTPUT -p tcp –dport 1723 -m state –state NEW -j ACCEPT
iptables -A OUTPUT -p tcp –dport 1194 -m state –state NEW -j ACCEPT

# Autoriser le ntp chez ubuntu
iptables -A OUTPUT -p udp –dport 123 -d 91.189.94.4 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.89.199 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.89.198 -j ACCEPT
iptables -A OUTPUT -p udp –dport 123 -d 91.189.91.157 -j ACCEPT

# Disable ufw
sudo ufw disable

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

20 janvier 2020