MDstable
NoteSnippetChecklistPlaybook

Règles Firewall

Configurer des règles iptables, nftables et pfSense

snippetintermediate 2025-05-10 4 min read
firewalliptablesnftablespfsensesecurityrègles

iptables

Structure des chaînes

Tables filter | nat | mangle | raw
Chanes INPUT | OUTPUT | FORWARD table filter
PREROUTING | POSTROUTING tables nat/mangle
Politique par dfaut ACCEPT ou DROP
Ordre les rgles sont values de haut en bas premire correspondance gagne

Règles de base

bash
Variables
{{SERVER_IP}}
# Voir les règles actuelles
iptables -L -n -v
iptables -L -n -v --line-numbers # avec numéros de ligne
# Politique par défaut — DROP tout, autoriser explicitement
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Autoriser loopback
iptables -A INPUT -i lo -j ACCEPT
# Autoriser les connexions établies / liées
iptables -A INPUT -m state --state ESTABLISHEDRELATED -j ACCEPT
# SSH depuis une IP spécifique
iptables -A INPUT -p tcp -s {{SERVER_IP}} --dport 22 -j ACCEPT
# HTTP / HTTPS public
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Log les refus
iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4
iptables -A INPUT -j DROP

Gestion des règles

bash
# Insérer à une position spécifique
iptables -I INPUT 3 -p tcp --dport 8080 -j ACCEPT
# Supprimer une règle (par numéro)
iptables -D INPUT 3
# Supprimer une règle (par contenu)
iptables -D INPUT -p tcp --dport 8080 -j ACCEPT
# Vider toutes les règles
iptables -F
iptables -X # supprimer les chaînes personnalisées
# Sauvegarder / restaurer
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

NAT

bash
Variables
{{INTERFACE}}
{{SERVER_IP}}
# SNAT — masquerading (IP dynamique)
iptables -t nat -A POSTROUTING -o {{INTERFACE}} -j MASQUERADE
# SNAT — IP statique
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source {{SERVER_IP}}
# DNAT — redirection de port (port forwarding)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 19216811080
# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward
# Persistant :
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

nftables (remplace iptables)

bash
# Voir la config actuelle
nft list ruleset
# Config de base
nft add table inet filter
nft add chain inet filter input type filter hook input priority 0 ; policy drop ;
nft add chain inet filter forward type filter hook forward priority 0 ; policy drop ;
nft add chain inet filter output type filter hook output priority 0 ; policy accept ;
# Règles
nft add rule inet filter input iif lo accept
nft add rule inet filter input ct state establishedrelated accept
nft add rule inet filter input tcp dport 22 accept
nft add rule inet filter input tcp dport 80 443 accept
nft add rule inet filter input icmp type echo-request accept
nft add rule inet filter input log prefix "nft-drop: "
bash
# Fichier de config /etc/nftables.conf
flush ruleset
table inet filter
chain input
type filter hook input priority 0; policy drop;
iif lo accept
ct state establishedrelated accept
tcp dport 22 accept
tcp dport 80 443 accept
icmp type echo-request accept
log prefix "nft-drop: "
chain forward
type filter hook forward priority 0; policy drop;
chain output
type filter hook output priority 0; policy accept;
# Appliquer
nft -f /etc/nftables.conf
systemctl enable nftables

UFW (Ubuntu / Debian)

bash
Variables
{{SERVER_IP}}
# Activer UFW
ufw enable
ufw status verbose
# Politique par défaut
ufw default deny incoming
ufw default allow outgoing
# Règles
ufw allow 22/tcp
ufw allow from {{SERVER_IP}} to any port 22
ufw allow 80/tcp
ufw allow 443/tcp
ufw deny from 1921681100
# Supprimer une règle
ufw delete allow 80/tcp
ufw delete 3 # par numéro (ufw status numbered)
# App profiles
ufw allow 'Nginx Full'
ufw app list

pfSense — bonnes pratiques

Structure des rgles pfSense
Rgles par interface LAN WAN DMZ
Ordre dvaluation de haut en bas
Rgle "block" implicite en bas de chaque interface
Zones recommandes
WAN Internet tout bloquer par dfaut
LAN Rseau interne autoriser sortant bloquer inter-VLAN)
DMZ Serveurs exposs autoriser ports publis seulement
MGMT Administration trs restrictif MFA
USERS Postes utilisateurs filtrage DNS web
bash
# Règles type DMZ
# DMZ → WAN : autoriser HTTP/HTTPS sortant
# WAN → DMZ : autoriser 80, 443 entrant vers les serveurs
# DMZ → LAN : BLOQUER (isolation DMZ)
# LAN → DMZ : autoriser les ports de gestion nécessaires uniquement
💡 Tip —

Toujours appliquer le principe du moindre privilège : tout bloquer par défaut, n'autoriser que ce qui est explicitement nécessaire. Documenter chaque règle avec une description (source, destination, port, raison).

OPS·BRAIN v1.027 notes · Networklocal