firewalliptablesnftables
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 | rawChanes INPUT | OUTPUT | FORWARD table filterPREROUTING | POSTROUTING tables nat/manglePolitique par dfaut ACCEPT ou DROPOrdre les rgles sont values de haut en bas premire correspondance gagne
Règles de base
bash
Variables
{{SERVER_IP}}
# Voir les règles actuellesiptables -L -n -viptables -L -n -v --line-numbers # avec numéros de ligne# Politique par défaut — DROP tout, autoriser explicitementiptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPT# Autoriser loopbackiptables -A INPUT -i lo -j ACCEPT# Autoriser les connexions établies / liéesiptables -A INPUT -m state --state ESTABLISHEDRELATED -j ACCEPT# SSH depuis une IP spécifiqueiptables -A INPUT -p tcp -s {{SERVER_IP}} --dport 22 -j ACCEPT# HTTP / HTTPS publiciptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -A INPUT -p tcp --dport 443 -j ACCEPT# ICMP (ping)iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT# Log les refusiptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4iptables -A INPUT -j DROP
Gestion des règles
bash
# Insérer à une position spécifiqueiptables -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èglesiptables -Fiptables -X # supprimer les chaînes personnalisées# Sauvegarder / restaureriptables-save > /etc/iptables/rules.v4iptables-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 statiqueiptables -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 IPecho 1 > /proc/sys/net/ipv4/ip_forward# Persistant :echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl -p
nftables (remplace iptables)
bash
# Voir la config actuellenft list ruleset# Config de basenft add table inet filternft 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èglesnft add rule inet filter input iif lo acceptnft add rule inet filter input ct state establishedrelated acceptnft add rule inet filter input tcp dport 22 acceptnft add rule inet filter input tcp dport 80 443 acceptnft add rule inet filter input icmp type echo-request acceptnft add rule inet filter input log prefix "nft-drop: "
bash
# Fichier de config /etc/nftables.confflush rulesettable inet filterchain inputtype filter hook input priority 0; policy drop;iif lo acceptct state establishedrelated accepttcp dport 22 accepttcp dport 80 443 accepticmp type echo-request acceptlog prefix "nft-drop: "chain forwardtype filter hook forward priority 0; policy drop;chain outputtype filter hook output priority 0; policy accept;# Appliquernft -f /etc/nftables.confsystemctl enable nftables
UFW (Ubuntu / Debian)
bash
Variables
{{SERVER_IP}}
# Activer UFWufw enableufw status verbose# Politique par défautufw default deny incomingufw default allow outgoing# Règlesufw allow 22/tcpufw allow from {{SERVER_IP}} to any port 22ufw allow 80/tcpufw allow 443/tcpufw deny from 1921681100# Supprimer une règleufw delete allow 80/tcpufw delete 3 # par numéro (ufw status numbered)# App profilesufw allow 'Nginx Full'ufw app list
pfSense — bonnes pratiques
Structure des rgles pfSenseRgles par interface LAN WAN DMZOrdre dvaluation de haut en basRgle "block" implicite en bas de chaque interfaceZones recommandesWAN Internet tout bloquer par dfautLAN Rseau interne autoriser sortant bloquer inter-VLAN)DMZ Serveurs exposs autoriser ports publis seulementMGMT Administration trs restrictif MFAUSERS 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