| name | firewall-configurator |
| description | Configuration de firewalls et règles de sécurité réseau pour iptables/nftables, pfSense, Azure NSG, AWS Security Groups et Cisco ACL. Se déclenche avec "firewall", "iptables", "pfSense", "NSG", "Security Group", "règles firewall", "ports. Also triggers on "firewall rules", "iptables config", "security group rules". |
Firewall Configurator
Workflow
1. Inventaire de l'existant
Recenser les règles actives avant toute modification.
iptables -nvL --line-numbers
nft list ruleset
pfctl -sr
az network nic list-effective-nsg --name myNIC --resource-group myRG -o table
aws ec2 describe-security-groups --group-ids sg-xxxxx \
--query 'SecurityGroups[*].{In:IpPermissions,Out:IpPermissionsEgress}'
2. Matrice de flux
Avant d'écrire une règle, remplir ce tableau pour chaque flux :
| Source | Destination | Port/Proto | Sens | Justification |
|---|
| 10.0.1.0/24 | 10.0.2.10 | 443/tcp | IN | API frontend→backend |
| 0.0.0.0/0 | 10.0.5.0/24 | 22/tcp | IN | Accès SSH ops (à restreindre) |
Critère de décision — quelle plateforme ?
- Machine Linux bare-metal/VM →
nftables (iptables en legacy)
- Routeur/appliance BSD →
pfSense / pfctl
- Infra Azure → NSG (attaché subnet ou NIC)
- Infra AWS → Security Group (stateful) + NACL (stateless)
- On-prem Cisco → ACL étendue
3. Rédaction des règles
iptables — politique par défaut DROP + règles minimales
iptables -F && iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.0.0.5/32 -p tcp --dport 22 -m comment --comment "SSH depuis bastion" -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
nftables — équivalent moderne
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
ip saddr 10.0.0.5 tcp dport 22 comment "SSH bastion" accept
tcp dport 443 accept
limit rate 5/second counter log prefix "DROP: " drop
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
Azure NSG via CLI
az network nsg rule create \
--resource-group myRG \
--nsg-name myNSG \
--name Allow-HTTPS-In \
--priority 100 \
--direction Inbound \
--access Allow \
--protocol Tcp \
--destination-port-ranges 443 \
--description "HTTPS public"
az network nsg rule create \
--resource-group myRG --nsg-name myNSG \
--name DenyAll-In --priority 4096 \
--direction Inbound --access Deny \
--protocol '*' --destination-port-ranges '*'
AWS Security Group via CLI
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxx \
--protocol tcp --port 443 --cidr 0.0.0.0/0
aws ec2 revoke-security-group-ingress \
--group-id sg-xxxxx \
--protocol tcp --port 3389 --cidr 0.0.0.0/0
4. Validation avant production
nc -zv 10.0.2.10 443
hping3 -S -p 443 10.0.2.10
curl --connect-timeout 3 http://10.0.2.10:8080 || echo "Bloqué OK"
az network watcher test-connectivity \
--resource-group myRG \
--source-resource myVM \
--dest-address 10.0.2.10 --dest-port 443
5. Déploiement avec rollback prêt
iptables-save > /tmp/iptables_backup_$(date +%Y%m%d_%H%M%S).rules
bash apply_rules.sh
iptables-restore < /tmp/iptables_backup_20260624_143000.rules
Pour les sessions SSH à risque : utiliser at pour un rollback automatique :
echo "iptables-restore < /tmp/backup.rules" | at now + 5 minutes
atrm <job-id>
6. Journalisation et monitoring
iptables -I INPUT -m limit --limit 5/min -j LOG --log-prefix "FW-DROP: " --log-level 4
table inet filter {
chain input {
...
counter log prefix "DROP: " drop
}
}
journalctl -k | grep "FW-DROP" | awk '{print $12}' | sort | uniq -c | sort -rn | head 20
Outils de monitoring recommandés :
- iptraf-ng — trafic réseau temps réel
- fail2ban — ban automatique sur patterns de logs
- Azure Monitor / NSG Flow Logs — activez via Azure Network Watcher
- AWS VPC Flow Logs — activer sur le VPC ou ENI cible
7. Documentation
Chaque règle doit avoir : date, auteur, ticket associé, justification. Versionner avec git.
Garde-fous / Anti-patterns
| Anti-pattern | Risque | Correction |
|---|
| Politique par défaut ACCEPT | Toute règle manquante = ouverture | Toujours policy drop en INPUT/FORWARD |
Règle 0.0.0.0/0 sur port 22 | Exposition SSH au monde | Restreindre au bastion ou VPN |
| Appliquer sans backup | Rollback impossible | iptables-save avant chaque modif |
| Priorités NSG toutes à 100 | Conflits silencieux | Espacer de 100 (100, 200, 300…) |
| Security Group sans description | Audit impossible | Toujours renseigner le champ description |
| Règles temporaires jamais nettoyées | Surface d'attaque croissante | Revue trimestrielle + TTL documenté |
| Ouvrir un range de ports (1000-9000) | Moindre privilège violé | Ouvrir uniquement les ports nécessaires |
| NACL AWS stateless oublié | Réponses bloquées en sortie | Toujours paire IN+OUT sur NACL |
Bonnes pratiques 2026
- Zero-trust perimeter : ne pas faire confiance au trafic est-ouest interne ; appliquer des NSG/SG aussi entre sous-réseaux internes.
- Infrastructure as Code : gérer les règles via Terraform/Bicep, jamais en mode console manuel en prod.
- Tagging obligatoire (cloud) : chaque SG/NSG doit avoir les tags
env, owner, ticket.
- Audit régulier : exécuter un scan de règles inutilisées (
aws ec2 describe-security-groups + script de comparaison avec les flux réels via VPC Flow Logs).
- Séparation SSH/RDP : accès administration uniquement via bastion ou VPN, jamais exposé directement.
- IPv6 : toujours configurer
ip6tables ou les règles NSG IPv6 en parallèle ; une règle IPv4 n'affecte pas IPv6.