Home

Linux

Serveur

Partenaires

Info
Firewalling et Partage de connexion internet

L'idée est d'ajouter à votre ordinateur sous Linux la fonction de serveur NAT, qui va vous permettre de partager votre connexion avec d'autres machines. Votre ordinateur sous Linux aura deux interfaces réseau :

  • une interface connectée à Internet via une connexion modem par exemple : cette interface aura une adresse IP publique (interface eth0 sur les schémas) ;

  • une interface connectée à votre réseau local doté d'un adressage privé : cette interface servira de passerelle pour les ordinateurs du réseau local (interface eth1 sur les schémas) ;

Schéma d'un NAT avec plusieurs machines
schema-nat2.jpg

Avec cette configuration, seul le serveur NAT est directement joignable depuis Internet ; les ordinateurs du réseau local ne sont a priori pas joignables directement depuis Internet... sauf si on fait du port forwarding.
Par exemple, pour que le serveur Web qui tourne sur le port 80 de la machine dont l'adresse IP est 192.168.0.3 soit joignable de l'extérieur via le serveur NAT, il faut forwarder les requêtes TCP arrivant sur le port 80 du serveur NAT vers la machine dont l'IP est 192.168.0.3... et la réponse à la requête sera alors correctement forwardée vers Internet au client qui a initié la requête.

Etablir les règles de firewalling et/ou de partage de connexion
Nous allons mettre en place deux scripts :
  • le script /etc/network/if-pre-up.d/iptables-start.sh qui démarre les règles de filtrage
  • le script /etc/network/if-post-down.d/iptables-stop.sh qui arrête le filtrage

N'oubliez pas de rendre ces deux scripts exécutables :
# chmod 755 /etc/network/if-pre-up.d/iptables-start.sh
# chmod 755 /etc/network/if-post-down.d/iptables-stop.sh

Ces scripts vous permettront de démarrer et d'arrêter le filtrage iptables en les exécutant "à la main" en tant que root. Ils vous permettront également d'automatiser le démarrage du filtrage juste avant de configurer votre interface réseau ; et l'arrêt du filtrage juste après avoir déconfiguré votre interface réseau.

Pour automatiser le démarrage et l'arrêt des règles iptables, modifiez le fichier /etc/network/interfaces en rajoutant deux lignes qui appellent les scripts dans la section qui concerne l'interface de loopback, comme dans l'exemple ci-dessous :

# /etc/network/interfaces

# The loopback interface
auto lo
iface lo inet loopback
        # Démarrage et arrêt automatique des règles "iptables"
        pre-up /etc/network/if-pre-up.d/iptables-start.sh
        post-down /etc/network/if-post-down.d/iptables-stop.sh

auto eth0
iface eth0 inet static
        address 10.0.0.1
        netmask 255.0.0.0

auto eth1
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0


Personnaliser les règles de filtrage
Voici un script qui contient les règles de filtrages : iptables-start.sh
#!/bin/sh
# Script "iptables-start.sh"
# Fichier contenant les règles de filtrage "iptables"
# Formation Debian GNU/Linux par Alexis de Lattre
# http://www.via.ecp.fr/~alexis/formation-linux/

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


# DEBUT des règles de FIREWALLING

# DEBUT des politiques par défaut

# Je veux que les connexions entrantes soient bloquées par défaut
iptables -P INPUT DROP

# Je veux que les connexions destinées à être forwardées
# soient acceptées par défaut
iptables -P FORWARD ACCEPT

# Je veux que les connexions sortantes soient acceptées par défaut
iptables -P OUTPUT ACCEPT

# FIN des politiques par défaut

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

# J'autorise les connexions TCP entrantes sur les ports 20 et 21
# (pour que mon serveur FTP soit joignable de l'extérieur)
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# J'autorise les connexions TCP entrantes sur le port 22
# (pour que mon serveur SSH soit joignable de l'extérieur)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# J'autorise les connexions TCP entrantes sur le port 80
# (pour que mon serveur HTTP soit joignable de l'extérieur)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# J'autorise les connexions TCP et UDP entrantes sur le port 139
# mais uniquement sur l'interface "eth1"
# (pour que mon serveur Samba soit joignable depuis mon LAN seulement)
iptables -A INPUT -p tcp --dport 137:139 -i eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 137:139 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -i eth1 -j ACCEPT

# J'autorise les flux UDP entrants sur le port 1234
# (pour pourvoir reçevoir les flux VideoLAN)
# iptables -A INPUT -p udp --dport 1234 -j ACCEPT

# J'autorise les flux UDP envoyés sur l'adresse multicast 224.2.127.254
# et dont le port destination est 9875 (pour reçevoir les annonces SAP)
# iptables -A INPUT -p udp -d 224.2.127.254 --dport 9875 -j ACCEPT

# J'accepte les "pings"
iptables -A INPUT -p icmp -j ACCEPT

# Pas de filtrage sur l'interface de "loopback"
iptables -A INPUT -i lo -j ACCEPT


# La règle par défaut pour la chaine INPUT devient "REJECT"
# (il n'est pas possible de mettre REJECT comme politique par défaut)
iptables -A INPUT -j REJECT

# FIN des règles de FIREWALLING


# DEBUT des règles pour le PARTAGE DE CONNEXION

# Je veux que mon système fasse office de "serveur NAT"
# (Remplaçez "eth0" par votre interface connectée à Internet)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# FIN des règles pour le PARTAGE DE CONNEXION


# DEBUT des règles de PORT FORWARDING

# Je veux que les requêtes TCP reçues sur le port 80 soient forwardées
# à la machine dont l'IP est 192.168.0.3 sur son port 80
# (la réponse à la requête sera forwardée au client)
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80

# FIN des règles de PORT FORWARDING

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

Et voici un script qui arrête le filtrage iptables : "iptables-stop.sh"
#!/bin/sh
# /etc/network/if-post-down.d/iptables-stop.sh
# Script qui arrête le filtrage "iptables"
# Formation Debian GNU/Linux par Alexis de Lattre
# http://www.via.ecp.fr/~alexis/formation-linux/

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

# REMISE de toutes les politiques par défaut à ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT


On peut vérifier la configuration iptable :
# iptables -v -L


Cette page est tirée de l'excellente formation Linux de Alexis de Lattre http://www.via.ecp.fr/~alexis/formation-linux/.

Voilà, si vous avez des questions contactez moi.

Accueil