Skip to Content

Mise en place d’une passerelle sous Debian avec iptables

But de ce document

Ce document me sert de mémo pour installer une passerelle avec iptables sous Debian.

Ce document n’expliquera pas le fonctionnement d’iptable mais uniquement la mise en place des scripts et la configuration d’un firewall minimaliste.

Script pour désactiver le firewall

Ce script que nous pouvons nommer et placer dans « /etc/firewall-stop » permettra de désactiver le firewall :

#!/bin/sh

# Nous vidons les chaînes :
iptables -F
# Nous supprimons d'éventuelles chaînes personnelles :
iptables -X

# Nous les faisons pointer par défaut sur ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# Cette ligne permet de supprimer toutes les redirections de ports
iptables -t nat -F

Attention  : Nous verrons au chapitre « Utilisation des dossiers « if-pre-up » et « if-post-down », qu’il ne faut pas utiliser de caractères spéciaux, d’espaces et de points dans le nom de ce fichier. Il est important également de ne pas oublier la première ligne « # !/bin/sh »

Script pour activer le firewall

Ce script que nous pouvons nommer et placer dans « /etc/firewall-start » permettra de démarrer le firewall :

#!/bin/sh

# REMISE à ZERO des règles de filtrage
iptables -F
iptables -t nat -F

# Mise en place des régles par défaut
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# On enlève le firewall sur le loopback et le reseau local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  

# Ouverture de ports
# Exemple pour un port TCP (ici 80)
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Exemple pour un port UDP (ici 110)
# iptables -A INPUT -p udp --dport 110 -j ACCEPT
# Exemple d'un ensemble de ports (de 2072 a 2080 inclus)
# iptables -A INPUT -p tcp --dport 2072:2080 -j ACCEPT

# J'accepte le protocole ICMP (i.e. le "ping")
iptables -A INPUT -p icmp -j ACCEPT

# J'accepte le protocole IGMP (pour le multicast)
iptables -A INPUT -p igmp -j ACCEPT

# J'accepte les packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Décommentez les deux lignes suivantes pour que le serveur FTP éventuel
# soit joignable de l'extérieur
#iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# Décommentez la ligne suivante pour que le serveur SSH éventuel
# soit joignable de l'extérieur
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# A placer en FIN DU FICHIER
iptables -A INPUT -j DROP

Arrêt et démarrage manuel du firewall

Avant de lancer les scripts, il faut les rendre exécutables :

# chmod +x /etc/firewall-start
# chmod +x /etc/firewall-stop

Ensuite, il est possible de lancer manuellement le firewall et de vérifier le résultat :

# /etc/firewall-start
# iptables -L -v

Il est possible également de l’arrêter manuellement et de vérifier le résultat :

# /etc/firewall-stop
# iptables -L -v

Nous allons voir dans les chapitres suivants deux méthodes pour activer ou désactiver automatiquement le firewall.

Lancement automatique du firewall au démarrage de l’ordinateur

Pour activer le firewall automatiquement au démarrage de l’ordinateur, il faut créer le script « /etc/init.d/firewall » contenant les lignes suivantes :

#!/bin/sh
stop() {
/etc/firewall-stop
}

case $1 in
"start")
/etc/firewall-start
;;
"stop")
stop
;;
"restart")
stop
/etc/firewall-start
;;
esac

Rendre ce script exécutable avec la commande :

# chmod +x /etc/init.d/firewall

Créer les liens permettant de démarrer automatiquement le script au démarrage de l’ordinateur :

# update-rc.d firewall defaults

La commande suivante permet d’arrêter le firewall :

# /etc/init.d/firewall stop

La commande suivante permet de vérifier que les règles sont biens effacées :

# iptables -L -v

La commande suivante permet de démarrer le firewall :

# /etc/init.d/firewall start

La commande suivante permet de vérifier que les règles sont bien mises en place :

# iptables -L -v

Utilisation des dossiers « if-pre-up » et « if-post-down »

Les scripts placés dans le dossier « /etc/network/if-post-down.d » seront lancés automatiquement après chaque arrêt d’une interface réseau.

Les scripts placés dans le dossier « /etc/network/if-pre-up.d » seront lancés automatiquement avant chaque démarrage d’une interface réseau.

Mais pour que les scripts fonctionnement, il faut respecter quelques règles :

  •  Il doivent être exécutables (chmod +x)
  •  Ils doivent Indiquer l’interpréteur de commande sur la première ligne (ex : # !/bin/sh)
  •  Le nom ne doit contenir que des caractères, chiffres, ’_’ et ’-’ (Pas de points)

    Quand le script est exécuté, il peut utiliser plusieurs variables ( :

  •  IFACE : Nom de l’interface physique concernée (eth0, lo,..)
  •  LOGICAL : Nom de l’interface logique
  •  ADDRFAM, METHOD, MODE, PHASE et VERBOSITY

    Le script peut donc utiliser ces variables pour s’adapter en conséquence.

    ATTENTION : En plaçant le script d’arrêt du firewall dans le dossier « if-post-down », celui-ci sera exécuté quelque soit l’interface réseau arrêté. Par exemple si le firewall est destiné à filtrer l’interface eth0, il sera désactivé lorsque l’interface lo sera arrêtée, ce qui peut entraîner une grosse faille de sécurité.

    Pour remédier à ce problème, il faut ajouter au début du script un test pour qu’il s’exécute uniquement pour l’interface concernée

    f [ $IFACE != "eth2" ]; then
    exit
    fi

    Configuration du fichier /etc/network/interfaces »

    Une autre méthode pour arrêter et démarrer un firewall est d’utiliser les directives « pre-up » et « post-down » dans le fichier « /etc/network/interfaces ». Exemple :

    auto eth0
    iface eth0 inet dhcp
     pre-up /etc/firewall-start
     post-down /etc/firewall-stop

    Activation de l’ip forwarding

    Pour autoriser les paquets entrant sur une interface réseau à transiter sur une autre interface réseau, il faut activer l’ip forwarding. Cela peut se faire manuellement avec la commande suivante :

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    Mais dans ce cas, l’ip forwarding sera désactivé au prochain redémarrage de l’ordinateur. Pour l’activer en permanence, sous Debian, il existe au moins trois méthodes.

    La première consiste à ajouter la ligne précédente dans le fichier de lancement du firewall « firewall-start »

    La deuxième méthode consiste à l’activer lors du démarrage d’une interface réseau (ex : lo) en modifiant le fichier « /etc/network/interfaces », ce qui donne :

    iface lo inet loopback
     up echo 1 > /proc/sys/net/ipv4/ip_forward

    La troisième méthode est de mettre « ip_forward=yes » à la place de « ip_forward=no » dans le fichier « /etc/network/options ». Ce qui donne dans mon cas :

    ip_forward=yes
    spoofprotect=yes
    syncookies=no

    Détail configuration Netfilter / Iptables

    Netfilter utilise 3 tables :

  •  filter : C’est la table par défaut (si l’option -t est omise). Elle contient les chaînes prédéfinies INPUT (pour les paquets entrant dans la machine), FORWARD (pour les paquets routés à travers la machine) et OUTPUT (pour les paquets générés localement).
  •  nat : Cette table est consultée lorsqu’on rencontre un paquet qui crée une nouvelle connexion. La table est composée de trois chaînes prédéfinies : PREROUTING (pour modifier les paquets dès qu’ils entrent), OUTPUT (pour modifier les paquets générés localement, avant le routage) et POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir).
  •  mangle : Cette table est employée pour effectuer une modification spéciale des paquets. Jusqu’au noyau 2.4.17, elle offrait deux chaînes prédéfinies : PREROUTING (pour modifier les paquets entrants, avant le routage) et OUTPUT (pour modifier les paquets générés localement, avant le routage). Depuis le noyau 2.4.18, trois autres chaînes prédéfinies sont aussi prises en charge : INPUT (pour les paquets entrants, destinés à la machine elle-même), FORWARD (pour modifier les paquets routés à travers la machine) et POSTROUTING (pour modifier les paquets lorsqu’ils sont sur le point de sortir).
  • Début du script du firewall

    Cette première ligne est importante :

    #!/bin/sh

    Ensuite, il est possible de mettre des commentaires

    # ************************************************
    # ** Script de configuration d'iptables         **
    # ** Créé par Tony Galmiche le 26/06/2006       **
    # ************************************************

    Il est possible et même conseillé de définir des variables :

    inet=eth0
    ilan=eth1
    idmz=eth2

    Les modules

    Selon vos besoins, vous allez avoir besoin de charger les modules suivants (ou d’autres), placez ces lignes au début de votre script de firewall.

    modprobe ip_conntrack_ftp
    modprobe ip_tables
    modprobe ip_nat_ftp
    modprobe ip_nat_irc
    modprobe iptable_filter
    modprobe iptable_mangle
    modprobe iptable_nat

    Par exemple, le module ip_conntrack_ftp vous permettra de faire du FTP passif aussi bien que du FTP actif.

    Effacer les règles existantes

    Les commandes suivantes permettent d’effacer toutes les règles existantes :

    # Supprime les chaînes de la table filter (INPUT, FORWARD et OUTPUT)
    iptables -F
    # Supprime les chaînes personnelles de la table filter
    iptables -X

    # Supprime les chaînes de la table nat (PREROUTING, OUTPUT et POSTROUTING)
    iptables -t nat -F
    # Supprime les chaînes personnelles de la table nat
    iptables -t nat -X

    # Supprime les chaînes de la table mangle
    # -> PREROUTING, OUTPUT, INPUT, FORWARD et POSTROUTING
    iptables -t mangle -F
    # Supprime les chaînes personnelles de la table mangle
    iptables -t mangle -X

    Définir les règles par défaut

    # Définition du comportement par défaut pour les chaines de la table filter
    # -> On bloque les entrées et on autorise tout le reste
    iptables -P INPUT   DROP
    iptables -P OUTPUT  ACCEPT
    iptables -P FORWARD ACCEPT

    Pour accepter tout ce qui ce passe sur l’interface lo

    # Autoriser les paquets pour lo
    iptables -A INPUT  -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    J’ai également vu ces règles, mais je ne suis pas certain de leur utilité :

    iptables -A FORWARD -i lo -j ACCEPT
    iptables -A FORWARD -o lo -j ACCEPT

    Pour accepter tout ce qui ce passe sur le lan

    Première méthode trouvée :

    iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
    iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT

    Deuxième méthode trouvée :

    Accepter les connexions HTTP

    iptables -A INPUT -i eth0 -p tcp --sport www -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    Commentaire  : On veut pouvoir se connecter à notre serveur web de l’extérieur, et naviguer depuis notre serveur. On autorise donc les connexions entrantes nouvelles (NEW), déjà établies (ESTABLISHED) ou en relation (RELATED). Comme HTTP possède un port bien défini (80), il est présent dans la liste des ports de /etc/services : on peut donc l’indiquer comme —sport (port source) ou -dport (port de destination) en indiquant son nom. Il en va de même pour SSH, car il est aussi présent dans /etc/services.

    modprobe ip_conntrack
    iptables -A INPUT -i eth0 --protocol tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 --protocol tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

    Accepter les connexions SSH

    Premier exemple : On accepte en entrée uniquement si une connexion est déjà établie

    iptables -A INPUT -i eth0 -p tcp --sport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    Deuxième exemple : On accepte en entrée et sortie dans tous les cas

    iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport ssh -o eth0 -j ACCEPT

    Accepter les connexions SMTP

    iptables -A OUTPUT -o ppp0 -p tcp --sport 1024: -d smtp.wanadoo.fr --dport 25 -m state --state ! INVALID -j ACCEPT
    iptables -A INPUT -i ppp0 -p tcp -s smtp.wanadoo.fr --sport 25 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT

    Accepter les connexions DNS

    iptables -A OUTPUT -o ppp0 -p udp --sport 1024: --dport 53 -m state --state ! INVALID -j ACCEPT
    iptables -A INPUT -i ppp0 -p udp --sport 53 --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT

    Accepter les connexions FTP

    modprobe ip_conntrack_ftp
    iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

    Pour cette connexion, il faut charger le module "conntrack_ftp".

    On autorise :

  •  la réception de paquets provenant d’une machine extérieure utilisant le protocole tcp sur le port de départ 21 avec une connexion déjà établie.
  •  l’émission de paquets vers une machine extérieure utilisant le protocole tcp sur le port d’arrivé 21 pour une connexion déjà établie ou une nouvelle connexion.
  •  la réception de paquets provenant d’une machine extérieure utilisant le protocole tcp sur le port de départ 20 avec une connexion déjà établie.
  •  l’émission de paquets vers une machine extérieure utilisant le protocole tcp sur le port d’arrivé 20 pour une connexion déjà établie ou provenant d’une autre connexion
  •  la réception de paquets provenant d’une machine extérieure utilisant le protocole tcp sur le port de départ et arrivée entre 1024 et 65535 avec une connexion déjà établie.
  •  l’émission de paquets vers une machine extérieure utilisant le protocole tcp sur le port de départ et arrivée 1024 et 65535 pour une connexion déjà établie ou provenant d’une autre connexion.

    Se protéger des scan de port

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

    Se protéger contre le ping de la mort

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    Autoriser le protocole icmp (ex : ping)

    Autoriser le ping sans restriction :

    iptables -A INPUT -p icmp -j ACCEPT

    Autoriser le ping, mais dans la limite de 2 pings par seconde (— limit 2/s).

    iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT  -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT  -p icmp -m limit --limit 2/s -j ACCEPT

    Le protocole ICMP, même s’il présente quelques dangers, rend tout de même quelques services appréciables, dans le cas d’erreurs de transmission et aussi dans la découverte du MTU. Il se trouve que, pour les messages d’erreur ICMP, l’en-tête du paquet qui a généré l’erreur est reproduite dans le message. Le suivi de connexion ICMP s’en sert pour déclarer ce paquet "RELATED".

    En revanche, pour la passerelle elle-même, si on a activé SMTP et DNS, il peut s’avérer intéressant d’ajouter la ligne :

    iptables -A INPUT -p icmp  -m state --state RELATED -j ACCEPT

    De cette manière, une erreur ICMP passera, mais votre passerelle ne répondra pas aux pings, ni à aucune autre interrogation ICMP.

    Autoriser le protocole IGMP (pour le multicast)

    iptables -A INPUT -p igmp -j ACCEPT

    Autoriser les connexions tcp et udp déjà établies à rentrer

    iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT

    Refuse les connections de la machine 12.13.14.15

    iptables -I INPUT -s 12.13.14.15 -j DROP

    Refuser l’accès web pour tous les utilisateurs sauf root

    iptables -A OUTPUT -o eth0 -p tcp --dport http -j REJECT --reject-with tcp-reset
    iptables -I OUTPUT -o eth0 -p tcp --dport http -m owner --uid-owner root -j ACCEPT

    Activer le masquerading (translation d’adresses)

    Le masquerading permet aux ordinateurs d’un réseau de se connecter à internet en utilisant l’adresse publique du routeur Internet.

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    Nous pourrions restreindre le masquerading à une plage d’IPs du réseau local :

    iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE

    La même règle écrite différemment pour le masque de sous-réseau :

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE

    Ou même à une liste d’IP bien définie :

    iptables -t nat -A POSTROUTING -s 192.168.0.10 -o ppp0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.0.11 -o ppp0 -j MASQUERADE

    Transférer des ports sur la passerelle

    Dans certain cas, il peut-être intéressant de rediriger un port particulier sur un autre port. Par exemple, la commande suivante permet de rediriger les requêtes envoyées sur le port 1000 vers le port 2000 :

    iptables -t nat -I PREROUTING -p tcp --dport 1000 -j REDIRECT --to-ports 2000

    Pour information, la commande suivante permet d’avoir la liste des ports redirigés :

    # iptables -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination
    REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:1000 redir ports 2000

    Transférer des ports sur d’autres serveurs (NAT)

    Vous n’avez qu’une seule adresse IP et deux serveurs doivent être accessibles : le serveur web et la passerelle Internet. La translation d’adresses va venir à votre rescousse, on va re-diriger les ports concernés vers les bonnes destinations.

    iptables -t nat -A PREROUTING -j DNAT -i eth0 -p TCP --dport smtp --to-destination 192.168.1.1
    iptables -t nat -A PREROUTING -j DNAT -i eth0 -p TCP --dport http --to-destination 192.168.1.2

    Si vous souhaitez que tous les surfeurs passent par votre cache Internet et que tous les mails circulent via la passerelle de messagerie, ce n’est pas un problème. Il n’y aura même pas à configurer les clients. Cela est particulièrement utilisé pour des entreprises ayant un antivirus sur le relais de messagerie.

    iptables -t nat -A PREROUTING -j DNAT -i eth2 -p TCP --dport http --to-destination 192.168.1.3:3128
    iptables -t nat -A PREROUTING -j DNAT -i eth2 -p TCP --dport smtp --to-destination 192.168.1.1

    Optimisation de la taille des paquets

    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o eth0 --clamp-mss-to-pmtu

    Liste succincte des adresses de ports :

    Pour plus d’informations, voir /etc/services

    port service
    20 ftp
    21 ftp
    22 ssh
    25 smtp
    80 http
    110 pop3
    143 imap
    220 imap3
    443 https
    2401 cvs
    6667 irc

    Gestion des logs du firewall

    Les commandes suivantes permettent d’activer les logs :

    # ATTENTION : Désactiver cette ligne pour ne pas saturer syslog
    # --log-level, permet de forcer le niveaux des logs
    #iptables -t filter -A INPUT -j LOG --log-prefix "[FW] " --log-level=0
    #iptables -t filter -A INPUT -j LOG --log-prefix "[FW] "

    # Log uniquement si INPUT vient du réseau local
    #iptables -t filter -A INPUT -i $iLAN -j LOG --log-prefix "[FW] "

    # Log uniquement si INPUT vient de l'adresse IP 192.168.0.2
    #iptables -t filter -A INPUT -s 192.168.0.2 -j LOG --log-prefix "[FW] "
    #iptables -t filter -A INPUT -s 192.0.0.13  -j LOG --log-prefix "[FW] "

    La commande suivante permet de ne pas afficher les logs du noyau dans la console (fonctionnement par défaut) :

    # Ne pas afficher les logs dans la console
    # Le premier chiffre correspond au niveau des logs à afficher
    # Je ne connais pas l'utilité des 3 autres chiffres, donc je n'y touche pas
    # 0 -> Aucun log
    # 7 -> Valeur par défaut
    # 8 -> Tous les logs (Debug)
    echo "0 4 1 7" > /proc/sys/kernel/printk

    Pour info, voici la signification des niveaux de logs :

    Niveau Niveau Description
    EMERG 0 le système est inutilisable
    ALERT 1 une action doit être entreprise immédiatement
    CRIT 2 conditions critiques
    ERR 3 conditions d’erreurs
    WARNING 4 conditions d’avertissements
    NOTICE 5 normal, mais conditions significatives
    INFO 6 informatif
    DEBUG 7 messages de niveau déboguage

    Pour avoir un fichier spécial de log pour le firewall, il faut ajouter la ligne suivante dans le fichier « /etc/syslog.conf » :

    kern.warning /var/log/firewall.log

    Stocker les logs dans MySQL avec Ulog

    Je n’ai pas testé, mais j’ai noté quelques liens intéressants sur le sujet :

  •  http://ftp.traduc.org/doc-vf/gazette-linux/html/2005/121/lg121-A.html
  •  http://iptables-tutorial.frozentux.net/fr/x4032.html
  •  http://www.regit.org/article.php3 ?id_article=20
  •  http://www.inl.fr/Nulog,35.html

    Test du firewall avec Nmap

    Nmap sans option permet déjà d’afficher les ports ouverts sur un serveur :

    $ nmap 192.0.0.3

    Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2006-06-28 13:18 CEST
    Interesting ports on ws003.ltsp (192.0.0.3):
    Not shown: 1675 closed ports
    PORT    STATE SERVICE
    22/tcp  open  ssh
    111/tcp open  rpcbind
    113/tcp open  auth
    984/tcp open  unknown

    L’option -A permet d’afficher le nom et la version des logiciels utilisés et l’option -T4 permet d’accélérer le rendu du résultat :

    $ nmap -A -T4 192.0.0.3

    Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2006-06-28 13:20 CEST
    Interesting ports on ws003.ltsp (192.0.0.3):
    Not shown: 1675 closed ports
    PORT    STATE SERVICE VERSION
    22/tcp  open  ssh     OpenSSH 3.8.1p1 Debian-8.sarge.4 (protocol 2.0)
    111/tcp open  rpcbind  2 (rpc #100000)
    113/tcp open  ident   OpenBSD identd
    984/tcp open  status   1 (rpc #100024)
    Service Info: OS: OpenBSD

    L’option -O permet de détecter le système d’exploitation :

    # nmap -O 192.0.0.3
    ...
    MAC Address: 00:A0:CC:66:87:35 (Lite-on Communications)
    Device type: general purpose
    Running: Linux 2.4.X|2.5.X|2.6.X
    OS details: Linux 2.4.7 - 2.6.11
    Uptime 0.135 days (since Wed Jun 28 10:09:41 2006)

    La commande suivante permet de scanner tout un réseau en même temps :

    # nmap 192.0.0.1/24

    L’option -A permet d’avoir un maximum d’informations (scan agressif)

    # nmap -A 192.0.0.3

    Il est possible de spécifier plusieurs postes à analyser en les séparant par une virgule et un espace :

    # nmap 192.0.0.3, 192.0.0.1

    Il est possible d’analyser une série consécutive de postes avec cette syntaxe :

    # nmap 192.168.0.1-9

    Pour plus d’option : man nmap

    Analyses des paquets avec tcpdump

    Le paquet et le programme tcpdump permettent d’analyser les paquets envoyés ou reçus sur une interface réseau. Par exemple, la commande suivante, permet d’analyser tous les paquets qui passent par par l’interface par défaut (eth0) :

    # tcpdump

    Cette commande permet d’analyser uniquement les paquets en provenance de l’adresse 192.168.0.1

    # tcpdump src 192.168.0.1

    Analyser uniquement le port 80 de la source 192.168.0.1

    # tcpdump src 192.168.0.1 and port 80

    La commande suivante avec un maximum de paramètres permet d’afficher les informations en clair pour éventuellement récupérer les mots de passes qui circulent en clair avec une messagerie :

    # tcpdump -x -X -s 0 src host 192.168.0.1 and dst host 212.208.225.1 and port 53 and udp

    La commande suivante permet d’écouter sur l’interface tun0 les paquets en provenance de 10.8.0.1 de type icmp (ping)

    tcpdump -i tun0 src 10.8.0.1 and icmp

    Analyses des paquets avec Ethereal

    Ethereal utilise tcpdump et d’autres logiciels pour analyser d’une manière très évoluée les paquets qui transitent sur un réseau. Il est quasiment capable de reconstituer une page Web complète en assemblant tous les paquets qui transitent sur le réseau.

    Autres sources d’informations

    Page de man d’iptable en français (incontournable) :

  •  http://www.delafond.org/traducmanfr/man/man8/iptables.8.html

    Plusieurs mémos dont je me suis inspiré pour ce document :

  •  http://www.tryxy.net/index.php/Firewall_et_Routeur_avec_Iptables
  •  http://people.via.ecp.fr/ alexis/formation-linux/firewall.html

    Historique des modifications

    Version Date Commentaire
    0.1 27/06/06 Création par Tony GALMICHE
    0.2 15/08/06 Mise en ligne
    0.3 25/09/06 Ajout de compléments concernant les redirections de ports
    0.4 16/02/07 Ajout « Refuser l’accès web pour tous les utilisateurs sauf root »
    0.5 08/04/07 Petite correction suite à remarque sur le forum
  • Commentaires

    Mise en place d’une passerelle sous Debian avec iptables

    merci pour cette aide tutoriale...
    j’ai tout de meme rencontré un problème pour le fichier "firewall-stop" ou l’ordre inversé des "iptables -P..." de OUTPUT et FORWARD, m’a generé un
    "iptables : Bad built-in chain name"

    Mise en place d’une passerelle sous Debian avec iptables

    Merci :-)

    Mise en place d’une passerelle sous Debian avec iptables

    c’est vraiment bien fait tn article, chapeau !!

    Mise en place d’une passerelle sous Debian avec iptables

    Merci, c’est toujours encourageant pour continuer :-)

    Mise en place d’une passerelle sous Debian avec iptables

    Merci bcp pour ton travail !

    Wam

    Article très interressant

    Merci :-)

    Article très interressant

    Merci pour cet article très clair

    Davy

    > Mise en place d’une passerelle sous Debian avec iptables

    Bonjour Patrice,

    Merci pour la relecture. Concernant Ulog, je veux bien des informations complèmentaires.

    A bientôt. Tony

    > Mise en place d’une passerelle sous Debian avec iptables

    Bonsoir Tony,

    Bonne synthèse sur le sujet. Cette synthèse reste en effet difficile compte-tenu de la multitude d’articles qui se contredisent.

    Qui plus est, je regarderait sur le parefeu de mon job si quelque chose peut être ajouté. A propos de Ulog, la société INL a mis en place le parefeu authentifiant dans mon établissement et je pourrai te donner des informations complémentaires si tu es intéressé.

    A savoir, l’auteur de regit.org est un des cofondateurs de NUFW (INL).

    A bientôt.
     ;)

    Patrice.

    > Mise en place d’une passerelle sous Debian avec iptables

    ok ;)

    je n’avais pas lu cette partie, c’est pour cela ;)

    Concernant la "perspicacité" c’est me focalisant sur "mais pourquoi pas de . ?" que j’ai vu que tu en avais mis dans le script.