Ça fait longtemps que j'ai mis ça en place au travail, rien de bien neuf.
Commençons par lister les intérêts d'installer une passerelle sur un serveur, et non simplement d'utiliser une box ou un rooter avancé:
- Certains éléments pourront être greffés sur cette passerelle. L'idéal pour un serveur smtp, c'est d'être sur la passerelle, il filtrera comme ça le port 25. Pareil pour un petit serveur web, c'est sa place idéale[1]
- Installer un proxy
- Faciliter la supervision des flux. Vous monitorez vos modems et rooters vous? un serveur linux, c'est plus simple
- Pouvoir aller plus loin dans les règles de filtrage.
- Un accès SSH sur la passerelle avec clé et pas mot de passe, vous donne une porte entièrement sécurisée sur votre LAN de l'extérieur.
- Pour le coté geek, et le plaisir du Do It Yourself
Pour la rédaction de ce billet, le réseau est virtuel, dans des virtualbox. L'installation du serveur avec deux cartes réseau est expliquée dans le billet précédent.
Voici un schéma de principe:

Le modem est en mode router, il a une IP locale: 192.168.0.254
Le serveur passerelle a deux cartes réseau:
- eth0, qui est reliée au modem a l'adresse IP 192.168.0.1
- eth1 qui est relié au LAN a l'adresse IP 192.168.1.1
Les équipements du LAN on des IP qui commencent par 192.168.0.
Configurer les adresses ip de la passerelle:
Editer /etc/network/interfaces comme ceci:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). #les interfaces démarrées lors du boot du systeme auto lo eth0 eth1 # The loopback network interface iface lo inet loopback #carte dans le LAN iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 #carte vers le modem iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0
Pour appliquer les changements:
/etc/init.d/networking restart
Dans les réseaux de classe C, les équipements n'écoutent que les communications provenant d'une IP de la même tranche. Ces différentes tranches d'IP constituent des VLANS. Notre passerelle a deux pattes, une dans chaque VLAN, celui constitué par la box et elle même, et celui qui contient les ordinateurs. C'est elle qui permettra de faire le lien, encore faut-il lui dire de le faire.
Passerelle
Un premier script Iptables pour en faire une passerelle (passoire).
IPtables, en plus de savoir filtrer en entrée ou en sortie des paquets, a aussi des fonctions NAT.
Voici le script de base:
#!/bin/bash # Vider les tables actuelles iptables -t filter -F iptables -t filter -X iptables -t nat -F iptables -t nat -X echo - Vidage : [OK] #activer le forwarding echo 1 > /proc/sys/net/ipv4/ip_forward #lui demander de transmettre via eth0 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE echo - Autoriser le forwarding : [OK]
Enregistrez le dans le fichier /etc/init.d/firewall,
Le rendre exécutable et le lancer.
chmod +x /etc/init.d/firewall /etc/init.d/firewall
Sur mon petit réseau de virtualbox, en fond la passerelle et au premier plan une xubuntu ayant le réseau configuré ainsi:
- Adresse: 192.168.1.3
- Masque 255.255.255.0
- Passerelle 192.168.1.1 (La passerelle en question)
- DNS: 8.8.8.8

ça marche!
Tout passe, on a créé une passerelle, passoire.
Un peu plus de sécurité, améliorons le script.
L'objectif est de pouvoir considérer que le LAN sera une zone démilitarisée, pouvoir donc y abaisser tous les pare-feu. La passerelle devient un seul gros pare feu pour tout le LAN. Lorsqu'on a régulièrement à déployer des nouvelles applications réseau, le gain de temps ainsi est énorme.
Je ne vais cependant pas faire un vrai explicatif des IPtables, ce serait super long, et il existe plein de documentation sur cette technologie (pas toute jeune).
Je ne ferai pas mieux que cet exemple facilement adaptable de script
Changez votre fichier firewall par celui proposé dans le lien.
Ajoutez juste:
echo 1 > /proc/sys/net/ipv4/ip_forward
et les variables en début de script, je les ai défini ainsi:
# Interface qui est sur Internet (WAN) WAN_IFACE="eth0" # Interface Wireless WLAN_IFACE="wlan0" # Interface qui est dans votre réseau local (LAN) LAN_IFACE="eth1" # Adresse de votre passerelle (Firewall) LAN_IP="192.168.0.1" LAN_NET="192.168.1.0/24" #(Sous-réseau avec le masque 255.255.255.0) LAN_BCAST="192.168.1.255" # (Adresse de broadcast.)
Voici tel que j'ai mis ce script à cette étape: firewall.txt
Notre passerelle fait à présent firewall. Pour concurrencer une box, on va ajouter un cache DNS et un serveur DHCP:
Le serveur de cache DNS
Installer bind9
apt-get install bind9
Configuration en cache
Editez le fichier /etc/bind/named.conf.options et décommentez les lignes suivantes, en prenant soin d'y mettre des serveurs DNS (ceux de votre FAI, ou de google par exemple):
forwarders {
8.8.8.8;
8.8.4.4;
};
Et tant qu'à avoir un serveur de cache, autant en faire profiter le serveur lui meme; Editez le fichier /etc/resolv.conf et mettez y juste la ligne suivante:
nameserver 127.0.0.1
Le serveur DHCP
apt-get install dhcp3-server
Afin de choisir l'interface sur laquelle il devra écouter, editer le fichier de configuration /etc/default/isc-dhcp-server Et preciser l'interface sur laquelle il doit fonctionner. eth1 dans on cas:
INTERFACES="eth1"
Editer le fichier de configuration /etc/dhcp/dhcpd.conf et pour ça l'exemple de ubuntu est tres bien.
Ce qui donne dans mon cas:
##### Option generale par defaut #####
### ReSEAU ###
## Nom du serveur DHCP
server-name "debian.lan";
## Mode autoritaire (autoritaire)
authoritative;
## Masque de sous-réseau
### DOMAINE ###
## Nom du domaine
option domain-name "lan";
## Adresse IP du serveur DNS
# a remplacer par l ip de votre serveur dns ou par celle de votre fai
option domain-name-servers 192.168.1.1;
## Type de mise à jour du DNS (aucune)
ddns-update-style none;
### TEMPS DE RENOUVELEMENT DES ADRESSES ###
## par défaut en s (1 h)
default-lease-time 3600;
## maximum (2 h)
max-lease-time 7200;
### Sécurité ###
## refus(deny)/autorise(allow) les clients inconnus (refuse client inconnu)
allow unknown-clients;
## Use this to send dhcp log messages to a different log file (you also
## have to hack syslog.conf to complete the redirection).
log-facility local7;
### PXE ###
## Permet le boot réseau pour TFTP
allow bootp;
allow booting;
##### RéSEAUX #####
# # déclaration sous réseau 192.168.1.1.*
subnet 192.168.1.1 netmask 255.255.255.0 {
authoritative;
# Adresse de diffusion
option broadcast-address 192.168.1.255;
# # routeur par défaut
option routers 192.168.1.1;
# La plage ne contient qu'1 adresse ce qui empèche l'attribution sauf au client dont celle-ci est fixée.
range 192.168.1.111 192.168.1.140;
# Le fichier peut être spécifié dans la section host , il deviendra alors prioritaire sur celui-ci
filename "pxelinux.0";
# exemple de fixage d'une adresse: 68pc
host 68pc {
hardware ethernet 00:1E:58:A6:FD:C4;
fixed-address 192.168.1.122;
}
}
/etc/init.d/isc-dhcp-server restart
:Conclusion:
Voila, on a les fonctions principales d'une box. Reste à faire mumuse, y ajouter un proxy, un serveur de mail, un ftp public toussa 
Notes
[1] Enfin je trouve quand même dangereux de mettre un serveur web et un serveur e-mail sur la même machine car au moindre script PHP ayant une faille, les conséquences peuvent être dramatiques.

debian
Commentaires
Ca tombe bien, j'ai une "vieille" bécane qui me servait de PC de salon, mais manque de patate CPU pour en faire une bonne station multimedia, je crois que je vais la recycler dans les prochains jours!
Et merci pour tou(e)s les tutos / infos présent(e)s sur ton blog!
De rien m4as, ça me fait toujours super plaisir d'avoir ce genre de retour sur mon blog!