Filtrage de contenu à l'école basé sur Ubuntu 18.04 et Squid transparent, avec intégration au réseau sur MikroTik et pas seulement



1. Introduction


Le sujet du filtrage de contenu dans les écoles est plutôt galvaudé et plein d'informations à ce sujet, mais il est déjà assez dépassé en raison de la transition de nombreux sites vers le protocole HTTPS sécurisé, avec lequel la plupart des solutions proposées ne fonctionnent pas. J'ai donc décidé d'écrire l'article le plus complet de A à Z, en rassemblant toutes les informations que j'ai trouvées sur les étendues de Google. L'article est conçu pour les connaissances de base dans le domaine de l'administration et convient aux professeurs d'informatique.

2. Mandat


Éléments fournis : 436-FZ et une école dans laquelle de nombreux ordinateurs sont mis en réseau et connectés à Internet via un routeur MikroTik ou tout autre.

Objectif: filtrer le contenu de HTTP et HTTPS par liste blanche pour tout le monde sauf votre bien-aimé et la direction de l'école.


3. Résolution de problèmes


Un ordinateur de bureau inutilisé a été trouvé avec un processeur Intel-ohm double cœur, 1 Go de RAM et 80 Go.
Pour résoudre ce problème, les actions suivantes seront effectuées:

  1. Linux Ubuntu Server 18.04 LTS installé
  2. Transparent Proxy Squid est installé et configuré sur le serveur, compilé à partir de codes source avec prise en charge HTTPS.
  3. Intégration du serveur dans le sous-réseau, en redirigeant les demandes vers Proxy ou une option alternative (à la toute fin)

Commençons.

3.1. Installer et configurer Ubuntu 18.04


Le processus d'installation est simple. Téléchargez la distribution d'Ubuntu Server 18.04 sur le site officiel. Je recommande le téléchargement avec l'ancien programme d'installation, car le nouveau, personnellement de moi, est entré en téléchargement infini lors de l'installation. Nous écrivons l'image sur un lecteur / disque flash USB de n'importe quelle manière pratique. Pour l'enregistrement sur une clé USB, je recommande d'utiliser Rufus et au début de l'enregistrement, sélectionnez «Enregistrer l'image DD». Ensuite, en suivant les informations à l'écran, installez le système. Nous nous attardons uniquement sur le choix des composants, où vous pouvez immédiatement sélectionner OpenSSH et c'est tout. Nous n'avons pas besoin de beaucoup, mais nous devons installer ce dont nous avons besoin.

Ainsi, Ubuntu est installé. Le réseau, si vous avez DHCP, est déjà configuré. Nous allons entrer en mode superutilisateur pour qu'à chaque fois nous n'ajoutons pas sudo aux commandes.

sudo -s 

Saisissez votre mot de passe et mettez à jour le système.

 apt-get update apt-get upgrade 

Installez un Ă©diteur de texte et un gestionnaire de fichiers.

 apt-get install nano mc 

Pour enregistrer le fichier dans nano , vous devez appuyer sur Ctrl + O puis sur Y. Quittez l'éditeur en appuyant sur Ctrl + X. Vous pouvez enregistrer le fichier immédiatement avant de quitter en appuyant sur Ctrl + X puis sur Y.
Pour ouvrir le gestionnaire de fichiers, tapez mc . Un DOS NortonCommander typique ou Windows TotalCommander / FAR s'ouvre avec deux panneaux. Bien que je sois habitué à travailler avec la console, le gestionnaire de fichiers aide parfois, par exemple, à trouver le fichier souhaité plus rapidement.

Si vous ne disposez pas de DHCP ou si vous souhaitez une adresse IP distincte pour votre serveur, comme je le souhaitais, nous passerons Ă  la configuration.

Configurer une adresse IP statique
Contrairement aux versions précédentes d'Ubuntu, dans le nouveau 18.04, le réseau n'est plus configuré dans les interfaces / etc / network / habituelles, mais via netplan dans le fichier /etc/netplan/*.yaml . Le fichier peut être nommé différemment, mais il est là seul. / Etc / network / interfaces lui-même nous écrit ce qui suit:



De plus, si vous souhaitez effectuer une mise à niveau à partir d'une version antérieure à 18.04, les paramètres réseau resteront où ils étaient. Netplan n'est pertinent que pour une installation propre de 18.04.

Passons à la configuration du réseau.

Tout d'abord, examinons le nom de l'interface réseau attribuée au système d'exploitation et rappelons-le.

 ifconfig 

Ouvrez maintenant le fichier de paramètres.

 nano /etc/netplan/*.yaml 

Il doit déjà avoir un paramètre DHCP. Apportons le fichier au formulaire suivant.

 # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets:   : dhcp4: no dhcp6: no addresses: [/24] gateway4:  nameservers: addresses: [77.88.8.7, 77.88.8.3] 

Saisissez votre interface, votre adresse et votre passerelle. Le DNS recommande de les laisser - Yandex.DNS Les enfants seront une protection supplémentaire. Le même DNS est configuré sur mon routeur. Dans tous les cas, vous devez spécifier le DNS que le routeur distribue.

Ici, vous devez faire attention aux espaces (à savoir les espaces, pas les tabulations). Chacun, une sorte de paragraphe est séparé de l'espace précédent. Par exemple, si après les serveurs de noms, la ligne d'adresse n'est pas séparée par un espace, mais alignée avec la ligne ci-dessus, alors, lorsque vous essayez d'appliquer les paramètres, netplan donnera une erreur.

Appliquez les paramètres.

 netplan apply 

Redémarrez le serveur, au cas où.

 reboot 


Il a également ajouté une option de configuration réseau alternative pour DHCP et IP statique, si netplan ne convient pas.
Configuration alternative du réseau
Dans Ubuntu 18.04, vous pouvez revenir à l'option de configuration réseau familière via / etc / network / interfaces . Pour ce faire, le fichier lui-même indique que vous devez installer l'utilitaire ifupdown . Installez-le:
 apt-get install ifupdown 

Ouvrez maintenant le fichier des paramètres initiaux dans netplan
 nano /etc/netplan/*.yaml 

et commentez tout son contenu afin qu'il n'y ait pas de conflits.
Ensuite, ouvrez le fichier de paramètres réseau
 nano /etc/network/interfaces 

Et ajoutez-y:
pour IP statique
 auto ___ iface ___ inet static address IP- netmask  gateway  dns-nameservers 77.88.8.7 77.88.8.3 

pour dynamique (DHCP)
 auto ___ iface ___ inet dhcp 

Redémarrez le serveur
 reboot 

Si vous utilisez cette option pour configurer le réseau, puis plus loin, dans les paramètres du pare-feu, vous pouvez désactiver complètement Webmin et utiliser l'option de configuration sous le spoiler (bien que l'option avec Webmin fonctionne également)


Vous devez maintenant activer le passage des paquets via notre serveur. Ouvrez le fichier /etc/sysctl.conf
 nano /etc/sysctl.conf 

Nous y recherchons la chaîne net.ipv4.ip_forward = 1 et la décommentons. Si la valeur est 0 , passez à 1 .
Entrez la commande pour appliquer le paramètre
 sysctl -p /etc/sysctl.conf 


Après avoir configuré le réseau, je vous recommande d'aller directement au terminal et de continuer à y travailler. Pour ce faire, si vous n'avez pas sélectionné OpenSSH lors de la phase d'installation, installez-le.

 apt-get install ssh 

Par défaut, SSH est déjà configuré pour la connexion utilisateur / mot de passe sur le port 22, mais vous pouvez le configurer vous-même via, par exemple, une clé d'autorisation et avec un autre port afin de protéger le serveur contre les attaques extérieures. Comment faire est plein d'informations sur Internet.

En tant que terminal, j'utilise XShell. Vous pouvez utiliser celui que vous préférez.

Nous n'avons pas besoin d'un serveur DHCP et d'une deuxième carte réseau, car nous redirigerons les demandes des utilisateurs vers notre proxy en utilisant le routeur lui-même.

La fondation est posée. Passons maintenant à l'installation et à la configuration de Squid.

3.2. Installation et configuration de Squid avec prise en charge HTTPS et filtrage de liste


3.2.1. Créer et installer Squid

Comme il n'y a pas de package Squid prêt à l'emploi avec prise en charge SSL dans les référentiels, vous devrez l'assembler manuellement à partir de la source. Tout d'abord, ouvrez le fichier avec les référentiels.

 nano /etc/apt/sources.list 

Nous y décommentons (supprimons # au début) les lignes commençant par deb-src .

Après cela, nous mettrons à jour les packages.

 apt-get update 

Ensuite, installez les outils d'assemblage.

 apt-get install fakeroot build-essential devscripts 

Et ajoutez tous les packages nécessaires pour l'assemblage.

 apt-get build-dep squid3 

Installez la bibliothèque pour la prise en charge SSL.

 apt-get install libssl1.0-dev 

Allons dans le dossier de départ et créons un dossier pour l'assembly, en lui attribuant immédiatement les droits nécessaires.

 cd ~ mkdir build chown _apt:root build 

Accédez au dossier créé et téléchargez les sources Squid.

 cd build apt-get source squid3 

Un dossier apparaîtra dans le dossier de construction avec le nom squid3 et le numéro de version. Sur Ubuntu 18.04.3, c'est 3.5.27. Allons-y.

 cd squid3-3.5.27 

Avant l'assemblage, vous devez spécifier les options. Ouvrez le fichier avec eux.

 nano debian/rules 

Nous recherchons une liste d'options, comme dans l'image


Ajoutez les options suivantes.

 --enable-ssl \ --enable-ssl-crtd \ --with-openssl 

Veuillez noter que des options ont déjà été ajoutées à l'image et que le caractère "\" doit apparaître après chaque ligne dans les options sauf la dernière .

Donc, tout est prêt pour l'assemblage. Passons maintenant au dossier source de Squid, bien que vous devriez déjà y être.

 cd ~/build/squid3-3.5.27 

Et entrez la commande Ă  construire.

 debuild -d 

Le montage va prendre très longtemps, cela m'a pris en moyenne 2 à 4 heures. Dépend de la vitesse de l'ordinateur. À la fin de l'assemblage, vous verrez une erreur de signature de package. C'est normal - ignorez l'erreur.

Allez maintenant dans le dossier Build.

 cd ~/build 

Et installez Squid.

 dpkg -i squid*.deb 

Exécutez immédiatement une erreur sur les dépendances non satisfaites et entrez la commande

 apt-get install -f 

Après l'installation, nous marquons les packages afin qu'ils ne soient pas écrasés après la mise à jour du système.

 apt-mark hold squid apt-mark hold squid-common apt-mark hold squidclient 

3.2.2. Configuration de Squid et du filtrage

Donc, Squid est installé, il reste à le configurer pour nos besoins.

Tous les paramètres se trouvent dans le fichier /etc/squid/squid.conf . Il contient de nombreux commentaires et à première vue il semble très compliqué, mais en fait il n'y a rien de super compliqué. Pour commencer, nous allons le nettoyer des commentaires en copiant d'abord l'original, si vous voulez soudainement l'étudier plus en détail. Pour plus de commodité, nous allons directement dans le dossier avec Squid.

 cd /etc/squid cp squid.conf squid.conf.backup cat squid.conf.backup | egrep "^[^#]" > squid.conf 

Ouvrez maintenant squid.conf

 nano squid.conf 

Comme vous pouvez le voir, il a supprimé les commentaires et a cessé d'être aussi volumineux qu'il semblait.
Sous le spoiler, je posterai mon fichier avec des paramètres qui fonctionnent parfaitement, et ci-dessous je décrirai en blocs quoi et comment.

Configuration de Squid.conf
 acl localnet src 192.168.0.0/24 acl worktime time 08:00-15:00 acl SSL_ports port 443 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 CONNECT method CONNECT acl blacklist url_regex -i "/etc/squid/blacklist" acl whitelist url_regex -i "/etc/squid/whitelist" http_access allow localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow CONNECT http_access deny blacklist http_access allow whitelist http_access deny all worktime http_access allow all http_port 3128 http_port 3129 intercept https_port 3130 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid.pem always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER acl blacklist_ssl ssl::server_name_regex -i "/etc/squid/blacklist_ssl" acl whitelist_ssl ssl::server_name_regex -i "/etc/squid/whitelist_ssl" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blacklist_ssl ssl_bump splice whitelist_ssl ssl_bump terminate all worktime ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB # cache_mem 512 MB maximum_object_size_in_memory 512 KB memory_replacement_policy lru cache_dir aufs /var/spool/squid 2048 16 256 # access_log daemon:/var/log/squid/access.log squid logfile_rotate 1 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 


Le premier bloc est le suivant.

 acl localnet src 192.168.0.0/24 acl worktime time 08:00-15:00 acl SSL_ports port 443 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 CONNECT method CONNECT 

Il est responsable des paramètres standard acl. Dans celui-ci, dans localnet, nous changeons le réseau local en notre propre, et nous ajoutons également une acl de temps de travail (facultatif). J'ai ajouté du temps de travail vu que les professeurs viennent souvent me plaindre de ne rien trouver, tout est inaccessible. Bien sûr, je suis content que tout fonctionne comme il se doit, mais, franchement, je suis fatigué d'écouter ça. Maintenant, je signale leur affirmation qu'après 15h00, le filtrage est désactivé et qu'ils peuvent librement (presque) trouver les informations dont ils ont besoin. Vous pouvez ajouter votre temps ou laisser filtrer 24 heures sur 24 sans ajouter cet acl.

Le deuxième bloc définit les listes de sites autorisés et interdits pour HTTP et se présente comme suit.

 acl blacklist url_regex -i "/etc/squid/blacklist" acl whitelist url_regex -i "/etc/squid/whitelist" 

Nous ajouterons des listes de sites autorisés et interdits plus tard, et ils seront placés dans des fichiers spécifiés dans acl.

Le troisième bloc détermine les paramètres d'accès via HTTP et ressemble à ceci

 http_access allow localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow CONNECT http_access deny blacklist http_access allow whitelist http_access deny all worktime http_access allow all 

Ici, l'élément http_access allow CONNECT est requis, car sans lui Squid ne laisserait personne sur Internet. Viennent ensuite les règles sur les listes noires et blanches. Les paramètres deny et allow refusent et autorisent l' accès, respectivement. Après eux vient la règle d'interdire complètement tout le trafic HTTP pendant les heures ouvrables. Si vous n'avez pas défini d'heures de travail, supprimez le temps de travail et l'interdiction sera définitive. Un point important est l'ordre des règles, car Squid les lit de haut en bas
Le quatrième bloc définit les paramètres de port pour Squid.

 http_port 3128 http_port 3129 intercept https_port 3130 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squid.pem 

Le premier paramètre est nécessaire pour que l'erreur «ERREUR: aucun port proxy direct configuré» n'apparaisse pas à l'infini dans les journaux. Il remplit le journal et, par conséquent, la mémoire. Une erreur courante, mais pour une raison quelconque, dans notre segment ru, je n'ai pas trouvé de solution, les forums étrangers ont aidé. Le deuxième paramètre définit le port du protocole HTTP. Intercepter signifie la transparence du proxy, c'est-à-dire qu'il ne sera pas nécessaire de prescrire des paramètres sur chaque ordinateur.
Le troisième paramètre définit le port HTTPS et ses options. Ceci est une longue file d'attente. Le fichier squid.pem est notre certificat, que nous créerons plus tard.

Le cinquième bloc définit les paramètres de la connexion SSL avec Squid. En particulier, il indique que tout le trafic doit être dirigé immédiatement vers Internet, sans utiliser de caches plus élevés, et les deux derniers autorisent les connexions même avec des erreurs de vérification de certificat, car la décision de visiter une telle ressource doit être prise par l'utilisateur, pas par le serveur. Cela ressemble à ceci.

 always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER 

Le sixième bloc définit les paramètres acl des listes «noire» et «blanche», qui seront créées ultérieurement, ainsi que la profondeur d'interception du trafic HTTPS.

 acl blacklist_ssl ssl::server_name_regex -i "/etc/squid/blacklist_ssl" acl whitelist_ssl ssl::server_name_regex -i "/etc/squid/whitelist_ssl" acl step1 at_step SslBump1 

Le septième bloc détermine les paramètres d'accès à l'aide du protocole HTTPS. Ici, l'interdiction et l'autorisation sont déjà responsables de la résiliation et de l' épissage, respectivement. Encore une fois, n'oubliez pas de supprimer le temps de travail si vous n'avez pas de temps de travail spécifié.

 ssl_bump peek step1 ssl_bump terminate blacklist_ssl ssl_bump splice whitelist_ssl ssl_bump terminate all worktime ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB 

Le huitième bloc définit le cache et le journal de notre Squid. Ici, il convient de noter uniquement le paramètre logfile_rotate , qui indique le nombre de jours pendant lesquels le journal est stocké.

 # cache_mem 512 MB maximum_object_size_in_memory 512 KB memory_replacement_policy lru cache_dir aufs /var/spool/squid 2048 16 256 # access_log daemon:/var/log/squid/access.log squid logfile_rotate 1 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 

Ceci termine la configuration de squid.conf. Nous enregistrons le fichier et procédons à la création du certificat et des listes.

Allons dans le dossier avec Squid

 cd /etc/squid/ 

Et entrez la commande suivante pour créer le certificat

 openssl req -new -newkey rsa:1024 -days 36500 -nodes -x509 -keyout squid.pem -out squid.pem 

Ensuite, vous devrez saisir les données du certificat. Le certificat est valable 100 ans pour l'oublier longtemps. Il n'est nécessaire que pour le proxy.

Créez maintenant nos fichiers de liste.

 touch blacklist touch whitelist cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Les sites sont répertoriés sous forme d'expressions régulières. Par exemple, pour déverrouiller mail.ru, ouvrez la liste blanche

 nano whitelist 

et ajoutez-y l'expression suivante.

 mail\.ru 

Maintenant, bloquez Games.Mail.ru. Ouvrons notre liste noire

 nano blacklist 

et y Ă©crire l'expression suivante

 games\.mail\.ru 

Étant donné que, en règle générale, un bloqueur de liste noire est au-dessus de notre liste blanche, lorsque vous passez à mail.ru, le site s'ouvrira comme prévu (sauf pour les images, mais plus à ce sujet plus tard), et si vous essayez de passer aux jeux, Squid nous ne lâchera pas.

Certains sites ont de nombreux sous-domaines, sous-domaines, etc. Comme, par exemple, mail.ru stocke ses images sur imgsmail.ru. En ce qui concerne les autres sites similaires, vous devez ouvrir le site souhaité dans n'importe quel navigateur (j'utilise Chrome) et, par la suite, les outils de développement (dans Chrome, ils sont appelés en appuyant sur F12).



Accédez à l'onglet Sources et voyez de quelles autres ressources le site charge les informations.

Après avoir ajouté des sites, copiez-les dans les listes pour HTTPS.

 cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Astuce de remplissage de liste
Créez un fichier texte sur votre ordinateur, recherchez et copiez la liste des sites autorisés, ajoutez-le au vôtre. Ensuite, dans un cahier ordinaire, remplacez automatiquement le point par un point barre oblique (\.) Et supprimez celui inutile avec le même remplacement automatique (www, http, le caractère "/", etc.). Ensuite, un tel fichier, à l'aide du terminal, peut être immédiatement copié sur les feuilles du serveur.

VĂ©rifiez maintenant la configuration.

 squid -k check 

Si tout va bien, arrĂŞtez Squid.

 /etc/init.d/squid stop 

Reconstruire le cache

 squid -z 

Et lancez Squid Ă  nouveau

 /etc/init.d/squid start 

Après toute modification des listes ou de la configuration de Squid, il doit être rechargé avec la commande

 /etc/init.d/squid restart 

Vous pouvez également modifier la page de restriction d'accès (fonctionne uniquement sur HTTP) sous le chemin / usr / share / squid / errors / ~ Russian-1251 . Recherchez dans le dossier le fichier ERR_ACCESS_DENIED et modifiez-le. La syntaxe du fichier est HTML.

3.3. Surveillance de l'Ă©tat du serveur et configuration du pare-feu


Pour surveiller l'état de notre serveur, installez l'utilitaire Webmin , à l'aide duquel nous configurons notre pare-feu. De plus, grâce à lui, vous pouvez surveiller l'état du CPU, de la RAM, etc., mettre à jour des packages, ajouter et configurer des composants, et bien plus encore. Il a son propre terminal, bien que maladroit. L'utilitaire fonctionne via n'importe quel navigateur, vous pouvez donc vous connecter à notre serveur depuis n'importe quel ordinateur du réseau, ce qui est assez pratique, mais pas sûr. Si vous le souhaitez, la connexion peut être limitée uniquement à des adresses IP individuelles dans le "Contrôle d'accès IP" dans Webmin lui-même.

Avant de démarrer l'installation, ajoutez le référentiel Webmin. Ouvrez sources.list.

 nano /etc/apt/sources.list 

Et ajoutez la ligne ci-dessous.

 deb http://download.webmin.com/download/repository sarge contrib 

Installez maintenant la clé GPG avec laquelle les packages sont signés dans le référentiel Webmin

 cd /root wget http://www.webmin.com/jcameron-key.asc apt-key add jcameron-key.asc 

Ensuite, nous mettons Ă  jour la liste des packages et installons l'utilitaire

 apt-get update apt-get install webmin 

Vous pouvez vous connecter au serveur dans n'importe quel navigateur en entrant dans la barre d'adresse

 IP__:10000 

Par défaut, Webmin se connecte via SSL et la plupart des navigateurs donnent une erreur de certificat non fiable. Afin de ne pas choisir la confiance à chaque fois, désactivez SSL. Pour ce faire, ouvrez le fichier /etc/webmin/miniserv.conf

 nano /etc/webmin/miniserv.conf 

Trouvez-y la chaîne ssl = 1 et remplacez-la par ssl = 0 . Dans le même fichier, vous pouvez modifier le port de connexion. Par défaut, c'est 10000. Vous pouvez en mettre un gratuitement.

Une fois connecté à Webmin, accédez à Webmin -> Configuration de Webmin et changez la langue en russe. Allez ensuite dans Réseau -> Pare-feu . Par défaut, notre pare-feu est propre. Nous allons tout en bas et en face " Activer au démarrage", sélectionnez "Oui" . Cliquez sur «Appliquer la configuration» . Maintenant, les paramètres de notre pare-feu sont spécifiés dans le fichier /etc/webmin/firewall/iptables.save et sont lancés avec le système. S'il n'y a pas un tel fichier, regardez ce qui est écrit dans la ligne «Fichier avec règles» sur l'onglet Pare-feu de Webmin. Ouvrons-le dans le terminal.

 nano /etc/webmin/firewall/iptables.save 

Nous allons au bloc * nat et à la fin avant COMMIT ajoutons les règles suivantes.

 -A PREROUTING -p tcp -m tcp -i _ --dport 80 -j DNAT --to-destination ip_:3129 -A PREROUTING -p tcp -m tcp -i _ --dport 443 -j REDIRECT --to-ports 3130 

Ces règles dirigent le trafic vers les ports 80 (HTTP) et 443 (HTTPS) du serveur vers les ports de notre Squid. Ici, j'ai présenté deux variantes des règles avec DNAT et REDIRECT. Vous pouvez utiliser les deux, ou prendre une option en mettant les ports appropriés.

Configurer FIrewall pour une configuration réseau alternative
Cette option convient si vous avez utilisé la configuration de réseau alternative décrite ci-dessus.
Tout d'abord, créez un fichier avec les règles de notre pare-feu et donnez-lui le droit de s'exécuter.
 touch /etc/nat chmod +x /etc/nat 

L'ouvrir
 nano /etc/nat 

Et ajoutez le contenu suivant
 #!/bin/sh #Firewall iptables -t nat -A PREROUTING -p tcp -m tcp -i _ --dport 80 -j DNAT --to-destination ip_:3129 iptables -t nat -A PREROUTING -p tcp -m tcp -i _ --dport 443 -j REDIRECT --to-ports 3130 

Comme dans le cas de Webmin, j'ai présenté deux variantes des règles avec DNAT et REDIRECT. Vous pouvez utiliser les deux, ou prendre une option en mettant les ports appropriés.
Ajoutez maintenant notre fichier au téléchargement immédiatement après le démarrage du réseau. Ouvrez le fichier des paramètres réseau
 nano /etc/network/interfaces 

Et ajoutez la ligne au bas du fichier
 post-up /etc/nat 

PS: le plus de cette option est que vous pouvez ajouter vos propres règles à l'avenir en éditant simplement le fichier / etc / nat. Webmin est un peu plus compliqué.

Ceci termine la configuration du serveur. Redémarrez-le.

 reboot 

Et passons Ă  la configuration du routeur MikroTik.

3.4. Configuration d'un routeur MikroTik pour rediriger le trafic vers le proxy


Nous supposons que vous avez déjà téléchargé l'utilitaire WinBox pour le contrôle à distance, Internet et le réseau local sont configurés, le pare-feu sur le routeur est propre. vous connaissez le nom de l'interface LAN (vous pouvez le voir dans IP - DHCP Server - DHCP ).

a) Allez dans WinBox, allez dans IP - DHCP Server - Leases . Dans la liste, nous recherchons les ordinateurs IP pour lesquels le filtrage ne fonctionnera pas (directeur, gestion), faites un clic droit dessus et sélectionnez Rendre statique dans le menu. À côté d'eux, la lettre "D" devrait disparaître, ce qui signifie dynamique. Désormais, ces adresses seront immédiatement attribuées statiquement à ces ordinateurs, quelle que soit la durée du bail, par adresse MAC. Si l'ordinateur portable est utilisé via Wi-Fi et câble, vous devez sélectionner Rendre statique sur les deux adresses MAC.

b) Ensuite, allez dans IP - Pare-feu - Listes d'adresses et cliquez sur le signe plus bleu "+" . Dans le champ Nom , spécifiez le nom de notre groupe d'adresses lumineuses non filtrées, par exemple, "Administrateurs". Dans le champ Adresse , spécifiez une adresse IP parmi celles auxquelles une adresse statique a été attribuée. Nous répétons cela pour chaque adresse, en sélectionnant notre groupe dans le champ Nom avec une flèche.

c) Allez dans l'onglet Mangle du même IP - Firewall et cliquez sur "+" . Une fenêtre à onglets s'ouvre. Dans l'onglet Général , remplissez les champs suivants:

 Chain - Prerouting Src. Address - __proxy Protocol - 6 (tcp) Dst. Port - 80 In. Interface - __ 

Dans l'onglet Action , vérifiez la valeur Accepter et cliquez sur OK.

Répétez le processus, mais dans le champ Dst. Le port a défini la valeur sur 443 .

d) Cliquez à nouveau sur "+" et dans l'onglet Général, nous remplissons à nouveau les champs suivants:

 Chain - Prerouting Protocol - 6 (tcp) Dst. Port - 80 In. Interface - __ 

Accédez à l'onglet Avancé et dans le champ Src. Liste d'adresses sélectionnez notre liste d'adresses de gestion " Admins ". Assurez-vous de cliquer sur la case apparue à côté de la liste. Un point d'exclamation «!» Apparaîtra . , ce qui signifie NON logique ou NÉGATIF.

Accédez à l'onglet Action et remplissez les champs:

 Action - mark routing New Routing Mark - to_proxy Passthrough -   

Cliquez sur OK et effectuez les mêmes actions, mais dans le champ Dst. Port spécifiez la valeur 443 .

e) Enfin, ajoutez la dernière règle. Cliquez sur le signe plus et remplissez les champs suivants sous l'onglet Général :

 Chain - Prerouting In. Interface - __ Routing Mark - to_proxy 

Par conséquent, ce qui suit devrait se produire avec vos paramètres. L'ordre est important!



f) Nous allons dans IP - Routes et nous appuyons sur "+". Remplissez les champs suivants:

 Dst. Address - 0.0.0.0/0 Gateway - __proxy Routing Mark - to_proxy 

Cliquez sur OK et c'est tout. Avec le serveur allumé, tout le trafic HTTP et HTTPS passera par notre Squid.

3.5. Configuration alternative pour MikroTik et autres routeurs


Cette option convient à la fois au routeur MikroTik et à tout autre, même le plus simple (sauf pour les pièces du fournisseur loué, vous savez vous-même quoi). Dans ce cas, nous implémentons le partage de l'accès Internet non pas sur le routeur, mais sur Squid lui-même. Commençons donc.
a) Nous supposerons que vous avez atteint ce point en effectuant toutes les étapes ci-dessus, y compris la configuration de la redirection vers Proxy dans MikroTik. Pour un fonctionnement sans problème de l'option décrite, nous devons annuler le sous-paragraphe e) du paragraphe 3.4 de cet article. Vous pouvez annuler l'intégralité du point 3.4 (en laissant, peut-être, le sous-paragraphe a) afin que nos IP ne changent pas), mais cela est facultatif - il est important pour nous d'annuler le routage lui-même. Pour ce faire, accédez à IP - Routes , recherchez notre itinéraire, sélectionnez-le et cliquez sur la croix rouge (pas un signe plus, mais la croix à côté de la coche). L'itinéraire devient gris => il est désactivé. Le filtrage a également été désactivé, tous les clients se connectent désormais à Internet via un routeur.

b) Maintenant, allez sur notre serveur et allez dans le dossier avec Squid
 cd /etc/squid/ 

Ouvrez le fichier de configuration
 nano squid.conf 

Et nous y ajoutons des blocs:
dans le premier bloc immédiatement après la ligne avec acl localnet ...
 acl admins src "/etc/squid/admins-ip" # IP   acl students src "/etc/squid/students-ip" # IP   

Nous n'avons pas besoin d'une liste avec les ordinateurs des enseignants, car il est entendu que tout le monde est enseignant. Mais vous pouvez l'ajouter vous-même avec les règles correspondantes dans d'autres blocs.
Dans le deuxième bloc
 acl whitelist-stud url_regex -i "/etc/squid/whitelist-stud" #      

Dans le troisième bloc après http_access, refuser la liste noire
 http_access allow admins #      http_access allow students whitelist-stud #       http_access deny students #        

De plus, le bloc reste inchangé, puisque les enseignants (tous les autres IP) suivent, filtrant par leur liste blanche et pendant les heures de travail (si indiqué). Vous pouvez également laisser le groupe admins contourner la liste noire en définissant la règle d'autorisation au-dessus de celle d'interdiction, ou ajouter des adresses IP distinctes (par exemple, la vôtre) à un acl distinct et le mettre dans les règles au-dessus de la liste noire.
Les quatrième et cinquième blocs sont inchangés.
Dans le sixième bloc, ajoutez
 acl whitelist-stud_ssl ssl::server_name_regex -i "/etc/squid/whitelist-stud_ssl" 

Dans le septième bloc, ajoutez après la fin de ssl_bump blacklist_ssl
 ssl_bump splice admins ssl_bump splice students whitelist-stud_ssl ssl_bump terminate students 

Le principe est le même que dans le troisième bloc.
Le reste est inchangé. Enregistrez et quittez

c) Créez maintenant nos listes d'adresses IP.
 touch admins-ip touch students-ip 

Et des listes blanches pour les Ă©tudiants.
 touch whitelist-stud cp whitelist-stud whitelist-stud_ssl 

Ajoutez les adresses IP et les sites requis aux listes appropriées. Dans la liste des sites des étudiants, vous pouvez copier la liste des enseignants en supprimant les sites dont les étudiants n'ont pas besoin. La copie des fichiers sous Linux se fait par la commande
 cp <    > <    > 

Redémarrez Squid
 /etc/init.d/squid restart 


d) Nous sommes arrivés à la chose la plus importante, à savoir comment amener les clients à se connecter en ligne via notre proxy. Nous devons changer la passerelle de notre serveur DHCP de l'adresse du routeur à l'adresse de notre serveur. Bien sûr, pour cela, l'adresse du serveur doit être statique ou liée au MAC.
Dans MikroTik:
Allez sur IP - Serveur DHCP - Réseau et double-cliquez sur notre réseau. Dans le champ Passerelle, remplacez l'adresse du routeur par l'adresse du serveur proxy. Cliquez sur OK et c'est tout. Vous pouvez redémarrer le routeur pour que les paramètres soient correctement mis à jour pour tous les clients actifs. Après cela, les clients sont susceptibles de changer le type de réseau en public (s'il était privé).
Dans un routeur normal:
regardez dans le manuel de votre routeur où changer la passerelle du serveur DHCP, mais je dirai ce qu'il y a dans ses paramètres :)

Conclusion: grâce à cette solution alternative, nous avons pu affiner l'accès par IP et listes, et obtenir les adresses IP normales des clients dans les journaux Squid. Si vous avez besoin que certains clients passent en ligne en contournant le proxy via un routeur, lisez le spoiler.
Internet contournant le proxy
, - Squid , , ,


4. Conclusion


Donc, pour résumer tout ce qui précède. Nous avons réussi à installer et configurer Linux Ubuntu 18.04 LTS à partir de zéro, construire et installer Squid avec prise en charge HTTPS, configurer le filtrage des listes blanches, intégrer le serveur proxy dans notre réseau sans avoir besoin d'installer un serveur DHCP supplémentaire.

5. Liste des sources


Lors de la création de l'article, divers documents ont été utilisés à partir des sites du blog technique d'Interface LLC et des spécialistes de la sécurité Web - Filtre Web pour votre réseau , ainsi que des connaissances et de l'expérience personnelles.
Lors de l'édition et du complément de l'article, les utilisateurs suivants ont beaucoup aidé: Kanlas , PetRiot , Barsook . Un grand merci à eux pour leur aide et leur aide.

6. Notes de l'auteur


  1. Tout travail avec le serveur doit être effectué en mode superutilisateur en ajoutant sudo avant la commande, ou en entrant la commande sudo -s une fois .
  2. Squid \ , , , . .
  3. , . , 1000 .
  4. , IP- Squid. Squid IP- — Mikrotik. , DHCP , . , , , IP . — Barsook
  5. Pour que Squid fonctionne avec un grand nombre de clients (plus de 50), un minimum de 1 Go de RAM est requis. Plus préférablement, car Squid mange de la mémoire. Vous pouvez vérifier l'état de la mémoire en entrant la commande supérieure .
  6. Je recommande d'utiliser les deux options pour configurer le routeur, car si vous spécifiez explicitement une passerelle différente dans les paramètres réseau (le routeur lui-même), vous pouvez contourner le verrou.


UPD1: ajout d'une configuration de réseau alternative et Firewall
UPD2: ajout d'une option de configuration de routeur alternative, où les problèmes d'affichage des adresses dans les journaux Squid ont été corrigés.
UPD3: ajout d'un correctif dans 3.1 - permettant aux paquets de passer par le serveur, qu'il a oublié d'ajouter initialement. Sinon, Internet ne fonctionne pas. Merci à Dmitry1986 d' avoir testé l'article.

Source: https://habr.com/ru/post/fr473584/


All Articles