Configurer un serveur sous Linux, afin de réaliser un réseau domestique ou de petite entreprise, avec un filtre parental, le tout réalisé grâce à des logiciels gratuits.
J’ai beaucoup galéré, n’ayons pas peur des mots. Cela m’a pris un certain temps pour parvenir à ce que je voulais : réaliser la configuration d’un serveur pour un centre culturel. Permettre à chaque utilisateur d’aller sur le net, mettre en place un « filtre parental », capable de bloquer des pages indésirables et de faire un filtrage horaire, éventuellement installer un intranet.
Pas mal de recherche sur Internet, et une fois que tout fonctionne, l’envie de faire un tutoriel pas à pas, pour que je puisse refaire ce que j’ai fais, et que cela puisse profiter à d’autres. Je ne prétends pas être un spécialiste, j’ai une connaissance de base de linux (en ligne de commande, cela va de soit), connaissance minimale indispensable à tous ceux qui voudraient se lancer dans la même aventure.
Un serveur (HP Prolian en l’occurrence)
deux cartes réseaux (et si la carte réseau native n’est pas bien gérée par Linux, n’hésitez-pas à en acheter une à la Fnac, pour 7 €… c’est ce que j’ai fais)
un hub
des ordinateurs reliés au réseau (un ordinateur dans chaque chambre ou bureau)
Des utilisateurs pas spécialistes du tout, partisans du « plug and play » : je branche mon ordinateur, et je veux naviguer sur le web.
J’ai choisi une distribution linux légère, xubuntu 10.04. J’aurais pu prendre la version serveur d’Ubuntu, mais tout faire en ligne de commande, c’était trop difficile pour moi. Alors, tant qu’à faire, autant prendre une distribution graphique, mais légère : mon serveur ne me servira pas de poste de travail.
Le serveur servira de serveur DHCP : c’est lui qui va donner les adresses IP aux différents ordinateurs du réseau.
Tout est expliqué sur le site d’Ubuntu : installez votre distribution, tout se fait sans problème. Pas de partitionnement particulier de disque dur : le système est installé sur la totalité du disque (Ubuntu s’occupe de faire le partitionnement dont il a besoin)
C’est là que les choses sérieuses commencent. Je me contente de traduire un excellent article que vous trouverez ici, intitulé : Comment partager une connexion internet avec Ubuntu http://ubuntuforums.org/showthread....
[REM] : j’ai lu pas mal de textes. J’ai essayé d’appliquer pas mal de tutoriels, sans succès. Il y avait toujours quelque chose qui ne marchait pas. Celui-ci est le seul qui aborde le sujet simplement, sans situation particulière, et que j’ai suivi à la lettre, avec succès.
Il est indispensable de bien connaître quelle carte de votre serveur est connectée au Net, et quelle carte est connectée au réseau. Sans cela, vous êtes mort.
Pour connaître la carte connectée à Internet et celle connectée au réseau interne, juste après l’installation de votre distribution Linux, faites dans un terminal :
sudo ifconfigLe résultat vous donnera des informations sur chaque carte. La carte dont toutes les informations sont à zéro est la carte connectée au réseau, la carte qui a une adresse est connectée à Internet.
Je traduis maintenant l’article de référence :
Dans l’exemple du texte de référence, la carte connectée au réseau est eth0, et celle connectée au net est eth1.
La carte connectée au réseau interne a besoin d’une adresse statique. Pour cela, éditer le fichier de configuration du réseau, et attribuez à eth0 une adresse statique :
sudo mousepad /etc/network/interfacesajoutez les lignes suivantes :
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.1
network 192.168.0.0
gateway 192.168.0.1Remarques :
1) j’ai utilisé mousepad comme éditeur de texte, car c’est celui qui est fourni sous xubuntu. Vous pouvez utiliser celui que vous voulez (vi, etc)
2) à vous de donner à votre réseau les valeurs que vous voulez. J’ai pris des valeurs plus que standard.
3) Attention : en anglais, « address » s’écrit avec 2 « d » …
Les modifications introduites dans le fichier /etc/network/interfaces n’interviennent qu’après un redémarrage du serveur.
Pour que les adresses IP extérieures soient communiqués au réseau intérieur, il faut autoriser l’IP forwarding (désactivé par défaut dans Ubuntu). Pour cela :
sudo mousepad /etc/sysctl.confrecherchez les lignes suivantes :
#net.ipv4.conf.default.forwarding=1
#net.ipv6.conf.all.forwarding=1Supprimez le # pour rendre ces lignes actives
Ajoutez également es lignes suivantes :
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1Redémarrez votre système.
Pour permettre aux paquets de passer à travers votre routeur, nous devons ajouter quelques instructions. Pour de plus amples informations, je vous renvoie à différents documents que l’on peut trouver sur le net au sujet du natage d’adresses.
Pour cela, éditez le fichier rc.local :
Sudo mousepad /etc/rc.localAjoutez les lignes suivantes :
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth1 -j MASQUERADEPour que les ordinateurs du réseau puissent avoir une adresse IP automatiquement, nous allons installer sur notre machine-serveur un serveur DHCP. Voir là encore sur le net toutes les infos sur ce qu’est un serveur DHCP
Telle qu’elle est décrite dans le tuto de référence en anglais, et comme l’auteur le dit lui-même « The start will fail, but that is nothing to worry about. » C’est à dire : « Une fois installé, il y aura un échec au démarrage du serveur, mais il ne faut pas s’en inquiéter » (sous-entendu : nous allons régler le problème)
Donc,
sudo apt-get install dhcp3-serverL’installation se fait, et comme prévu, le serveur ne démarre pas. Pour aller plus loin, vous avez besoin d’un peu d’information, entre autre de connaître les serveurs DNS que vous utilisez (ceux de votre fournisseur d’accès)
Pour cela, tapez la commande :
cat /etc/resolv.confet prenez note des adresses des serveurs de noms de domaine. Nous allons appeler ces adresses Nameserver1 et Nameserver2.
Il faut maintenant configurer le serveur DHCP. Pour cela :
gksu mousepad /etc/dhcp3/dhcpd.confEt recopiez dans le fichier de conf les lignes suivantes : (éventuellement adaptées à votre situation )
ddns-update-style none;
option domain-name "example.org";
option domain-name-servers Nameserver1, Nameserver2;
option routers 192.168.0.1;
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
}
default-lease-time 600;
max-lease-time 7200;
log-facility local7;Attention aux " ;" en fin de ligne...
Regardez la ligne "range" : on définit ici la plage d’adresses de nos machines clientes. Adaptez ces données en fonction de vos besoins. Ici, je peux connecter 100 machines. (c’est un peu surdimensionné dans mon cas...)
La dernière chose à faire pour que le serveur dhcp fonctionne est de lui dire sur quelle carte réseau il doit écouter. Dans notre cas, la carte réseau d’écoute est eth0.
Pour cela,
gksu mousepad /etc/default/dhcp3-serveréditez la ligne (ou écrivez-là si elle n’existe pas) et marquez :
INTERFACES= "eth0"Redémarrez l’ensemble, et normalement, CA MARCHE !
C’est à dire :
chaque poste client du réseau a une adresse IP
depuis chaque poste client du réseau, vous pouvez naviguez sur le net.
Si cela ne marche pas, n’allez pas plus loin… (il n’y a aucune raison que cela fonctionne plus tard par magie, d’autant plus que nous allons complexifier notre système)
Si tout fonctionne, prenez un café, faites une pose, respirez par les narines… et quand vous êtes prêt, passez à l’étape suivante.
Maintenant que le réseau fonctionne, nous voulons un filtre parental, qui bloque les pages indésirables, et qui réalise également un filtrage horaire par poste.
C’est à dire : Avoir un filtrage qui empêche Jacques d’aller sur le net de telle heure à telle heure, mais qui permette néanmoins à Sophie d’y aller. Le filtre Squidguard réalise cela, le tout gratuitement… et avec une grande souplesse.
Pour fonctionner, Squidguard a besoin d’un serveur proxy. J’imagine qu’il en existe plusieurs, nous allons utiliser l’un des plus connus, Squid.
Pour cela,
sudo apt-get install squidACL=Access Control List
Une fois Squid installé, il démarre normalement sans problème. Il vous faut maintenant le configurer, pour qu’il prenne en compte votre réseau. Si vous ne faites rien, par défaut, Squid bloquera la navigation depuis vos machines clients.
Pour cela,
sudo mousepad /etc/squid/squid.confCertains allègent le fichier de configuration, pour supprimer les lignes inutiles (toutes celles qui sont en commentaires, avec le « # » devant). Quoi qu’il en soit, vous devez créer une ACL qui autorise l’accès à votre réseau ; Vous obtenez alors un fichier de conf qui ressemble à cela :
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl lan_veymont src 192.168.0.0/255.255.255.0
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow lan_veymont
http_access deny all
icp_access allow localnet
icp_access deny all
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
coredump_dir /var/spool/squidVous voyez bien la ligne
acl lan_veymont src 192.168.0.0/255.255.255.0dans laquelle je définis mon réseau local, et j’autorise ce réseau local par la ligne
http_access allow lan_veymontRedémarrez Squid, et testez le réseau depuis une machine cliente. Normalement, cela marche.
[REM]
Arrivé à ce stade, je me suis trouvé confronté au problème suivant : depuis une machine cliente, si je mettais le proxy dans mon navigateur, je pouvais sortir sur le net. Cela signifiait que le proxy fonctionnait. Mais : si je ne mettais pas le proxy dans mon navigateur, je pouvais également sortir sur le net… Ce qui ne convenait pas… Puisque je veux forcer les machines clientes à passer par le proxy et par le filtre parental, il ne faut pas qu’elles puissent naviguer sur le net si le proxy n’est pas indiqué dans le navigateur.
Ce fut une rude recherche… La solution m’a été donnée dans le forum Ubuntu dans le topic Squid et réseau local.
J’ai donc fait ce qui m’a été indiqué, et j’ai redirigé toutes les requêtes http vers le port du port du proxy Squid.
J’ai suivi les indications données dans la doc du forum ubuntu, et tout s’est bien passé.
Pour rendre plus facile la gestion du filtre, je vous conseille de mettre en place Webmin, ainsi que le module de SquidGuard pour Webmin. Ainsi, vous pourrez plus facilement définir vos plages horaires de filtrage, corriger les sites bloqués par erreurs, ou ajouter des sites auquel vous ne souhaitez pas que vos collaborateurs accèdent.
Vous pouvez également configurer SquidGuard directement avec webmin, comme cela est expliqué dans ce site. Le site de Christian Caleca, L’internet Rapide et Permanent, est également un grand classique. Ceci étant, je vous conseille plutôt de configurer le SquidGuard sans utiliser webmin, car en utilisant le module Webmin, j’ai rencontré des problèmes d’écriture des ACL dans le fichier de conf.
N’oubliez surtout pas de modifier les droits des fichiers : à l’installation, Squid crée un user "proxy". Si vous ne modifiez pas les droits de ce user, votre filtre parental ne fonctionnera pas. Tous est expliqué dans le doc du forum Ubuntu : comment mettre en place un filtre parental, paragraphe "Démarrage de Squid".
Articles avec le mot clé « Linux »
Introduction J’ai beaucoup galéré, n’ayons pas peur des mots. Cela m’a pris un certain temps pour (...) Lire...