© Tito
Transformer votre linux en routeur pour partager votre connexion internet en toute sécurité
Transformer facilement un linux en routeur : avec 2 cartes réseaux (ou wifi ou autre), une reliée à votre Box et une autre à un petit hub sur lequel seront connectés vos PC
Soit un machine linux avec 2 cartes réseaux ethernet classiques (eth1 reliée à votre box et configurée en DHCP et eth0 configurée en ip statique 192.168.1.1, reliée à un hub local sur lequel seront branchés des PC clients sous windoz ou linux, configurés en 192.168.1.X et qui utiliseront comme passerelle 192.168.1.1 ).
Pour des connexions Wifi il suffit de remplacer ethX par le device correspondant.
1/ Activer l'ip forward (routage de paquet) sur linux :
- modifiez /etc/sysctl.conf :
net.ipv4.ip_forward = 1
- prendre en compte :
sysctl -p
- vérifiez que l'option est bien prise en compte au niveau du noyau :
# cat /proc/sys/net/ipv4/ip_forward
1
2/ Sécuriser la connexion et autoriser le routage avec les iptables :
Le firewall est géré par le service
iptables sur les noyaux récents, si vous avez fait une installation standard votre firewall est déjà configuré (au minimum), en général sur une redhat voici le fichier de config du firewall ainsi créé
/etc/sysconfig/iptables (les règles suivantes concernent uniquement la table "filter" qui est dédiée au filtrage mais pas au routage) :
*filter
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Nous allons donc ajouter des règles pour autoriser certains postes à "sortir" sur internet via notre routeur, en configurant la table NAT qui gère le routage de paquets :
*nat
:PREROUTING DROP [0:0]
#######################################
# autoriser les PC locaux 192.168.1.120 et 133 à sortir par ce PC
# directement et sans resctriction :
-A PREROUTING -i eth0 -s 192.168.1.133/32 -j ACCEPT
-A PREROUTING -i eth0 -s 192.168.1.120/32 -j ACCEPT
#
# ou bien autoriser tous les PC locaux 192.168.1.X à sortir par ce PC
# directement et sans resctriction :
-A PREROUTING -i eth0 -s 192.168.1.0/24 -j ACCEPT
#
# ou bien autoriser tous les PC locaux 192.168.1.X à sortir par ce PC
# directement uniquement pour des requetes DNS (port 53) :
-A PREROUTING -i eth0 -s 192.168.1.0/24 --dport 53 -j ACCEPT
#
# et autoriser tous les PC locaux en 192.168.1.X à utiliser le proxy
# squid de local de ce serveur (port 3128 par défaut pour squid) :
-A PREROUTING -i eth0 -s 192.168.1.0/24 -d 192.168.1.1/32 --dport 3128 -j ACCEPT
:OUTPUT ACCEPT [0:0]
#######################################
:POSTROUTING ACCEPT [0:0]
########################################
# activer le masquerade : cad cacher les adresses ip locales
# pour tout ce qui est routé et qui sort du routeur :
-A POSTROUTING -o eth1 -s 192.168.1.0/24 -d 0/0 -j MASQUERADE
COMMIT
Remarque et explication :
par défaut nous avons mis la chaine "PREROUTING" à "DROP" ce qui bloque tous les paquets non explicitement autorisés arrivant sur le routeur. Les règles suivantes précisent quels paquets sont autorisés et s'applique uniquement à la carte réseau locale (-i eth0) donc pas aux paquets qui pourraient venir de l'extérieur sur l'autre carte (eth1). Si un paquet "match" une règle (cad qu'il répond aux exigences de la règle) alors la cible de la règle est appliquée à ce paquet : -j ACCEPT est une cible simple qui signifie "ok, j'accepte ce paquet".
La table "NAT" utilise 3 chaines consécutives : "PREROUTING" "OUTPUT" "POSTROUTING", la première chaine (PREROUTING) est la plus importante, c'est la porte d'entrée du routeur, c'est pour quoi il faut lui apporter une attention particulère. La chaine "POSTROUTING" est la dernière, elle s'applique lorsque les paquets sortent du routeur ...
3/ Pour prendre en compte cette nouvelle config :
service iptables restart
Maintenant il suffit de configurer vos PC locaux sous ouindoz ou autre OS en 192.168.1.X , précisez en passerelle 192.168.1.1 et le DNS habituel de votre FAI et c'est parti, vos PC locaux utilisent ce routeur linux ... bien sur on peut aussi installer un serveur DHCP et configurer les PC locaux en DHCP , c'est un autre sujet que je n'ai pas encore traité.
NOTE : L'idéal est bien sur d'utiliser en parallèle un proxy Squid sur ce serveur, qui vous permettra de faire du cache (c'est le premier boulot d'un proxy hein) mais aussi d'apporter des restrictions supplémentaires (demande d'un mot de passe pour aller sur internet par ex) et pourquoi pas de limiter la bande passante pour certains usages ... pour ça je vous invite à regarder un autre article :
Squid tunning »
Pour aller plus loin :
7 681 clics - Créé le 23/02/2009 par Tito - Modifié le 18/04/2012