Passerelle internet linux
| Fiche express | |
|---|---|
| Domaine | Tutoriel : passerelle Internet Linux pour petit réseau |
| Composants | Netfilter · Dnsmasq · Squid · SquidGuard · Sarg |
| Public visé | LAN d'une vingtaine de postes maximum |
| Voir aussi | Squid · SquidGuard · Squid authentification · Sarg |
Ce tutoriel décrit la mise en place rapide d'une passerelle Internet pour un LAN de petite taille (une vingtaine de postes maximum), avec Debian comme distribution de référence — les mêmes étapes s'appliquent globalement à toute distribution GNU/Linux, les différences notables étant signalées au fil du texte.
Une passerelle Internet ne se limite pas à relier deux réseaux : au-delà de la translation d'adresse (NAT), elle joue aussi un rôle de sécurisation et de tampon entre le réseau privé et Internet. Ce tutoriel ajoute donc, à la translation d'adresse :
- un pare-feu (Netfilter/Iptables) ;
- un service d'adressage IP dynamique (Dnsmasq) ;
- un service de résolution de noms (Dnsmasq) ;
- un service mandataire ou proxy (Squid + SquidGuard) ;
- un service d'authentification des accès Web (NCSA, ou une méthode plus riche — voir
Squid authentification).
Netfilter : translation d'adresse et pare-feu
C'est Netfilter, intégré au noyau Linux depuis la version 2.4, qui assure à la fois la communication du réseau privé vers Internet et sa protection vis-à-vis de ce dernier. Iptables est l'interface en ligne de commande qui permet de lui donner des règles — voir cette page pour la syntaxe complète (tables, cibles, suivi de connexion, persistance…). Cette section ne couvre que le script minimal propre au rôle de passerelle.
apt-get install iptables
Script de pare-feu minimal
Plutôt que de saisir les règles une à une en shell, créer un script exécutable lancé au démarrage :
touch /etc/init.d/firewall.sh
chmod +x /etc/init.d/firewall.sh
Règles minimales pour une passerelle à deux interfaces (eth0 = réseau privé,
ppp0 ou eth1 = interface publique) :
#!/bin/sh
# Purge des règles existantes, politique par défaut restrictive
iptables -F ; iptables -X ; iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Boucle locale, utilisée par certaines applications
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Confiance totale envers le réseau privé (approche simplifiée, à durcir selon le contexte)
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
# Sortie autorisée vers Internet, entrée limitée aux connexions déjà établies/liées
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Activation du routage et translation d'adresse (NAT)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Activation au démarrage (Debian) :
update-rc.d firewall.sh start 20 3 5 . stop 80 0 1 2 4 6 .
/etc/init.d/firewall.sh start
À chaque port ouvert en plus sur la passerelle (ou redirigé vers une machine du réseau privé), la sécurité globale du LAN diminue d'autant — durcir en conséquence la configuration des services ainsi exposés. Voir Iptables pour la syntaxe détaillée d'ajout/suppression de règles, le NAT/DNAT, et le suivi de connexion.
Dnsmasq : résolution de noms et adressage IP dynamique
Pour un LAN de taille réduite, Dnsmasq suffit largement à distribuer les adresses IP et résoudre les noms de domaine, en évitant les requêtes DNS redondantes vers le FAI (accès Web plus réactif). Au-delà d'une vingtaine de postes, ou pour gérer une zone DNS publique et de la redondance de serveurs, le couple Bind + dhcpd devient plus adapté.
apt-get install dnsmasq
Résolution de noms
Configuration minimale (/etc/dnsmasq.conf) :
domain-needed
expand-hosts
bogus-priv
interface=eth0
domain=lan.exemple.local
cache-size=512
- domain-needed : ne jamais transmettre en amont de requêtes sur des noms simples (sans point) — répond directement « non trouvé » si le nom n'est ni dans
/etc/hosts, ni dans les baux DHCP. - expand-hosts : ajoute le nom de domaine aux entrées courtes de
/etc/hosts. - bogus-priv : répond directement « pas de domaine » aux résolutions inverses sur des IP privées non connues, plutôt que de les transmettre en amont.
- interface : restreint l'écoute à l'interface réseau privée.
- domain : nom de domaine distribué aux clients DHCP ; sans cette option, les noms d'hôtes avec point sont rejetés et journalisés.
- cache-size : taille du cache DNS (150 par défaut, 0 pour désactiver).
Adressage IP dynamique
# Plage DHCP et durée du bail
dhcp-range=192.168.1.10,192.168.1.110,24h
# Netmask (option 1)
dhcp-option=1,255.255.255.0
# Route par défaut (option 3)
dhcp-option=3,192.168.1.1
# Serveurs DNS distribués aux clients (option 6) — ici la passerelle elle-même, puis ceux du FAI
dhcp-option=6,192.168.1.1,203.0.113.1,203.0.113.2
# Adresse IP fixe pour une machine donnée
dhcp-host=00:11:22:33:44:55,machine-fixe,192.168.1.10
Référence complète des options : man 8 dnsmasq.
Squid : mise en cache et filtrage du Web
Squid rend l'accès au Web plus réactif (cache des pages fréquemment visitées) et masque les postes du réseau privé derrière l'adresse IP publique de la passerelle. Voir Squid pour l'installation et la configuration détaillées.
Sécuriser un Squid fraîchement installé
La configuration par défaut de Squid est volontairement restrictive : par défaut, seul Squid lui-même a accès au Web. Pour ouvrir l'accès au réseau privé :
acl localnet src 192.168.1.0/24
http_access allow localnet
# ... juste avant la ligne finale :
http_access deny all
# Écouter uniquement sur l'interface privée (pas sur l'interface publique)
http_port 192.168.1.1:3128
systemctl reload squid
Restreindre ensuite les horaires d'accès si besoin :
acl heures_autorisees time MTWHF 12:00-14:00
http_access allow localnet heures_autorisees
(jours en anglais : M=lundi, T=mardi, W=mercredi, H=jeudi, F=vendredi, A=samedi, S=dimanche)
Proxy transparent
Pour éviter de configurer chaque navigateur client individuellement, rendre le cache
transparent : le port Squid est marqué transparent, et le pare-feu redirige les
requêtes HTTP sortantes vers ce port.
http_port 192.168.1.1:3128 transparent
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Seules les requêtes HTTP (port 80) sont concernées : le FTP, sur un autre port, ne transite pas par ce mécanisme de redirection transparente.
SquidGuard : filtrer les sites Web
Squid seul reste limité pour restreindre finement les accès Web (IP, port, horaire — pas le contenu des URLs). SquidGuard est le module qui comble ce manque : listes blanches/noires, filtrage par mots-clés, blocage des accès en IP nue, redirection vers une page d'information. Voir SquidGuard pour l'installation, le format de configuration et des exemples complets (y compris un cas d'usage type « salle enfants / salle adultes » avec plages horaires différenciées).
Authentification des accès (NCSA)
Pour un réseau hétérogène de petite taille, l'authentification NCSA (fichier local
utilisateurs/mots de passe, même format que .htaccess Apache) est la plus rapide
à mettre en place. Pour LDAP, SMB/NTLM ou Kerberos, voir Squid authentification et
Squid notes.
apt-get install apache2 # fournit l'outil htpasswd
mkdir -p /etc/squid/auth
htpasswd -c /etc/squid/auth/passwd premier_utilisateur
# ré-exécuter sans -c pour chaque utilisateur suivant
acl authentification proxy_auth REQUIRED
http_access allow authentification
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/auth/passwd
authenticate_children 5
authenticate_ttl 1 hour
authenticate_ip_ttl 60 seconds
Détail des paramètres : voir Squid authentification.
(à vérifier) au-delà de quelques utilisateurs, une interface web dédiée pour la gestion des comptes (type admuser/chpasswd) facilite le renouvellement des mots de passe — les outils historiquement associés à ce besoin sont anciens et plus maintenus ; pour un déploiement actuel, une authentification déléguée à un annuaire LDAP ou à un Active Directory (voir Squid authentification, Squid notes) reste préférable dès que le nombre d'utilisateurs dépasse quelques unités.
Traçabilité des accès
Les logs bruts de Squid (/var/log/squid/access.log) ne sont pas directement
lisibles. Sarg génère des rapports HTML périodiques (consommation par utilisateur, sites
visités) à partir de ce même fichier — voir Sarg pour l'installation et la configuration.
Conclusion
Une telle passerelle suffit largement à un petit réseau. Pour un environnement où la majorité des postes clients sont sous Windows et où l'intégration à un Active Directory est nécessaire, privilégier une authentification Kerberos/NTLM native (voir Squid notes) plutôt qu'un second serveur dédié en coupure.
Voir aussi
- Iptables — syntaxe complète de configuration du pare-feu
- Squid — configuration détaillée du proxy
- SquidGuard — filtrage des sites Web
- Squid authentification — méthodes d'authentification avancées (LDAP, SMB, Kerberos)
- Squid notes — déploiement NTLM/Kerberos face à un Active Directory
- Sarg — rapports d'utilisation du proxy
- Proxy debian — configurer un client Debian derrière ce type de passerelle