5.4. Mise en place d'un pare-feu

But du pare-feu: bloquer toute connexion au serveur sur les ports autre que 21 (ftp), 22 (ssh) et 80/443 (http).

Nous utiliserons netfilter/iptables comme pare-feu:


   machine:~# apt-get install iptables
  

Voici les règles du pare-feu à placer dans un fichier nommé firewall-start (par exemple). Nous le copierons dans le dossier /etc/network/if-pre-up.d/ afin qu'il soit activé à chaque démarrage de l'interface réseau.


  #!/bin/sh
  # Configuration du pare-feu

  modprobe ip_conntrack_ftp

  # Configuration:
  # Indiquez l'adresse IP de votre serveur ici:
  IPADDRESS=adresse_ip_de_votre_serveur

  #
  # Parametrage au niveau du noyau
  #

  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  echo 1 > /proc/sys/net/ipv4/tcp_syncookies #this violate a RFC!
  echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
  echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
 
  #
  # Vider les regles de filtrage 
  #

  iptables -F

  # 
  # Politique par defaut
  #

  # bloquer les paquets entrants
  iptables -P INPUT DROP

  # accepter les paquets sortants
  iptables -P OUTPUT ACCEPT

  # bloquer les transferts 
  iptables -P FORWARD DROP

  # 
  # Filtres de base
  #

  # accepter le trafic sur l'interface loopback 
  iptables -A INPUT -i lo -j ACCEPT

  # bloquer le spoofing de l'adresse loopback
  iptables -A INPUT -s 127.0.0.0/8 -j DROP
  iptables -A INPUT -d 127.0.0.0/8 -j DROP

  # bloquer les tentatives de spoofing de l'adresse IP locale 
  iptables -A INPUT -s $IPADDRESS -j DROP

  # s'assurer que les connexions TCP commencent avec des paquets syn 
  iptables -A INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP

  # protection contre le ping flood 
  iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT 
  iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

  # accepter les autres requetes icmp
  iptables -A INPUT -p icmp -j ACCEPT

  # accepter les connexions pre-etablies
  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

  #
  # connexions aux serveurs
  #

  # accepter les connexions ssh 
  iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  # accepter les connexions web
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  iptables -A INPUT -p tcp --dport 443 -j ACCEPT

  # accepter les connexions ftp 
  iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  

Et maintenant le fichier firewall-stop pour arrêter le pare-feu, à placer dans le dossier /etc/network/if-post-down.d/


  #!/bin/sh
  # Configuration sans pare-feu

  echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
  echo 0 > /proc/sys/net/ipv4/tcp_syncookies
  echo 1 > /proc/sys/net/ipv4/conf/all/accept_redirects
  echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects

  # Vider les regles de filtrage
  iptables -F

  # Politique par defaut: tout accepter
  iptables -P INPUT ACCEPT
  iptables -P OUTPUT ACCEPT
  iptables -P FORWARD ACCEPT
  

Assurez-vous que ces scripts soient exécutable:


   machine:~# chmod 755 /etc/network/if-pre-up.d/firewall-start
   machine:~# chmod 755 /etc/network/if-post-down.d/firewall-stop
  

Cette configuration vous permez également d'arrêter et de redémarrer le pare-feu manuellement avec les commandes suivantes:


   machine:~# sh /etc/network/if-post-down.d/firewall-stop
   machine:~# sh /etc/network/if-pre-up.d/firewall-start