User Tools

Site Tools


informatique:linux:netfilter

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:netfilter [2009/09/11 22:09] – Classer les logs iptables dans un seul fichier, sans doublon pteuinformatique:linux:netfilter [2021/03/18 13:16] (current) – [multiport] pteu
Line 1: Line 1:
-{{tag>sécurité firewall iptables}} 
  
-======Netfilter======+======Netfilter / iptables======
  
 Netfilter est le firewall intégré au noyau Linux. Il s'utilise avec la commande ''iptables'' (ex ''ipchains''). Netfilter est le firewall intégré au noyau Linux. Il s'utilise avec la commande ''iptables'' (ex ''ipchains'').
Line 8: Line 7:
 =====Principe===== =====Principe=====
  
-{{http://upload.wikimedia.org/wikipedia/fr/thumb/3/3e/Netfilter_schema.png/411px-Netfilter_schema.png}}+{{ :informatique:linux:netfilter-packet-flow.svg.png?direct |}} 
 + 
 + 
 +=====Les tables===== 
 + 
 +  * FILTER : contient les règles de filtrage 
 +  * NAT : contient les règles de translation d'adresses 
 +  * MANGLE 
 +  * RAW 
 + 
 + 
 +=====Les chaînes (points d'inspection)===== 
 + 
 +  * INPUT : paquets à destination de la machine 
 +  * OUTPUT : paquets envoyés par la machine 
 +  * FORWARD : paquets routés vers d'autres machines 
 +  * PREROUTING : paquets avant la décision de routage 
 +  * POSTROUTING : paquets juste avant de sortir sur la carte réseau
  
  
Line 14: Line 30:
  
   * Standarts   * Standarts
 +<code bash>
 +Option : Description :
 +-A Append (ajoute)
 +-D Delete (efface)
 +-I Insert (insère)
 +-R Replace (remplace)
 +-L List (liste)
 +-F Efface toutes les règles dans la ou les chaînes
 +-Z Remet les compteurs à zéro dans une ou plusieurs chaînes
 +-C Teste ce paquet sur une chaîne
 +-N Crée une chaîne définie par l'utilisateur
 +-X Efface une chaîne définie par l'utilisateur
 +-P Change le comportement d'une chaîne sur une cible
 +-E Change le nom d'une chaîne
 +-p Protocole (tcp, udp, ...)
 +-s Adresse/masque de source (ex: 192.168.0.0/24)
 +-d Adresse/masque de destination
 +-i Interface réseau d'entrée (nom ethernet)
 +-o Interface réseau de sortie (nom ethernet)
 +-j Jump - Saute (cible de règle)
 +-m Correspondance étendue (peut utiliser des extensions)
 +-n Sortie numérique de ports et d'adresses
 +-t Table à manipuler
 +-v Mode bavard
 +-x Vérifications étendues (affiche les valeurs exactes)
 +-f Prends uniquement en compte le second fragment ou ceux d'après
 +-V Version du paquet
 +--line-numbers Affiche les numéros de ligne
 +</code>
  
-  Option : Description : +''-j [ACCEPT | DROP | LOG | REJECT]'' 
-  -A Append (ajoute) +  * ACCEPT : laisse passer le paquet et sort 
-  -D Delete (efface) +  * DROP : jette le paquet et sort 
-  -I Insert (insère) +  * LOG : inscrit le paquet dans un fichier et continue 
-  -R Replace (remplace) +  * REJECT : jette le paquet en prévenant la machine source avec une paquet ICMP Port unreachable par défaut ; cela peut être modifié avec la directive ''--reject-with tcp-reset'' en TCP.
-  -L List (liste) +
-  -F Efface toutes les règles dans la ou les chaînes +
-  -Z Remet les compteurs à zéro dans une ou plusieurs chaînes +
-  -C Teste ce paquet sur une chaîne +
-  -N Crée une chaîne définie par l'utilisateur +
-  -X Efface une chaîne définie par l'utilisateur +
-  -P Change le comportement d'une chaîne sur une cible +
-  -E Change le nom d'une chaîne +
-  -p Protocole (tcp, udp, ...) +
-  -s Adresse/masque de source (ex: 192.168.0.0/24) +
-  -d Adresse/masque de destination +
-  -i Interface réseau d'entrée (nom ethernet) +
-  -o Interface réseau de sortie (nom ethernet) +
-  -j Jump - Saute (cible de règle) +
-  -m Correspondance étendue (peut utiliser des extensions) +
-  -n Sortie numérique de ports et d'adresses +
-  -t Table à manipuler +
-  -v Mode bavard +
-  -x Vérifications étendues (affiche les valeurs exactes) +
-  -f Prends uniquement en compte le second fragment ou ceux d'après +
-  -V Version du paquet +
-  --line-numbers Affiche les numéros de ligne+
  
-  * Liées aux modules+Il est conseillé de faire du DROP sur la patte publique et du REJECT coté LAN utilisateurs pour les prévenir du filtrage.
  
-  --sport port source +''-t filter'' : option par défaut si aucune table n'est spécifiée.
-  --dport port destination +
-  --icmp-type identifie un paquet ICMP (echo-reply echo-request)+
  
 +  * Liées aux modules
 +<code bash>
 +--sport port source
 +--dport port destination
 +--icmp-type identifie un paquet ICMP (echo-reply echo-request)
 +</code>
  
  
 =====Les extensions===== =====Les extensions=====
  
-  Module  Description  Options étendues +<code bash> 
-  mac Vérifie que l'extension correspond pour les paquets entrants sur une adresse mac. --mac-source +Module  Description  Options étendues 
-  state Active l'inspection des états --state (les états sont ESTABLISHED,RELATED, INVALID, NEW) +mac Vérifie que l'extension correspond pour les paquets entrants sur une adresse mac. --mac-source 
-  limit Définit une limite sur le flux --limit, --limit-burst +state Active l'inspection des états --state (les états sont ESTABLISHED,RELATED, INVALID, NEW) 
-  owner Essaie de trouver des correspondances dans le créateur du paquet --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner sessionid +limit Définit une limite sur le flux --limit, --limit-burst 
-  unclean Plusieurs tests de vérification aléatoires du bon état des paquets+owner Essaie de trouver des correspondances dans le créateur du paquet --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner sessionid 
 +unclean Plusieurs tests de vérification aléatoires du bon état des paquets 
 +</code>
  
 +Pour lister les extensions chargées : ''cat /proc/net/ip_tables_matches''
 +====cstate / conntrack====
  
-=====Redirection=====+  * Remplace l'extension state 
 +  * On peut voir l'état des connexions avec : ''cat /proc/net/ip_conntrack'' 
 +  * il existe un outil en CLI qui permet de manipuler les tables de session : **conntrack** 
 +<code bash> 
 +# afficher les connexions SSH ouvertes 
 +conntrack -L -p tcp --dport 22
  
-Exemple de redirection du trafic HTTP vers un serveur mandataire (port 3128) :+# lister les événements de conntrack en temps réel 
 +conntrack -E
  
-  iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to proxyhost:3128 +# supprimer une session ouverte : 
-  iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to proxyhost:3128+conntrack --s 82.134.19.16 -d 192.168.2.1 -p tcp --orig-port-src 22 --orig-port-dst 55098 
 +</code> 
 +   
 +====multiport====
  
 +Permet de spécifier une liste de ports non-contigüs et donc de limiter le nombre de ligne de conf.
 +<code bash>
 +# Ouverture des ports web/HTTPx
 +$IPTABLES -A INPUT -p tcp --match multiport --dports 80,443,8080,8443 -j ACCEPT
 +# ex2: ouverture des ports 80 et 8080 à 8099
 +$IPTABLES -A INPUT -p tcp -m multiport --dports 80,8080-8099 -j ACCEPT
 +</code>
 +
 +
 +=====Redirection (SNAT, MASQUERADE, DNAT)=====
 +
 +Le *NAT est un mécanisme qui permet de modifier à la volée les adresses et/ou numéros de ports sur un routeur, qui conservera l'état des translations dans une table de sessions.
 +
 +Pour les exemples qui suivent, voici un réseau privé (LAN) connecté à internet par une passerelle (ROUTEUR) :
 +<code bash>
 +( INTERNET )----(eth0     ROUTEUR    eth1)----( LAN )
 +                \_1.2.3.4    192.168.0.9_/    192.168.0.0/24
 +                                              \____serveur1 192.168.0.1 /24
 +                                              \____serveur2 192.168.0.2 /24
 +                                              \____PCs clients 192.168.0.*/24
 +</code>
 +
 +**SNAT** : mis en place dans la chaine POSTROUTING, sert à masquer un réseau privé (c'est le cas de toutes les *box internet). Il remplace les IPs sources des paquets sortants.
 +
 +Cela va être utile dans notre exemple pour permettre à tous les équipements d'aller sur internet en remplaçant leurs IPs sources locales (192.168.0.*) par l'IP publique (1.2.3.4) du routeur.
 +<code bash>
 +iptables -t NAT -A POSTROUTING -j SNAT --to-source 1.2.3.4
 +</code>
 +
 +**MASQUERADE** : permet à iptables d'aller chercher seul l'IP de l'interface réseau spécifiée. C'est l'équivalent du SNAT sans avoir besoin de spécifier, en dur, l'IP translatée.
 +
 +<code bash>
 +iptables -t NAT -A POSTROUTING -o eth0 -j MASQUERADE
 +</code>
 +
 +**DNAT** : permet de modifier les IPs destinations, par exemple en partageant une IP publique pour différents services hébergés sur des serveurs adressés en IPs privées. Ça peut être utilisé aussi pour du partage de charge, en faisant du RR sur plusieurs serveurs qui hébergent le même service.
 +
 +Exemple de DNAT avec répartition de charge sur nos 2 serveurs :
 +<code bash>
 +iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT --to-dest 192.168.0.1 --to-dest 192.168.0.2
 +</code>
 +
 +Exemple de redirection du trafic HTTP et HTTPS vers un serveur mandataire (port 3128) :
 +<code bash>
 +iptables -t nat -A PREROUTING -p tcp --dport 80  -j DNAT --to-dest proxyhost:3128
 +iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost:3128
 +</code>
  
 =====Exemples===== =====Exemples=====
Line 86: Line 173:
  
   iptables -I INPUT 1 -p tcp --dport 1165 -j ACCEPT   iptables -I INPUT 1 -p tcp --dport 1165 -j ACCEPT
 +
 +  * supprimer la règle précédente qui est en position #1 : 2 possibilités
 +
 +  iptables -D INPUT 1
 +  iptables -D INPUT -p tcp --dport 1165
  
 On accepte les paquets tcp à destination du port 1165 On accepte les paquets tcp à destination du port 1165
Line 95: Line 187:
 On peut utiliser l'option -v pour un mode plus verbeux (affiche les connexions actives). On peut utiliser l'option -v pour un mode plus verbeux (affiche les connexions actives).
  
 +  * effacer toutes les règles iptables
  
-=====Divers=====+  iptables -F 
 +  iptables -X
  
-====Table de sessions====+  * modifier la politique par défaut d'une chaine (seuls ACCEPT et DROP sont des politiques valides) ; par ex : passer INPUT à DROP
  
-Pour récupérer la table des sessions ouvertes : +  iptables -P INPUT -j DROP
-  cat /proc/net/ip_conntrack+
  
-====conntrack====+  * Créer une chaine personnalisée : permet de limiter les matches et simplifier les règles 
 +<code bash> 
 +#création de la règle 
 +iptables -N RH253 
 +iptables -t RH253 -p tcp -dport 80 
 +#"brachement" sur la table INPUT 
 +iptables -A INPUT -s 192.168.0.0/24 -j RH253 
 +</code>
  
-Conntrack est un logiciel qui permet de récupérer et modifier la table de sessions ouvertes depuis l'espace utilisateur.+  * les règles iptables sont chargées en mémoire, donc perdues lors d'un reboot ; pour sauvegarder les règles : 
 +<code bash> 
 +# sous Redhat 
 +service iptables save 
 +# sous d'autres systèmes (e.gDebian) 
 +iptables-save > /etc/iptables-dump 
 +# NB : pour les recharger ensuite 
 +iptables-restore < /etc/iptables-dump 
 +</code>
  
-Pour supprimer une session : 
-  conntrack -D -s 82.134.19.16 -d 192.168.2.1 -p tcp --orig-port-src 22 --orig-port-dst 55098 
  
-====Classer les logs iptables dans un seul fichier, sans doublon====+=====Exemple de script===== 
 + 
 +<code bash> 
 +#!/bin/bash 
 +
 +# Script iptables - tyr 
 +# Author: pt3u 
 +# 30/10/2008 Complément de flux pour le DHCP 
 +# 17/09/2008 Personnalisation pour application sur tyr 
 +# 22/02/2008 Création d'apres http://doc.ubuntu-fr.org/iptables 
 +
 + 
 + 
 +
 +# Variables 
 +
 +IPTABLES="/sbin/iptables" 
 +INET_IFACE="eth0" 
 +#INET_IFACE="eth1" 
 +#INET_ADDR=$(ifconfig $INET_IFACE | grep "inet adr:" | awk '{print $2}' | sed -e "s/.*://"
 +#INET_BROADCAST=$(ifconfig $INET_IFACE | grep "Bcast:" | awk '{print $3}' | sed -e "s/.*://"
 +INET_BROADCAST="192.168.2.255" 
 +INET_ADDR="192.168.2.28" 
 +LAN="192.168.2.0/24" 
 +ROUTER="192.168.2.254" 
 +VPN="192.168.66.0/24" 
 + 
 +start () { 
 + 
 +echo "### DEBUT chargement Netfilter.." 
 +echo "   avec les variables suivantes: INET_IFACE=$INET_IFACE \ 
 +    INET_ADDR=$INET_ADDR INET_BROADCAST=$INET_BROADCAST \ 
 +    LAN=$LAN ROUTER=$ROUTER VPN=$VPN" 
 + 
 + 
 +
 +# Parametrage du noyau 
 +
 + 
 +echo " Parametrage du noyau.." 
 +# désactivation du forwarding (routage) 
 +echo "0" > /proc/sys/net/ipv4/ip_forward 
 + 
 +# protection anti-spoofing du kernel 
 +echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter 
 + 
 +# refuse les ping 
 +#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all 
 + 
 +# refuse les ICMP broadcastés 
 +echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 
 + 
 +# protection contre les messages d'erreur buggués 
 +echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 
 + 
 +# rejet des redirections ICMP 
 +echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects 
 +echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects 
 +echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects 
 + 
 +# protection contre les synflood (n'enregistre pas les connexions tant qu'il ne recoit pas d'ACK) 
 +echo "1" > /proc/sys/net/ipv4/tcp_syncookies 
 +# nombre max de SYN_WAIT 
 +echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog 
 + 
 +# regles permettant de limiter les DoS (defaut: 60,7200,1,1) 
 +echo "10" > /proc/sys/net/ipv4/tcp_fin_timeout 
 +echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time 
 +echo "0" > /proc/sys/net/ipv4/tcp_window_scaling 
 +echo "0" > /proc/sys/net/ipv4/tcp_sack 
 + 
 +# rejet des paquets source-routés 
 +echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route 
 + 
 +# logger les paquets spoofes (@ source falsifiees ou non routables)                                  
 +echo "1" > /proc/sys/net/ipv4/conf/all/log_martians 
 + 
 +# modification de la durée max des connexions (12h au lieu de 5j) 
 +#echo 43200 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 
 + 
 +# gestion des IPs dynamiques 
 +#echo "1" > /proc/sys/net/ipv4/ip_dynaddr 
 + 
 +
 +# iptables 
 +
 + 
 +# on flush la table filter (-t filter par défaut) 
 +echo " Reinitialisation des tables.." 
 +$IPTABLES -F 
 +$IPTABLES -X 
 + 
 +
 +# Creation des chaines 
 +
 +echo " Creation des chaines.." 
 +$IPTABLES -N bad_tcp_packets 
 +$IPTABLES -N udp_packets 
 +$IPTABLES -N icmp_packets 
 +$IPTABLES -N tcp_packets 
 + 
 + 
 +
 +# Remplissage des chaines 
 +
 + 
 +echo " Remplissage des chaines.." 
 +# bad_tcp_packets (cf iptables how-to et arno's iptables firewall) 
 +#$IPTABLES -A bad_tcp_packets --tcp-flags SYN,ACK SYN,ACK \ 
 +#          -m state --state NEW -j REJECT --reject-with tcp-reset 
 +#  $IPTABLES -A bad_tcp_packets ! --syn -m state --state NEW \ 
 +#            -j LOG --log-level DEBUG --log-prefix "New not syn:" 
 +$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags \ 
 +          ALL SYN,RST,ACK,FIN,URG -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-option 64 -j DROP 
 +$IPTABLES -A bad_tcp_packets -p tcp --tcp-option 128 -j DROP 
 + 
 +#In Microsoft Networks you will be swamped by broadcasts. These lines 
 +#will prevent them from showing up in the logs. 
 +
 +#$IPTABLES -A udp_packets -i $INET_IFACE -p tcp -d $INET_BROADCAST \ 
 +#                                       --destination-port 135:139 -j DROP 
 +#$IPTABLES -A udp_packets -i $INET_IFACE -p tcp -d $INET_ADDR \ 
 +#                                       --destination-port 135:139 -j DROP 
 +$IPTABLES -A udp_packets -p udp --sport 53 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp --dport 53 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp -s 0.0.0.0 --dport 67 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp -s $LAN --dport 67 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp --dport 123 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp -s $LAN --dport 137:139 -j ACCEPT 
 +#20090929 acces openVPN 
 +$IPTABLES -A udp_packets -p udp -s $VPN --dport 137:139 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp --sport 161 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp -s $LAN --dport 161 -j ACCEPT 
 +$IPTABLES -A udp_packets -p udp -s $ROUTER --dport 514 -j ACCEPT 
 + 
 +$IPTABLES -A tcp_packets -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 21 -j ACCEPT 
 +#1 2009-02-06 redirection de port anyWAN:10000 -> tyr:22 sur odin 
 +#1 $IPTABLES -A tcp_packets -p tcp -s $LAN --dport 22 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 22 -j ACCEPT 
 +# $IPTABLES -A tcp_packets -p tcp --dport 25 -j ACCEPT 
 +#$IPTABLES -A tcp_packets -p tcp --dport 53 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 80 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 137:139 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 443 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 445 -j ACCEPT 
 +#20090929 acces openVPN 
 +$IPTABLES -A tcp_packets -p tcp -s $VPN --dport 445 -j ACCEPT 
 +#20101018 test acces swat 
 +#$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 901 -j ACCEPT 
 +#2011.11.16 temp pour MAJ en oneiric 
 +$IPTABLES -A tcp_packets -p tcp --dport 1022 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 2121 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 3129 -j ACCEPT 
 +#2010-12-19 axx munin depuis tyr 
 +#2011-03-05 extension a tout le LAN 
 +$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 4949 -j ACCEPT 
 +#20110220 iperf 
 +$IPTABLES -A tcp_packets -p tcp -s $LAN --dport 5001 -j ACCEPT 
 +#1 2009-02-06 redirection de port anyWAN:10000 -> tyr:22 sur odin 
 +#1 $IPTABLES -A tcp_packets -p tcp --dport 10000 -j ACCEPT 
 +$IPTABLES -A tcp_packets -p tcp --dport 50000:50049 -j ACCEPT 
 + 
 +# on laisse passer tous les ICMP type 11 (delais depasse) pour pouvoir faire du mtr 
 +
 +$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type time-exceeded -j ACCEPT 
 + 
 +$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type echo-request \ 
 +                -m limit --limit 5/second --limit-burst 10 -j ACCEPT 
 +$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type echo-reply -j ACCEPT 
 +$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type destination-unreachable -j ACCEPT 
 + 
 +
 +# Chargement des politiques 
 +
 + 
 +# politiques par defaut (--policy) 
 +echo " Chargement des politiques par defaut.." 
 +$IPTABLES -P INPUT DROP 
 +$IPTABLES -P OUTPUT ACCEPT 
 +$IPTABLES -P FORWARD DROP 
 + 
 +echo " Exceptions.." 
 +# réglages permissifs pour la machine d'admin, au cas ou... 
 +#$IPTABLES -A INPUT -s 192.168.2.23 -j ACCEPT 
 + 
 +# table INPUT (--append ou --insert <position>
 +echo " Table INPUT.." 
 +$IPTABLES -A INPUT -i lo -j ACCEPT 
 + 
 +$IPTABLES -A INPUT -p tcp -j bad_tcp_packets 
 +$IPTABLES -A INPUT -p icmp -j icmp_packets 
 +$IPTABLES -A INPUT -p tcp -j tcp_packets 
 +$IPTABLES -A INPUT -p udp -j udp_packets 
 + 
 +# Enregistrement des paquets qui n'ont pas encore été traités 
 +# remplacemt du log level de WARINING a 4 (la syntaxe a changer..) 
 +$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \ 
 +                                        --log-level 4 --log-prefix "iptables DROP: " 
 + 
 +# table OUTPUT 
 +echo " Table OUTPUT.." 
 +$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets 
 + 
 +# table FORWARD 
 +echo " Table FORWARD.." 
 + 
 + 
 +echo "### FIN chargement Netfilter" 
 +
 + 
 +stop () { 
 + 
 +   echo "0" > /proc/sys/net/ipv4/ip_forward 
 + 
 +   $IPTABLES -F 
 +   $IPTABLES -X 
 +   $IPTABLES -t filter -P INPUT ACCEPT 
 +   $IPTABLES -t filter -P OUTPUT ACCEPT 
 +   $IPTABLES -t filter -P FORWARD ACCEPT 
 + 
 +   $IPTABLES -t nat -F 
 +   $IPTABLES -t nat -X 
 +   $IPTABLES -t nat -P PREROUTING ACCEPT 
 +   $IPTABLES -t nat -P POSTROUTING ACCEPT 
 +   $IPTABLES -t nat -P OUTPUT ACCEPT 
 + 
 +   $IPTABLES -t mangle -F 
 +   $IPTABLES -t mangle -X 
 +   $IPTABLES -t mangle -P PREROUTING ACCEPT 
 +   $IPTABLES -t mangle -P INPUT ACCEPT 
 +   $IPTABLES -t mangle -P FORWARD ACCEPT 
 +   $IPTABLES -t mangle -P OUTPUT ACCEPT 
 +   $IPTABLES -t mangle -P POSTROUTING ACCEPT 
 + 
 +   echo "### Firewall Désactivé" 
 +
 + 
 +case "$1" in 
 +   start) 
 +      start 
 +   ;; 
 +   stop) 
 +      stop 
 +   ;; 
 +   restart) 
 +      stop 
 +      sleep 1 
 +      start 
 +   ;; 
 +   *) 
 +      echo "Usage : $0 start|stop|restart" 
 +   ;; 
 +esac 
 + 
 +exit 0 
 +# end 
 +</code> 
 + 
 + 
 +=====Divers===== 
 + 
 + 
 +====Classer les logs iptables dans un seul fichier====
  
 Pour centraliser les logs iptables dans un seul et unique fichier de configuration il faut procéder en plusieurs étapes : Pour centraliser les logs iptables dans un seul et unique fichier de configuration il faut procéder en plusieurs étapes :
   * dans le script iptables, logger les DROP (ici tout le TCP) avec un préfix reconnaissable, grâce à la directive :   * dans le script iptables, logger les DROP (ici tout le TCP) avec un préfix reconnaissable, grâce à la directive :
 +<code bash>
 +iptables -A INPUT -p tcp -j LOG --log-prefix "iptables DROP: "
 +</code>
 +
 +  * récupérer ces logs avec rsyslog, les mettre dans le fichier /var/log/iptable_all.log et ne plus les traiter ensuite pour qu'ils n'aille pas créer des doublons dans d'autres fichiers de log. Créer un fichier ''/etc/rsyslog.d/49-iptables.conf'' :
 +<code bash>
 +:msg,contains,"iptables DROP: "         -/var/log/iptables/ymir2.log
 +# ne fonctionne pas avec :
 +#:msg,startswith,"iptables DROP: "       -/var/log/iptables/ymir2.log
 +# car les msg commencent par "kernel: ..."
 +& ~   # arrêter de traiter les messages qui ont matché la dernière ligne
 +</code>
 +
 +Sources :
 +  * [[http://blog.shadypixel.com/log-iptables-messages-to-a-separate-file-with-rsyslog/|source]] (entre autres)
 +  * [[http://wiki.rsyslog.com/index.php/Configuration_Samples|wiki rsyslog]]
  
-  iptables -A INPUT -p tcp -j LOG --log-prefix "iptables DROP: " 
  
-  * récupérer ces logs avec rsyslog, les mettre dans le fichier /var/log/iptable_all.log et les supprimer ensuite pour qu'ils n'aille pas "polluer" d'autres fichiers de log. Dans ''/etc/rsyslog.conf'' :+====Rotation des logs====
  
-   :msg,startswith,"iptables DROP      -/var/log/iptables_all.log +Pour archiver les logs d'iptables régulèrementcréer le fichier ''/etc/logrotate.d/iptables'' : 
-   & ~ supprimer les messages qui ont matché la dernière ligne+<code bash> 
 +/var/log/iptables.log { 
 +tourner tous les jours 
 +daily 
 +missingok 
 +notifempty 
 +# compresser les archives 
 +compress 
 +# ne pas archiver l'archive la plus récente 
 +delaycompress 
 +# suffixer par la date 
 +dateext 
 +create 0600 root root 
 +# redémarrer le syslog pour qu'il écrire dans le nouveau fichier après la rotation 
 +postrotate 
 +    #/etc/rc.d/init.d/rsyslog restart ; sleep 5 
 +    # ou 
 +    /usr/lib/rsyslog/rsyslog-rotate 
 +endscript 
 +
 +</code> 
 +=====Liens=====
  
 +  * [[http://www.netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO.txt|Documentation officielle : HOWTO]]
 +  * [[https://help.ubuntu.com/community/IptablesHowTo|Ubuntu's iptables HOWTO]]
informatique/linux/netfilter.1252706972.txt.gz · Last modified: 2013/10/14 20:54 (external edit)