Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
debian:iptables [2017/07/21 16:23] erreur32debian: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'iptables : \\
 +Créer le dossier **/etc/firewall** dans lequel on placera un fichier //init_iptables.sh// 
  
 +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): \\
 +
 +
 +<code>
 +#!/bin/bash
 +# IP réservées
 +RESERVED_NET="0.0.0.0/8 1.0.0.0/8 2.0.0.0/8 3.0.0.0/8 4.0.0.0/8 5.0.0.0/8 7.0.0.0/8 10.0.0.0/8 14.0.0.0/8
 +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/16 172.16.0.0/12 173.0.0.0/8
 +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/8"
 +echo "Paramétrage des règles du firewall..."
 +#### Initialisation 
 +# Ignore les ping envoyés par broadcasts ou multicasts
 +echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 +# 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 DROP INPUT] : '
 +iptables -A LOG_DROP_INPUT -j DROP
 +iptables -N LOG_DROP_FORWARD
 +iptables -A LOG_DROP_FORWARD -j LOG --log-prefix '[IPTABLES DROP FORWARD] : '
 +iptables -A LOG_DROP_FORWARD -j DROP
 +iptables -N LOG_DROP_OUTPUT
 +iptables -A LOG_DROP_OUTPUT -j LOG --log-prefix '[IPTABLES DROP OUTPUT] : '
 +iptables -A LOG_DROP_OUTPUT -j DROP
 +
 +# Rejette les fausses connexions prétendues s'initialiser et sans bit SYN
 +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,ESTABLISHED -j ACCEPT
 +iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 +echo "- Ne pas casser les connexions établies : [OK]"
 +##### Règles d'autorisation ######
 +# 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/heure SSH entrant port 22 : [OK]"
 +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/sortant : [OK]"
 +# 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/sortant : [OK]"
 +# HTTP
 +iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
 +iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 +echo "- Autoriser HTTP entrant/sortant  : [OK]"
 +# 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,RELATED -j ACCEPT
 +echo "- Autoriser FTP entrant/sortant : [OK]"
 +# Mail
 +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/POP/IMAP entrant/sortant : [OK]"
 +
 +# 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'accès au serveur qui effectue le monitoring)
 +#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/sortant : [OK]"
 +
 +# 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; do
 +#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 "Terminé." 
 +</code>
 +
 +Fichier **  flush_iptables.sh**    :
 +<code>
 +#!/bin/bash
 +echo -n "Réinitialisation des règles du firewall..."
 +# 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]"
 +</code>
 +
 +Créer le fichier de chargement du firewall **   /etc/init.d/firewall** : 
 +<code>
 +#!/bin/bash
 +# Lancement du script de Firewall
 +# Fonction pour le lancement du firewall
 +start() {
 +  echo "Application des règles IpTables : "
 +  /etc/firewall/init_iptables.sh
 +}
 + 
 +# Fonction pour arrêter le firewall (on flush)
 +stop() {
 +  echo "Flush des règles IpTables : "
 +  /etc/firewall/flush_iptables.sh
 +}
 +
 +case $1 in
 +  start)
 +    start
 +  ;;
 +  stop)
 +    stop
 +  ;;
 +  restart)
 +    stop
 +    start
 +  ;;
 +  status)
 +    /sbin/iptables -L
 +    /sbin/iptables -t nat -L
 +  ;;
 +  *)
 +    echo "Usage: /etc/init.d/firewall {start|stop|restart|status}."
 +esac
 +
 +exit 
 +</code>
 +
 +**Rendre ces 3 fichiers exécutable :**
 +<code>
 +chmod +x /etc/firewall/init_iptables.sh
 +chmod +x /etc/firewall/flush_iptables.sh
 +chmod +x /etc/init.d/firewall 
 +</code>
 +
 +- 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**
 +  
 +<code>
 + apt-get update
 + apt-get install nmap 
 +</code>
 +  
 +- Tester :  nmap -vv xxx.xxx.xxx.xxx  \\
 +
 + Les logs sont placés dans le fichier **/var/log/messages**. 
 + 
 +>>  https://www.kultur-frankreich.de/wiki/doku.php?id=serveur_dedie:iptables 
 + 
 +{{tag>debian iptables ip secu iptables}}