Annexe A. Firewall de base

Ce fichier est décrit au chapitre 2 (Section 2.4.3, « Filtrage de base »). Il est reproduit ici sans annotations afin de faciliter le copier/coller.

[Attention]Fichier à modifier

Des valeurs nécessitent d'être modifiées pour que ce fichier soit utilisable. Un devra changer au moins les serveurs DNS. Toutes les lignes précédées de « ## » doivent être étudiées afin d'être modifiées le cas échéant.

#
#
*filter
#
# Création et remise à zéro des chaînes
#
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:DROP_ME - [0:0]
:ICMP_IN - [0:0]
:ICMP_OUT - [0:0]
:STATEFUL - [0:0]
:TCP_IN - [0:0]
:TCP_SYNLIMITS - [0:0]
:TCP_INLIMITS - [0:0]
:TCP_OUT - [0:0]
:UDP_IN - [0:0]
:UDP_OUT - [0:0]
#
# ######################################
# INPUT Dispatch
# ######################################
#
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state INVALID -j DROP_ME 
-A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j DROP_ME 
-A INPUT -p tcp -j TCP_IN 
-A INPUT -p udp -j UDP_IN 
-A INPUT -p icmp -j ICMP_IN 
#
# ######################################
# OUTPUT Dispatch
# ######################################
#
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p udp -j UDP_OUT 
-A OUTPUT -p tcp -j TCP_OUT 
-A OUTPUT -p icmp -j ICMP_OUT 
-A OUTPUT -j STATEFUL 
-A OUTPUT -j REJECT 
#
# ######################################
# STATEFUL : accepte les paquets liés à une connexion existante
# ######################################
#
-A STATEFUL -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A STATEFUL -j RETURN
#
# ######################################
# ICMP entrant
# ######################################
#
-A ICMP_IN -j STATEFUL
-A ICMP_IN -p icmp -m icmp --icmp-type 3 -j ACCEPT 
-A ICMP_IN -p icmp -m icmp --icmp-type 11 -j ACCEPT 
-A ICMP_IN -p icmp -m icmp --icmp-type 0 -j ACCEPT 
-A ICMP_IN -p icmp -m icmp --icmp-type 8 -m limit --limit 5/sec -j ACCEPT 
#
# ######################################
# ICMP sortant
# ######################################
#
-A ICMP_OUT -j STATEFUL
-A ICMP_OUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
#
# ######################################
# TCP entrant
# Il faudra ouvrir des ports au fil de l'eau
# lors de la mise en place de 
# services TCP (ssh, apache, ...).
# ######################################
#
-A TCP_IN -j TCP_INLIMITS
-A TCP_IN -j STATEFUL
-A TCP_IN -j TCP_SYNLIMITS
-A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/min -j LOG --log-prefix "TCP_IN:" --log-level 6 
-A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP
# Ajouter les rêgles ici lors de l'installation de services TCP si ces services
# doivent être ouverts
##-A TCP_IN -p tcp --dport 80 -j ACCEPT
##-A TCP_IN -p tcp --dport 443 -j ACCEPT
##-A TCP_IN -p tcp --dport 3306 -j ACCEPT
##-A TCP_IN -p tcp --dport 21 -j ACCEPT
##-A TCP_IN -p tcp --dport 22 -j ACCEPT
#
# ######################################
# TCP sortant
# Cette machine initie des connexions HTTP vers fr.archive.ubuntu.com
# et security.ubuntu.com pour les mises à jour
# ######################################
#
-A TCP_OUT -j STATEFUL
-A TCP_OUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/min -j LOG --log-prefix "TCP_OUT:" --log-level 6 
-A TCP_OUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP
-A TCP_OUT -p tcp -d 194.2.0.36 --dport 80 -j ACCEPT
-A TCP_OUT -p tcp -d 82.211.81.138 --dport 80 -j ACCEPT
-A TCP_OUT -p tcp -d 91.189.88.31 --dport 80 -j ACCEPT
#
# ftp-data to clients
##-A TCP_OUT -p tcp --sport 20 --dport 1024: -j ACCEPT
# 
# ######################################
# Limitation des connexions TCP entrantes
# Les connexions trop nombreuses sont rejetées.
# ######################################
#
# Si la connexion est dans les limites fixées, on retourne d'ou l'on vient
-A TCP_SYNLIMITS -p tcp -m tcp --syn -m limit --limit 1/sec --limit-burst 10 -j RETURN
#
# Sinon, on loggue
#
-A TCP_SYNLIMITS -m limit --limit 1/min -j LOG --log-prefix "TCP_SYNLIMITS:" --log-level 6 
-A TCP_SYNLIMITS -j REJECT
#
# ######################################
# Limitation TCP entrant
# Limitation du traffic TCP entrant
# Le traffic hors limite est droppé.
# ######################################
#
-A TCP_INLIMITS -p tcp --dport 80 -m recent --name HTTP_DOS --set
-A TCP_INLIMITS -p tcp --dport 80 -m recent --name HTTP_DOS --update --hitcount 20 --seconds 1 -j DROP
## On peut aussi utiliser LIMIT
##-A TCP_INLIMITS -p tcp --dport 80 -m limit --limit 10/sec --limit-burst 100 -j RETURN
##-A TCP_INLIMITS -p tcp --dport 80 -j DROP
-A TCP_INLIMITS -j RETURN
#
# ######################################
# UDP entrant
# L'appel à STATEFUL suffit pour accepter les réponses DNS
# Il faudra cependant ouvrir des ports au fil de l'eau lors de la mise en place
# de services UDP (DNS, NTP par exemple).
# ######################################
#
-A UDP_IN -j STATEFUL
# Ajouter les rêgles ici lors de l'installation de services UDP si ces services
# doivent être ouverts
#
# ######################################
# UDP sortant
#  -remplacer SERVEUR_DNS par le serveur DNS et répéter la ligne pour chacun des
#   serveurs (primaire, secondaire, etc...)
#  -remplacer SERVEUR_NTP par l'adresse IP du serveur NTP si ce protocol est 
#   utilisé
# ######################################
#
-A UDP_OUT -p udp -m udp -j STATEFUL
-A UDP_OUT -d 192.168.0.254 -p udp -m udp --dport 53 -j ACCEPT 
## Remplacer SERVEUR_DNS1, SERVEUR_DNS2 et SERVEUR_NTP par les bonnes valeurs
##-A UDP_OUT -d SERVEUR_DNS1 -p udp -m udp --dport 53 -j ACCEPT 
##-A UDP_OUT -d SERVEUR_DNS2 -p udp -m udp --dport 53 -j ACCEPT 
##-A UDP_OUT -d SERVEUR_NTP  -p udp -m udp --dport 123 -j ACCEPT
## Dans le cas surprenant ou le serveur serait en DHCP
## -A UDP_OUT -p udp -m udp --sport 68 --dport 67 -j ACCEPT 
#
# ######################################
# DROP_ME : la chaîne qui jette en laissant des traces dans les logs
# Par défaut, cette chaîne poubellise les paquets en silence
# En changeant la dernière règle par les deux commentées, on notifie la source
# du rejet du paquet, c'est plus conforme à la norme. Après, chacun décide s'il
# vaut mieux se conformer à la norme avec du trafic qui n'a pas lieu d'être...
# --limit permet d'éviter de mettre la machine à genoux en cas de déni
# de service
# ######################################
#
-A DROP_ME -p tcp -m limit --limit 10/min -j LOG --log-prefix "DROP:" --log-level 6 
-A DROP_ME -p udp -m limit --limit 10/min -j LOG --log-prefix "DROP:" --log-level 6
## On pourra utiliser REJECT si l'on souhaite être poli
##-A DROP_ME -p tcp -j REJECT --reject-with tcp-reset 
##-A DROP_ME -p udp -j REJECT --reject-with icmp-port-unreachable 
-A DROP_ME -j DROP 
#
COMMIT
#