# Installation
apt install ufw
# Activation
ufw enable
# Vérification statut
ufw status
ufw status verbose
ufw status numbered
# Politiques par défaut
ufw default deny incoming
ufw default allow outgoing
# Services communs
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
# Plages de ports
ufw allow 8000:8100/tcp
# Adresses IP spécifiques
ufw allow from 192.168.1.0/24
ufw allow from 10.0.0.0/8 to any port 3306
# Limitation de connexion
ufw limit ssh
# Règles avec interface
ufw allow in on eth0 to any port 80
ufw deny in on eth1
# Règles avec protocole
ufw allow proto tcp from any to any port 80
#!/bin/bash
# ufw_setup.sh
# Reset configuration
ufw --force reset
# Politiques par défaut
ufw default deny incoming
ufw default allow outgoing
# Services essentiels
ufw allow ssh
ufw allow http
ufw allow https
# Règles spécifiques
ufw allow from 192.168.1.0/24 to any port 3306
ufw limit ssh
# Activation
ufw --force enable
# Politiques par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Autoriser loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Autoriser connexions établies
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Services de base
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Protection SYN flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Protection ping flood
iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
# Protection port scanning
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# NAT basique
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Port forwarding
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# Installation dépendances
apt install xtables-addons-common xtables-addons-dkms \
ipset libip6t-dev libiptc-dev pkg-config
# Installation GeoIP
wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind4.dat.gz
gunzip maxmind4.dat.gz
mkdir -p /usr/share/xt_geoip
mv maxmind4.dat /usr/share/xt_geoip/
#!/bin/bash
# setup_geoip.sh
# Création des ensembles IP
ipset create china hash:net
ipset create russia hash:net
# Ajout des plages IP
for ip in $(wget -qO- https://www.ipdeny.com/ipblocks/data/countries/cn.zone); do
ipset add china $ip
done
for ip in $(wget -qO- https://www.ipdeny.com/ipblocks/data/countries/ru.zone); do
ipset add russia $ip
done
# Règles IPTables
iptables -A INPUT -m set --match-set china src -j DROP
iptables -A INPUT -m set --match-set russia src -j DROP
# Bloquer par pays
iptables -A INPUT -m geoip --src-cc CN,RU -j DROP
# Autoriser certains pays
iptables -A INPUT -m geoip --src-cc FR,DE,IT -j ACCEPT
# Combinaison avec ports
iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc CN -j DROP
# Limite connexions par IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
# Limite connexions nouvelles
iptables -A INPUT -p tcp --dport 80 -m recent --name http --update --seconds 60 --hitcount 20 -j DROP
# Protection SYN-flood avancée
iptables -N syn_flood
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn_flood -j DROP
#!/bin/bash
# secure_firewall.sh
# Nettoyage
iptables -F
iptables -X
iptables -Z
# Politiques par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Règles de base
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Protection contre les scans
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Protection DDoS
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 20 -j DROP
# Limitation SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent \
--set --name ssh --rsource
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent \
--update --seconds 60 --hitcount 4 --name ssh --rsource -j DROP
# Services autorisés
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Logging
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
#!/bin/bash
# monitor_firewall.sh
# Surveillance des connexions
watch -n 1 'iptables -nvL | grep -v "0 0"'
# Analyse des logs
tail -f /var/log/syslog | grep "IPTables-Dropped"
# Statistiques
iptables -L INPUT -v -n -x
#!/bin/bash
# firewall_report.sh
echo "=== Rapport Firewall ==="
date
echo -e "\n=== Règles Actives ==="
iptables-save
echo -e "\n=== Connexions Actives ==="
netstat -tan | grep ESTABLISHED
echo -e "\n=== Top 10 IPs Bloquées ==="
grep "IPTables-Dropped" /var/log/syslog | \
awk '{print $12}' | sort | uniq -c | \
sort -rn | head -10
- Politique par défaut restrictive
- Limitation des connexions
- Logging des événements suspects
- Protection contre les attaques courantes
¶ Maintenance
- Sauvegarde régulière des règles
- Test des règles avant production
- Monitoring actif
- Documentation des changements
- Règles spécifiques avant générales
- Limitation des services exposés
- Utilisation de GeoIP si pertinent
- Optimisation des performances