Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
debian:iptables [2016/05/03 00:17] – modification externe 127.0.0.1 | debian:iptables [2022/11/08 16:43] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Firewall IpTables ====== | ||
+ | |||
+ | **Configuration** | ||
+ | |||
+ | Exemple de configuration d' | ||
+ | Créer le dossier **/ | ||
+ | servant à la configuration du firewall, et un fichier flush_iptables.sh , servant à vider les règles (flush).\\ | ||
+ | |||
+ | Exemple de fichier init_iptables.sh (commenter les règles inutiles): \\ | ||
+ | |||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | # IP réservées | ||
+ | RESERVED_NET=" | ||
+ | 23.0.0.0/8 27.0.0.0/8 31.0.0.0/8 36.0.0.0/8 37.0.0.0/8 39.0.0.0/8 41.0.0.0/8 42.0.0.0/8 58.0.0.0/8 59.0.0.0/8 | ||
+ | 60.0.0.0/8 70.0.0.0/8 71.0.0.0/8 72.0.0.0/8 73.0.0.0/8 74.0.0.0/8 75.0.0.0/8 76.0.0.0/8 77.0.0.0/8 78.0.0.0/8 | ||
+ | 79.0.0.0/8 83.0.0.0/8 84.0.0.0/8 85.0.0.0/8 86.0.0.0/8 87.0.0.0/8 88.0.0.0/8 89.0.0.0/8 90.0.0.0/8 91.0.0.0/8 | ||
+ | 92.0.0.0/8 93.0.0.0/8 94.0.0.0/8 95.0.0.0/8 96.0.0.0/8 97.0.0.0/8 98.0.0.0/8 99.0.0.0/8 100.0.0.0/8 101.0.0.0/8 | ||
+ | 102.0.0.0/8 103.0.0.0/8 104.0.0.0/8 105.0.0.0/8 106.0.0.0/8 107.0.0.0/8 108.0.0.0/8 109.0.0.0/8 110.0.0.0/8 | ||
+ | 111.0.0.0/8 112.0.0.0/8 113.0.0.0/8 114.0.0.0/8 115.0.0.0/8 116.0.0.0/8 117.0.0.0/8 118.0.0.0/8 119.0.0.0/8 | ||
+ | 120.0.0.0/8 121.0.0.0/8 122.0.0.0/8 123.0.0.0/8 124.0.0.0/8 125.0.0.0/8 126.0.0.0/8 197.0.0.0/8 222.0.0.0/8 | ||
+ | 223.0.0.0/8 224.0.0.0/8 225.0.0.0/8 226.0.0.0/8 227.0.0.0/8 228.0.0.0/8 229.0.0.0/8 230.0.0.0/8 231.0.0.0/8 | ||
+ | 232.0.0.0/8 233.0.0.0/8 234.0.0.0/8 235.0.0.0/8 236.0.0.0/8 237.0.0.0/8 238.0.0.0/8 239.0.0.0/8 240.0.0.0/8 | ||
+ | 241.0.0.0/8 242.0.0.0/8 243.0.0.0/8 244.0.0.0/8 245.0.0.0/8 246.0.0.0/8 247.0.0.0/8 248.0.0.0/8 249.0.0.0/8 | ||
+ | 250.0.0.0/8 251.0.0.0/8 252.0.0.0/8 253.0.0.0/8 254.0.0.0/8 255.0.0.0/8 169.254.0.0/ | ||
+ | 174.0.0.0/8 175.0.0.0/8 176.0.0.0/8 177.0.0.0/8 178.0.0.0/8 179.0.0.0/8 180.0.0.0/8 181.0.0.0/8 182.0.0.0/8 | ||
+ | 183.0.0.0/8 184.0.0.0/8 185.0.0.0/8 186.0.0.0/8 187.0.0.0/8 189.0.0.0/8 190.0.0.0/ | ||
+ | echo " | ||
+ | #### Initialisation | ||
+ | # Ignore les ping envoyés par broadcasts ou multicasts | ||
+ | echo 1 > / | ||
+ | # Interdit toute connexion entrante ou sortante | ||
+ | iptables -P INPUT DROP | ||
+ | iptables -P FORWARD DROP | ||
+ | iptables -P OUTPUT DROP | ||
+ | echo "- Interdire toute connexion entrante ou sortante : [OK]" | ||
+ | # Vide toutes les règles et tables | ||
+ | iptables -F | ||
+ | iptables -X | ||
+ | iptables -Z | ||
+ | iptables -t nat -F | ||
+ | iptables -t nat -Z | ||
+ | iptables -t nat -X | ||
+ | iptables -t mangle -Z | ||
+ | iptables -t mangle -F | ||
+ | iptables -t mangle -X | ||
+ | echo "- Vider toutes les règles et tables : [OK]" | ||
+ | # Création de nouvelles chaines pour loguer et droper | ||
+ | iptables -N LOG_DROP_INPUT | ||
+ | iptables -A LOG_DROP_INPUT -j LOG --log-prefix ' | ||
+ | iptables -A LOG_DROP_INPUT -j DROP | ||
+ | iptables -N LOG_DROP_FORWARD | ||
+ | iptables -A LOG_DROP_FORWARD -j LOG --log-prefix ' | ||
+ | iptables -A LOG_DROP_FORWARD -j DROP | ||
+ | iptables -N LOG_DROP_OUTPUT | ||
+ | iptables -A LOG_DROP_OUTPUT -j LOG --log-prefix ' | ||
+ | iptables -A LOG_DROP_OUTPUT -j DROP | ||
+ | |||
+ | # Rejette les fausses connexions prétendues s' | ||
+ | iptables -A INPUT -p tcp ! --syn -m state --state NEW,INVALID -j REJECT | ||
+ | echo "- Rejeter les connexions sans bit SYN : [OK]" | ||
+ | # Ne casse pas les connexions établies | ||
+ | iptables -A INPUT -m state --state RELATED, | ||
+ | iptables -A OUTPUT -m state --state RELATED, | ||
+ | echo "- Ne pas casser les connexions établies : [OK]" | ||
+ | ##### Règles d' | ||
+ | # Autorise loopback | ||
+ | iptables -A INPUT -i lo -j ACCEPT | ||
+ | iptables -A OUTPUT -o lo -j ACCEPT | ||
+ | echo "- Autoriser loopback : [OK]" | ||
+ | # SSH | ||
+ | iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/hour -j ACCEPT | ||
+ | echo "- Autoriser 5 connexions/ | ||
+ | iptables -A INPUT -p tcp --dport 32 -j ACCEPT | ||
+ | echo "- Autoriser SSH entrant : [OK]" | ||
+ | # Ping | ||
+ | iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT | ||
+ | iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT | ||
+ | echo "- Autoriser PING entrant/ | ||
+ | # NTP | ||
+ | iptables -A OUTPUT -p udp --dport 123 -j ACCEPT | ||
+ | echo "- Autoriser NTP sortant : [OK]" | ||
+ | # DNS | ||
+ | iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT | ||
+ | iptables -A OUTPUT -p udp --dport 53 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 53 -j ACCEPT | ||
+ | iptables -A INPUT -p udp --dport 53 -j ACCEPT | ||
+ | echo "- Autoriser DNS entrant/ | ||
+ | # HTTP | ||
+ | iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | ||
+ | echo "- Autoriser HTTP entrant/ | ||
+ | # HTTPS | ||
+ | iptables -A INPUT -p tcp --dport 443 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 8443 -j ACCEPT | ||
+ | echo "- Autoriser HTTPS entrant : [OK]" | ||
+ | # FTP | ||
+ | modprobe ip_conntrack_ftp | ||
+ | iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 20 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 21 -j ACCEPT | ||
+ | iptables -A INPUT -m state --state ESTABLISHED, | ||
+ | echo "- Autoriser FTP entrant/ | ||
+ | |||
+ | iptables -A INPUT -p tcp --dport 25 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 110 -j ACCEPT | ||
+ | iptables -A INPUT -p tcp --dport 143 -j ACCEPT | ||
+ | iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT | ||
+ | iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT | ||
+ | iptables -A OUTPUT -p tcp --dport 143 -j ACCEPT | ||
+ | echo "- Autoriser SMTP/ | ||
+ | |||
+ | # Webmin | ||
+ | iptables -A INPUT -p tcp --dport 10000 -j ACCEPT | ||
+ | echo "- Autoriser Webmin entrant : [OK]" | ||
+ | |||
+ | # Munin si le grapheur est en local et monitore des serveurs externes | ||
+ | iptables -A OUTPUT -p tcp --dport 4949 -j ACCEPT | ||
+ | echo "- Autoriser Munin sortant : [OK]" | ||
+ | |||
+ | # Munin si noeud monitoré par un serveur externe (-s xxx.xxx.xxx.xxx est optionnel et permet de limiter l' | ||
+ | #iptables -A INPUT -p tcp --dport 4949 -s xxx.xxx.xxx.xxx -j ACCEPT | ||
+ | #iptables -A OUTPUT -p tcp --dport 4949 -j ACCEPT | ||
+ | #echo "- Autoriser Munin entrant/ | ||
+ | |||
+ | # RTM (monitoring OVH) | ||
+ | iptables -A OUTPUT -p udp --dport 6100:6200 -j ACCEPT | ||
+ | echo "- Autoriser RTM (monitoring OVH) sortant : [OK]" | ||
+ | |||
+ | # Proxy Squid | ||
+ | iptables -A INPUT -p tcp --dport 3128 -j ACCEPT | ||
+ | echo "- Autoriser le proxy entrant : [OK]" | ||
+ | |||
+ | ##### Règles de rejet ###### | ||
+ | |||
+ | # IP réservées (LOURD) | ||
+ | #for net in $RESERVED_NET; | ||
+ | #iptables -A INPUT -i eth0 -s $net -j LOG_DROP | ||
+ | #iptables -A FORWARD -i eth0 -s $net -j LOG_DROP | ||
+ | #done | ||
+ | #echo "- Intertire les IP réservées : [OK]" | ||
+ | ##### Log et rejet ###### | ||
+ | # Toutes les connexions qui n'ont pas passé les règles du firewall seront refusées et loguées | ||
+ | iptables -A FORWARD -j LOG_DROP_FORWARD | ||
+ | iptables -A INPUT -j LOG_DROP_INPUT | ||
+ | iptables -A OUTPUT -j LOG_DROP_OUTPUT | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | Fichier ** flush_iptables.sh** | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | echo -n " | ||
+ | # Remet la police par défaut à ACCEPT | ||
+ | iptables -P INPUT ACCEPT | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | # Remet les polices par défaut pour la table NAT | ||
+ | iptables -t nat -P PREROUTING ACCEPT | ||
+ | iptables -t nat -P POSTROUTING ACCEPT | ||
+ | iptables -t nat -P OUTPUT ACCEPT | ||
+ | |||
+ | # Vide (flush) toutes les règles existantes | ||
+ | iptables -F | ||
+ | iptables -t nat -F | ||
+ | iptables -t mangle -Z | ||
+ | |||
+ | # Efface toutes les chaînes qui ne sont pas à défaut dans la table filter et nat | ||
+ | iptables -X | ||
+ | iptables -t nat -X | ||
+ | iptables -t mangle -X | ||
+ | echo " [OK]" | ||
+ | </ | ||
+ | |||
+ | Créer le fichier de chargement du firewall ** / | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | # Lancement du script de Firewall | ||
+ | # Fonction pour le lancement du firewall | ||
+ | start() { | ||
+ | echo " | ||
+ | / | ||
+ | } | ||
+ | |||
+ | # Fonction pour arrêter le firewall (on flush) | ||
+ | stop() { | ||
+ | echo "Flush des règles IpTables : " | ||
+ | / | ||
+ | } | ||
+ | |||
+ | case $1 in | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | restart) | ||
+ | stop | ||
+ | start | ||
+ | ;; | ||
+ | status) | ||
+ | / | ||
+ | / | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | esac | ||
+ | |||
+ | exit | ||
+ | </ | ||
+ | |||
+ | **Rendre ces 3 fichiers exécutable :** | ||
+ | < | ||
+ | chmod +x / | ||
+ | chmod +x / | ||
+ | chmod +x / | ||
+ | </ | ||
+ | |||
+ | - Ajouter ce script au démarrage : **update-rc.d firewall defaults** | ||
+ | |||
+ | |||
+ | ====== Vérifier la configuration ====== | ||
+ | |||
+ | Pour tester, on peut utiliser **nmap** depuis une machine distante (//sous linux comme sous windows// | ||
+ | |||
+ | - Sous Debian : Installer **nmap** | ||
+ | | ||
+ | < | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | | ||
+ | - Tester : nmap -vv xxx.xxx.xxx.xxx | ||
+ | |||
+ | Les logs sont placés dans le fichier **/ | ||
+ | |||
+ | >> | ||
+ | |||
+ | {{tag> |