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.
![]() | 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 #