Inhaltsfilterung in der Schule basierend auf Ubuntu 18.04 und transparentem Squid, mit Integration in das Netzwerk auf MikroTik und nicht nur



1. Einleitung


Das Thema Inhaltsfilterung in Schulen ist ziemlich abgedroschen und voller Informationen, aber es ist bereits ziemlich veraltet, da viele Websites auf das sichere HTTPS-Protokoll umgestellt werden, mit dem die meisten vorgeschlagenen Lösungen nicht funktionieren. Aus diesem Grund habe ich beschlossen, den vollständigsten Artikel von A bis Z zu schreiben und alle Informationen, die ich in den Google-Erweiterungen gefunden habe, zusammen zu sammeln. Der Artikel richtet sich an Grundkenntnisse im Bereich Verwaltung und ist für Informatiklehrer geeignet.

2. Leistungsbeschreibung


Gegeben: 436-FZ und eine Schule, in der viele Computer über einen MikroTik-Router oder einen anderen vernetzt und mit dem Internet verbunden sind.

Ziel: Inhaltsfilterung von HTTP und HTTPS nach Whitelist für alle außer Ihrer Geliebten und der Schulleitung.


3. Problemlösung


Es wurde ein nicht verwendeter Desktop-Computer mit einem Dual-Core-Intel-Ohm, 1 GB RAM und harten 80 GB gefunden.
Um dies zu lösen, wird Folgendes durchgeführt:

  1. Linux Ubuntu Server 18.04 LTS installiert
  2. Transparent Proxy Squid wird auf dem Server installiert und konfiguriert und aus Quellcodes mit HTTPS-Unterstützung kompiliert.
  3. Integration des Servers in das Subnetz durch Umleiten von Anforderungen an Proxy oder eine alternative Option (ganz am Ende)

Fangen wir an.

3.1. Installieren und konfigurieren Sie Ubuntu 18.04


Der Installationsvorgang ist einfach. Laden Sie die Distribution von Ubuntu Server 18.04 von der offiziellen Website herunter. Ich empfehle das Herunterladen mit dem alten Installationsprogramm, da das neue, persönlich von mir, während der Installation unendlich heruntergeladen wurde. Wir schreiben das Bild auf bequeme Weise auf ein USB-Flash-Laufwerk. Für die Aufnahme auf einem USB-Stick empfehle ich die Verwendung von Rufus und wähle zu Beginn der Aufnahme „DD-Bild aufnehmen“. Installieren Sie anschließend das System gemäß den Informationen auf dem Bildschirm. Wir beschäftigen uns nur mit der Auswahl der Komponenten, bei denen Sie sofort OpenSSH auswählen können und das war's. Wir brauchen nicht viel, aber wir müssen installieren, was wir brauchen.

Also ist Ubuntu installiert. Wenn Sie über DHCP verfügen, ist das Netzwerk bereits konfiguriert. Wir werden in den Superuser-Modus wechseln, damit wir den Befehlen nicht jedes Mal sudo hinzufügen.

sudo -s 

Geben Sie Ihr Passwort ein und aktualisieren Sie das System.

 apt-get update apt-get upgrade 

Installieren Sie einen Texteditor und einen Dateimanager.

 apt-get install nano mc 

Um die Datei in Nano zu speichern, müssen Sie Strg + O gefolgt von Y drücken. Beenden Sie den Editor, indem Sie Strg + X drücken. Sie können die Datei unmittelbar vor dem Beenden speichern, indem Sie Strg + X gefolgt von Y drücken.
Geben Sie mc ein, um den Dateimanager zu öffnen. Ein typisches NortonCommander DOS oder Windows TotalCommander / FAR wird mit zwei Bedienfeldern geöffnet. Obwohl ich es gewohnt bin, mit der Konsole zu arbeiten, hilft der Dateimanager manchmal auch, beispielsweise die gewünschte Datei schneller zu finden.

Wenn Sie kein DHCP haben oder eine separate IP-Adresse für Ihren Server wünschen, wie ich es wollte, fahren wir mit der Konfiguration fort.

Konfigurieren Sie die statische IP-Adresse
Im Gegensatz zu früheren Versionen von Ubuntu wird das Netzwerk in der neuen Version 18.04 nicht mehr in den üblichen / etc / network / interfaces konfiguriert , sondern über netplan in der Datei /etc/netplan/*.yaml . Die Datei kann anders benannt sein, ist aber nur dort. / Etc / network / interfaces selbst schreibt uns folgendes:



Wenn Sie ein Upgrade von einer Version durchführen möchten, die älter als 18.04 ist, bleiben die Netzwerkeinstellungen unverändert. Netplan ist nur für eine Neuinstallation vom 18.04. Relevant.

Kommen wir zum Einrichten des Netzwerks.

Schauen wir uns zunächst den Namen der dem Betriebssystem zugewiesenen Netzwerkschnittstelle an und merken uns diesen.

 ifconfig 

Öffnen Sie nun die Einstellungsdatei.

 nano /etc/netplan/*.yaml 

Es sollte bereits eine DHCP-Einstellung haben. Bringen wir die Datei in das folgende Formular.

 # 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] 

Geben Sie Ihre Schnittstelle, Adresse und Ihr Gateway ein. DNS empfiehlt, diese zu verlassen - Yandex.DNS Kinder werden als zusätzlicher Schutz dienen. Das gleiche DNS ist in meinem Router konfiguriert. In jedem Fall müssen Sie den DNS angeben, den der Router verteilt.

Hier müssen Sie auf Leerzeichen achten (nämlich Leerzeichen, keine Tabulatoren). Jede Art von Absatz ist vom vorherigen Leerzeichen getrennt. Wenn beispielsweise nach Nameservern die Adresszeile nicht durch ein Leerzeichen getrennt, sondern an der obigen Zeile ausgerichtet ist, gibt netplan beim Versuch, die Einstellungen anzuwenden, einen Fehler aus.

Übernehmen Sie die Einstellungen.

 netplan apply 

Starten Sie den Server für alle Fälle neu.

 reboot 


Außerdem fügte er eine alternative Netzwerkkonfigurationsoption für DHCP und statische IP hinzu, falls Netplan nicht passt.
Alternative Netzwerkeinrichtung
In Ubuntu 18.04 können Sie über / etc / network / interfaces zur bekannten Netzwerkkonfigurationsoption zurückkehren. Zu diesem Zweck gibt die Datei selbst an, dass Sie das Dienstprogramm ifupdown installieren müssen . Installieren Sie es:
 apt-get install ifupdown 

Öffnen Sie nun die Grundeinstellungsdatei in netplan
 nano /etc/netplan/*.yaml 

und kommentieren Sie alle Inhalte aus, damit es keine Konflikte gibt.
Öffnen Sie als Nächstes die Netzwerkeinstellungsdatei
 nano /etc/network/interfaces 

Und fügen Sie hinzu:
für statische IP
 auto ___ iface ___ inet static address IP- netmask  gateway  dns-nameservers 77.88.8.7 77.88.8.3 

für dynamisch (DHCP)
 auto ___ iface ___ inet dhcp 

Starten Sie den Server neu
 reboot 

Wenn Sie diese Option zum Konfigurieren des Netzwerks verwenden, können Sie in den Firewall-Einstellungen Webmin ganz deaktivieren und die Konfigurationsoption unter dem Spoiler verwenden (obwohl die Option mit Webmin auch funktioniert).


Jetzt müssen Sie die Übertragung von Paketen durch unseren Server aktivieren. Öffnen Sie die Datei /etc/sysctl.conf
 nano /etc/sysctl.conf 

Wir suchen darin nach dem String net.ipv4.ip_forward = 1 und kommentieren ihn aus. Wenn der Wert 0 ist , wechseln Sie zu 1 .
Geben Sie den Befehl ein, um die Einstellung zu übernehmen
 sysctl -p /etc/sysctl.conf 


Nach dem Einrichten des Netzwerks empfehle ich, dass Sie direkt zum Terminal gehen und dort weiterarbeiten. Wenn Sie dazu während der Installationsphase nicht OpenSSH ausgewählt haben, installieren Sie es.

 apt-get install ssh 

Standardmäßig ist SSH bereits für die Benutzer- / Kennwortanmeldung an Port 22 konfiguriert. Sie können es jedoch selbst konfigurieren, z. B. über einen Autorisierungsschlüssel und einen anderen Port, um den Server vor Angriffen von außen zu schützen. Wie das geht, ist voller Informationen im Internet.

Als Terminal verwende ich XShell. Sie können die von Ihnen bevorzugte verwenden.

Wir benötigen keinen DHCP-Server und keine zweite Netzwerkkarte, da wir Benutzeranforderungen über den Router selbst an unseren Proxy umleiten.

Der Grundstein wird gelegt. Fahren wir nun mit der Installation und Konfiguration von Squid fort.

3.2. Installieren und Konfigurieren von Squid mit HTTPS-Unterstützung und Listenfilterung


3.2.1. Squid erstellen und installieren

Da es in den Repositorys kein fertiges Squid-Paket mit SSL-Unterstützung gibt, müssen Sie es manuell aus der Quelle zusammenstellen. Öffnen Sie zunächst die Datei mit den Repositorys.

 nano /etc/apt/sources.list 

Darin kommentieren wir (am Anfang # löschen) die Zeilen, die mit deb-src beginnen .

Danach werden wir die Pakete aktualisieren.

 apt-get update 

Installieren Sie als Nächstes die Montagewerkzeuge.

 apt-get install fakeroot build-essential devscripts 

Und fügen Sie alle notwendigen Pakete für die Montage hinzu.

 apt-get build-dep squid3 

Installieren Sie die Bibliothek für die SSL-Unterstützung.

 apt-get install libssl1.0-dev 

Gehen wir zum Basisordner und erstellen einen Ordner für die Assembly, wobei Sie sofort die erforderlichen Rechte dafür festlegen.

 cd ~ mkdir build chown _apt:root build 

Gehen Sie zum erstellten Ordner und laden Sie die Squid-Quellen herunter.

 cd build apt-get source squid3 

Im Build-Ordner wird ein Ordner mit dem Namen squid3 und der Versionsnummer angezeigt. Unter Ubuntu 18.04.3 ist es 3.5.27. Lass uns darauf eingehen.

 cd squid3-3.5.27 

Vor dem Zusammenbau müssen Sie Optionen angeben. Öffnen Sie die Datei mit ihnen.

 nano debian/rules 

Wir suchen nach einer Liste von Optionen, wie auf dem Bild


Fügen Sie die folgenden Optionen hinzu.

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

Bitte beachten Sie, dass dem Bild bereits Optionen hinzugefügt wurden und das Zeichen "\" nach jeder Zeile in den Optionen mit Ausnahme der letzten Zeile angezeigt werden sollte.

Damit ist alles montagefertig. Fahren wir nun mit dem Squid-Quellordner fort, obwohl Sie sich bereits darin befinden sollten.

 cd ~/build/squid3-3.5.27 

Und geben Sie den Befehl zum Erstellen ein.

 debuild -d 

Die Montage wird sehr lange dauern, ich habe durchschnittlich 2 bis 4 Stunden gebraucht. Hängt von der Geschwindigkeit des Computers ab. Am Ende der Assembly wird ein Paketsignaturfehler angezeigt. Dies ist normal - ignorieren Sie den Fehler.

Gehen Sie nun zum Build-Ordner.

 cd ~/build 

Und installiere Squid.

 dpkg -i squid*.deb 

Führen Sie sofort einen Fehler über nicht erfüllte Abhängigkeiten aus und geben Sie den Befehl ein

 apt-get install -f 

Nach der Installation markieren wir die Pakete so, dass sie nach der Aktualisierung des Systems nicht überschrieben werden.

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

3.2.2. Tintenfisch konfigurieren und filtern

Also, Squid ist installiert, es bleibt, um es für unsere Bedürfnisse zu konfigurieren.

Alle Einstellungen befinden sich in der Datei /etc/squid/squid.conf . Es enthält viele Kommentare und auf den ersten Blick scheint es sehr kompliziert zu sein, aber tatsächlich ist nichts sehr kompliziertes daran. Zunächst werden wir Kommentare entfernen, indem wir zuerst das Original kopieren, wenn Sie es plötzlich genauer untersuchen möchten. Der Einfachheit halber gehen wir mit Squid direkt zum Ordner.

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

Öffnen Sie jetzt squid.conf

 nano squid.conf 

Wie Sie sehen können, hat er sich von Kommentaren befreit und ist nicht mehr so ​​sperrig, wie er schien.
Unter dem Spoiler werde ich meine Datei mit Einstellungen veröffentlichen, die einwandfrei funktionieren, und im Folgenden werde ich in Blöcken beschreiben, was und wie.

Squid.conf Konfiguration
 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 


Der erste Block ist wie folgt.

 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 

Er ist verantwortlich für Standard-ACL-Parameter. In localnet ändern wir das lokale Netzwerk in unser eigenes und fügen außerdem eine Arbeitszeit hinzu (optional). Ich fügte Arbeitszeit hinzu, da Lehrer oft zu mir kommen und sich beschweren, dass sie nichts finden können, alles unzugänglich ist. Natürlich bin ich froh, dass alles so funktioniert, wie es sollte, aber ehrlich gesagt bin ich es leid, mir das anzuhören. Jetzt melde ich ihre Behauptung, dass nach 15:00 Uhr die Filterung deaktiviert ist und sie die benötigten Informationen (fast) frei finden können. Sie können Ihre Zeit hinzufügen oder die Filterung rund um die Uhr verlassen, ohne diese ACL hinzuzufügen.

Der zweite Block definiert die Listen der zulässigen und verbotenen Sites für HTTP und sieht wie folgt aus.

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

Wir werden später Listen mit erlaubten und verbotenen Sites hinzufügen und sie werden in Dateien abgelegt, die in acl angegeben sind.

Der dritte Block bestimmt die Zugriffsparameter über HTTP und sieht so aus

 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 

Hier ist der Eintrag http_access allow CONNECT erforderlich, da Squid ohne ihn Squid niemanden ins Internet lassen würde. Als nächstes folgen die Regeln für die Schwarz-Weiß-Listen. Die Parameter Verweigern und Zulassen verweigern bzw. erlauben den Zugriff. Danach folgt die Regel, den gesamten HTTP-Verkehr während der Geschäftszeiten vollständig zu sperren. Wenn Sie keine Arbeitszeit festgelegt haben, löschen Sie die Arbeitszeit , und das Verbot ist dauerhaft. Ein wichtiger Punkt ist die Reihenfolge der Regeln, da Squid sie von oben nach unten liest
Der vierte Block definiert die Porteinstellungen für 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 

Der erste Parameter ist erforderlich, damit der Fehler "FEHLER: Keine Forward-Proxy-Ports konfiguriert" nicht unendlich in den Protokollen angezeigt wird. Es füllt das Protokoll und damit den Speicher. Ein häufiger Fehler, aber aus irgendeinem Grund habe ich in unserem Ru-Segment nicht gefunden, wie ich ihn beheben kann. Ausländische Foren haben geholfen. Der zweite Parameter definiert den HTTP-Protokollport. Abfangen bedeutet Proxy-Transparenz, dh es müssen nicht auf jedem Computer Einstellungen festgelegt werden.
Der dritte Parameter definiert den HTTPS-Port und seine Optionen. Dies ist eine lange Schlange. Die Datei squid.pem ist unser Zertifikat, das wir später erstellen werden.

Der fünfte Block definiert die Parameter der SSL-Verbindung mit Squid. Insbesondere weist er darauf hin, dass der gesamte Datenverkehr ohne Verwendung höherer Caches sofort ins Internet geleitet werden sollte und die letzten beiden Verbindungen auch bei Fehlern bei der Zertifikatsüberprüfung zulassen, da die Entscheidung zum Besuch einer solchen Ressource vom Benutzer und nicht vom Server getroffen werden muss. Es sieht so aus.

 always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER 

Der sechste Block legt die acl-Parameter der später erstellten Listen „schwarz“ und „weiß“ sowie die Tiefe des Abfangens des HTTPS-Verkehrs fest.

 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 

Der siebte Block bestimmt die Zugriffsparameter unter Verwendung des HTTPS-Protokolls. Hier sind das Verbot und die Erlaubnis bereits für das Beenden bzw. Spleißen verantwortlich. Vergessen Sie auch hier nicht, die Arbeitszeit zu entfernen, wenn Sie keine bestimmte Arbeitszeit haben.

 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 

Der achte Block legt den Cache und das Protokoll unseres Tintenfischs fest. Hier ist nur der Parameter logfile_rotate zu beachten , der die Anzahl der Tage angibt, an denen das Protokoll gespeichert ist.

 # 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 

Damit ist die Einrichtung von squid.conf abgeschlossen. Wir speichern die Datei und fahren mit der Erstellung des Zertifikats und der Listen fort.

Gehen wir mit Squid in den Ordner

 cd /etc/squid/ 

Geben Sie den folgenden Befehl ein, um das Zertifikat zu erstellen

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

Als nächstes müssen Sie die Zertifikatdaten eingeben. Das Zertifikat ist 100 Jahre gültig, um es für eine lange Zeit zu vergessen. Es wird nur für Proxy benötigt.

Erstellen Sie nun unsere Listendateien.

 touch blacklist touch whitelist cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Websites werden in Form von regulären Ausdrücken aufgelistet. Um beispielsweise mail.ru zu entsperren, öffnen Sie die Whitelist

 nano whitelist 

und fügen Sie den folgenden Ausdruck hinzu.

 mail\.ru 

Blockiere jetzt Games.Mail.ru. Öffnen wir unsere schwarze Liste

 nano blacklist 

und schreiben Sie den folgenden Ausdruck hinein

 games\.mail\.ru 

Da sich in der Regel ein Blacklist-Blocker über unserer Whitelist befindet, wird die Site beim Wechsel zu mail.ru wie erwartet geöffnet (mit Ausnahme von Bildern, aber dazu später mehr). Wenn Sie versuchen, zu Games zu wechseln, Squid us werde nicht loslassen.

Einige Websites haben viele Subdomains, Subdomains usw. Zum Beispiel speichert mail.ru seine Bilder auf imgsmail.ru. In Bezug auf andere ähnliche Websites müssen Sie die gewünschte Website in einem beliebigen Browser (ich verwende Chrome) und anschließend in den Entwicklertools (in Chrome werden sie durch Drücken von F12 aufgerufen) öffnen.



Gehen Sie zur Registerkarte Quellen und sehen Sie, von welchen anderen Ressourcen die Site Informationen lädt.

Kopieren Sie die Websites nach dem Hinzufügen in die Listen für HTTPS.

 cp whitelist whitelist_ssl cp blacklist blacklist_ssl 

Listenfüllungstipp
Erstellen Sie eine Nur-Text-Datei auf Ihrem Computer, suchen und kopieren Sie die Liste der zulässigen Websites und fügen Sie sie Ihrer hinzu. Ersetzen Sie dann in einem normalen Notizbuch den Punkt automatisch durch einen Schrägstrich (\.) Und löschen Sie den unnötigen Punkt mit demselben automatischen Ersatz (www, http, das Zeichen "/" usw.). Anschließend kann eine solche Datei mithilfe des Terminals sofort auf die Blätter auf dem Server kopiert werden.

Überprüfen Sie nun die Konfiguration.

 squid -k check 

Wenn alles in Ordnung ist, stoppen Sie Squid.

 /etc/init.d/squid stop 

Erstellen Sie den Cache neu

 squid -z 

Und wieder Squid laufen lassen

 /etc/init.d/squid start 

Nach Änderungen an Listen oder der Squid-Konfiguration muss diese mit dem Befehl neu geladen werden

 /etc/init.d/squid restart 

Sie können auch die Seite mit den Zugriffsbeschränkungen (funktioniert nur unter HTTP) unter dem Pfad / usr / share / squid / Errors / ~ Russian-1251 ändern. Suchen Sie im Ordner nach der Datei ERR_ACCESS_DENIED und bearbeiten Sie sie. Die Dateisyntax lautet HTML.

3.3. Überwachen des Serverstatus und Konfigurieren der Firewall


Installieren Sie das Webmin- Dienstprogramm, mit dessen Hilfe wir unsere Firewall konfigurieren, um den Status unseres Servers zu überwachen. Darüber hinaus können Sie damit den Status der CPU, des Arbeitsspeichers usw. überwachen, Pakete aktualisieren, Komponenten hinzufügen und konfigurieren und vieles mehr. Es hat ein eigenes Terminal, wenn auch ungeschickt. Das Dienstprogramm funktioniert über jeden Browser. Daher können Sie von jedem Computer im Netzwerk aus eine Verbindung zu unserem Server herstellen. Dies ist praktisch, aber nicht sicher. Falls gewünscht, kann die Verbindung nur auf einzelne IP-Adressen in der "IP-Zugriffskontrolle" in Webmin selbst beschränkt werden.

Fügen Sie vor dem Start der Installation das Webmin-Repository hinzu. Öffnen Sie die Datei source.list.

 nano /etc/apt/sources.list 

Und fügen Sie die folgende Zeile hinzu.

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

Installieren Sie nun den GPG-Schlüssel, mit dem Pakete im Webmin-Repository signiert sind

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

Als nächstes aktualisieren wir die Liste der Pakete und installieren das Dienstprogramm

 apt-get update apt-get install webmin 

Sie können in jedem Browser eine Verbindung zum Server herstellen, indem Sie die Adressleiste eingeben

 IP__:10000 

Standardmäßig stellt Webmin eine Verbindung über SSL her, und die meisten Browser geben einen nicht vertrauenswürdigen Zertifikatfehler aus. Deaktivieren Sie SSL, um nicht jedes Mal Vertrauen zu wählen. Öffnen Sie dazu die Datei /etc/webmin/miniserv.conf

 nano /etc/webmin/miniserv.conf 

Suchen Sie die Zeichenfolge ssl = 1 und ersetzen Sie sie durch ssl = 0 . In derselben Datei können Sie den Verbindungsport ändern. Standardmäßig ist es 10000. Sie können jeden freien setzen.

Nachdem Sie eine Verbindung zu Webmin hergestellt haben, gehen Sie zu Webmin -> Webmin-Konfiguration und wechseln Sie die Sprache zu Russisch. Gehen Sie dann zu Netzwerk -> Firewall . Standardmäßig ist unsere Firewall sauber. Wir gehen ganz nach unten und wählen gegenüber "Beim Booten aktivieren" "Ja" . Klicken Sie auf "Konfiguration anwenden". Jetzt werden die Einstellungen unserer Firewall in der Datei /etc/webmin/firewall/iptables.save angegeben und mit dem System gestartet. Wenn es keine solche Datei gibt, lesen Sie, was in der Zeile „Datei mit Regeln“ auf der Registerkarte Firewall in Webmin geschrieben steht. Öffnen wir es im Terminal.

 nano /etc/webmin/firewall/iptables.save 

Wir gehen zum * nat- Block und fügen am Ende vor COMMIT die folgenden Regeln hinzu.

 -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 

Diese Regeln leiten den Datenverkehr zu den Ports 80 (HTTP) und 443 (HTTPS) des Servers zu den Ports unseres Squid. Hier habe ich zwei Varianten der Regeln mit DNAT und REDIRECT vorgestellt. Sie können beide verwenden oder eine Option auswählen, indem Sie die entsprechenden Ports eingeben.

Konfigurieren Sie FIrewall für die alternative Netzwerkeinrichtung
Diese Option ist geeignet, wenn Sie das oben beschriebene alternative Netzwerk-Setup verwendet haben.
Erstellen Sie zunächst eine Datei mit den Regeln für unsere Firewall und geben Sie ihr das Recht zur Ausführung.
 touch /etc/nat chmod +x /etc/nat 

Öffne es
 nano /etc/nat 

Und fügen Sie den folgenden Inhalt hinzu
 #!/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 

Wie im Fall von Webmin habe ich zwei Varianten der Regeln mit DNAT und REDIRECT vorgestellt. Sie können beide verwenden oder eine Option auswählen, indem Sie die entsprechenden Ports eingeben.
Fügen Sie nun unsere Datei sofort nach dem Start des Netzwerks zum Download hinzu. Öffnen Sie die Netzwerkeinstellungsdatei
 nano /etc/network/interfaces 

Und fügen Sie die Zeile am Ende der Datei hinzu
 post-up /etc/nat 

PS: Das Plus dieser Option ist, dass Sie in Zukunft Ihre eigenen Regeln hinzufügen können, indem Sie einfach die Datei / etc / nat bearbeiten. Webmin ist etwas komplizierter.

Damit ist die Servereinrichtung abgeschlossen. Starten Sie es neu.

 reboot 

Fahren wir mit der Einrichtung des MikroTik-Routers fort.

3.4. Konfigurieren eines MikroTik-Routers zum Umleiten des Datenverkehrs an Proxy


Wir gehen davon aus, dass Sie das WinBox- Dienstprogramm zur Fernsteuerung bereits heruntergeladen haben, das Internet und das lokale Netzwerk konfiguriert sind und die Firewall auf dem Router sauber ist. Sie kennen den Namen der LAN-Schnittstelle (Sie können ihn in IP - DHCP Server - DHCP sehen ).

a) Gehen Sie zu WinBox, gehen Sie zu IP - DHCP Server - Leases . In der Liste suchen wir nach IP-Computern, für die die Filterung nicht funktioniert (Director, Management). Klicken Sie mit der rechten Maustaste darauf und wählen Sie im Menü die Option Statisch erstellen. Neben ihnen sollte der Buchstabe "D" verschwinden, was "dynamisch" bedeutet. Jetzt werden diese Adressen diesen Computern unabhängig von der Lease-Zeit sofort statisch anhand der MAC-Adresse zugewiesen. Wenn der Laptop über WLAN und Kabel verwendet wird, müssen Sie auf beiden MAC-Adressen die Option "Statisch erstellen" auswählen.

b) Gehen Sie als nächstes zu IP - Firewall - Adresslisten und klicken Sie auf das blaue Pluszeichen "+" . Geben Sie im Feld Name den Namen für unsere Gruppe von hellen, ungefilterten Adressen an, z. B. "Administratoren". Geben Sie im Feld Adresse eine IP-Adresse von denen an, denen eine statische zugewiesen wurde. Wir wiederholen dies für jede Adresse und wählen unsere Gruppe im Feld Name mit einem Pfeil aus.

c) Gehen Sie in derselben IP-Firewall zur Registerkarte Mangle und klicken Sie auf "+" . Ein Fenster mit Registerkarten wird geöffnet. Füllen Sie auf der Registerkarte Allgemein die folgenden Felder aus:

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

Überprüfen Sie auf der Registerkarte Aktion den Wert Akzeptieren und klicken Sie auf OK.

Wiederholen Sie den Vorgang, jedoch im Feld Dst. Port setzt den Wert auf 443 .

d) Klicken Sie erneut auf "+" und füllen Sie auf der Registerkarte " Allgemein " erneut die folgenden Felder aus:

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

Gehen Sie zur Registerkarte Erweitert und in das Feld Src. Adressliste Wählen Sie unsere Verwaltungsadressliste " Administratoren " aus. Stellen Sie sicher, dass Sie auf das angezeigte Feld neben der Liste klicken. Ein Ausrufezeichen "!" Wird angezeigt . , was logisch NICHT oder NEGATIV bedeutet.

Gehen Sie zur Registerkarte Aktion und füllen Sie die Felder aus:

 Action - mark routing New Routing Mark - to_proxy Passthrough -   

Klicken Sie auf OK und führen Sie die gleichen Aktionen aus, jedoch im Feld Dst. Port geben Sie den Wert 443 an .

e) Fügen Sie abschließend die letzte Regel hinzu. Klicken Sie auf das Pluszeichen und füllen Sie die folgenden Felder auf der Registerkarte Allgemein aus :

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

Infolgedessen sollte Folgendes mit Ihren Parametern geschehen. Ordnung ist wichtig!



f) Wir gehen in IP - Routen und drücken auf "+". Füllen Sie die folgenden Felder aus:

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

Klicken Sie auf "OK" und fertig. Wenn der Server eingeschaltet ist, wird der gesamte HTTP- und HTTPS-Verkehr über unseren Squid geleitet.

3.5. Alternatives Setup für MikroTik und andere Router


Diese Option eignet sich sowohl für den MikroTik-Router als auch für alle anderen, selbst die einfachsten (mit Ausnahme der gemieteten Anbieterteile, von denen Sie selbst wissen, was). In diesem Fall implementieren wir die gemeinsame Nutzung des Internetzugangs nicht auf dem Router, sondern auf Squid selbst. Also fangen wir an.
a) Wir gehen davon aus, dass Sie diesen Punkt erreicht haben, indem Sie alle höheren abgeschlossen haben, einschließlich der Einrichtung der Umleitung zu Proxy in MikroTik. Für einen störungsfreien Betrieb der beschriebenen Option müssen wir Absatz 3.4 Buchstabe e dieses Artikels streichen . Sie können den gesamten Punkt 3.4 abbrechen (möglicherweise unter Buchstabe a), damit sich unsere IPs nicht ändern. Dies ist jedoch optional. Es ist wichtig, dass wir das Routing selbst abbrechen. Gehen Sie dazu zu IP - Routen , suchen Sie nach unserer Route, wählen Sie sie aus und klicken Sie auf das rote Kreuz (kein Pluszeichen, sondern das Kreuz neben dem Häkchen). Die Route wird grau => sie ist deaktiviert. Die Filterung wurde ebenfalls deaktiviert. Jetzt gehen alle Clients direkt über einen Router ins Internet. b)

Gehen Sie jetzt zu unserem Server und gehen Sie zu dem Ordner mit Squid
 cd /etc/squid/ 

Öffnen Sie die Konfigurationsdatei
 nano squid.conf 

Und wir fügen es in Blöcken hinzu:
Im ersten Block unmittelbar nach der Zeile mit acl localnet ...
 acl admins src "/etc/squid/admins-ip" # IP   acl students src "/etc/squid/students-ip" # IP   

Wir brauchen keine Liste mit den Computern der Lehrer, da verstanden wird, dass alle anderen Lehrer sind. Sie können es jedoch selbst mit den entsprechenden Regeln in anderen Blöcken hinzufügen.
Im zweiten Block
 acl whitelist-stud url_regex -i "/etc/squid/whitelist-stud" #      

Im dritten Block nach http_access verweigern Sie die Blacklist
 http_access allow admins #      http_access allow students whitelist-stud #       http_access deny students #        

Ferner bleibt der Block unverändert, da die Lehrer (alle anderen IPs) folgen und nach ihrer weißen Liste und während der Arbeitszeit (falls angegeben) filtern. Sie können die Admins-Gruppe auch die Blacklist umgehen lassen, indem Sie die Zulassungsregel über der Verbotsregel festlegen, oder separate IPs (z. B. Ihre eigenen) zu einer separaten ACL hinzufügen und in die Regeln über der Blacklist einfügen.
Der vierte und fünfte Block sind unverändert.
Fügen Sie im sechsten Block hinzu
 acl whitelist-stud_ssl ssl::server_name_regex -i "/etc/squid/whitelist-stud_ssl" 

Fügen Sie im siebten Block add hinzu, nachdem ssl_bump blacklist_ssl beendet hat
 ssl_bump splice admins ssl_bump splice students whitelist-stud_ssl ssl_bump terminate students 

Das Prinzip ist das gleiche wie im dritten Block.
Der Rest bleibt unverändert. Speichern und beenden

c) Erstellen Sie nun unsere Listen mit IP-Adressen.
 touch admins-ip touch students-ip 

Und Whitelists für Studenten.
 touch whitelist-stud cp whitelist-stud whitelist-stud_ssl 

Fügen Sie die erforderlichen IP-Adressen und Sites zu den entsprechenden Listen hinzu. In der Schülerliste der Websites können Sie die Liste für Lehrer kopieren, indem Sie Websites entfernen, die von den Schülern nicht benötigt werden. Das Kopieren von Dateien unter Linux erfolgt mit dem Befehl
 cp <    > <    > 

Starten Sie Squid neu
 /etc/init.d/squid restart 


d) Wir sind zu dem Wichtigsten gekommen, nämlich wie wir Kunden dazu bringen können, über unseren Proxy online zu gehen. Wir müssen das Gateway unseres DHCP-Servers von der Adresse des Routers auf die Adresse unseres Servers ändern. Dazu muss die Serveradresse natürlich statisch oder an den MAC gebunden sein.
In MikroTik:
Gehen Sie zu IP - DHCP Server - Netzwerk und doppelklicken Sie auf unser Netzwerk. Ändern Sie im Feld Gateway die Adresse des Routers in die Adresse des Proxyservers. Klicken Sie auf OK und fertig. Sie können den Router neu starten, damit die Einstellungen für alle aktiven Clients korrekt aktualisiert werden. Danach ändern die Clients wahrscheinlich den Netzwerktyp in "öffentlich" (wenn es privat war).
In einem normalen Router:
Suchen Sie im Handbuch nach Ihrem Router, wo Sie das Gateway des DHCP-Servers ändern können, aber ich sage, was in den Einstellungen enthalten ist :)

Fazit : Als Ergebnis dieser alternativen Lösung konnten wir den Zugriff nach IP und Listen optimieren und normale IP-Adressen von Clients in den Squid-Protokollen abrufen. Wenn einige Kunden online gehen müssen, um Proxy über einen Router zu umgehen, lesen Sie den Spoiler.
Internet umgeht Proxy
, - Squid , , ,


4. Fazit


Um all das zusammenzufassen. Wir haben es geschafft, Linux Ubuntu 18.04 LTS von Grund auf neu zu installieren und zu konfigurieren, Squid mit HTTPS-Unterstützung zu erstellen und zu installieren, die Whitelist-Filterung zu konfigurieren und den Proxyserver in unser Netzwerk zu integrieren, ohne einen zusätzlichen DHCP-Server installieren zu müssen.

5. Liste der Quellen


Bei der Erstellung des Artikels wurden verschiedene Materialien von den Websites des Technischen Blogs von Interface LLC und von Web-Sicherheitsspezialisten - Webfilter für Ihr Netzwerk - sowie persönliches Wissen und Erfahrung verwendet.
Bei der Bearbeitung und Ergänzung des Artikels haben folgende Benutzer sehr geholfen: Kanlas , PetRiot , Barsook . Vielen Dank an sie für ihre Hilfe und Hilfe.

6. Notizen des Autors


  1. Alle Arbeiten mit dem Server müssen im Superuser-Modus ausgeführt werden, indem vor dem Befehl sudo hinzugefügt oder der Befehl sudo -s einmal eingegeben wird .
  2. Squid \ , , , . .
  3. , . , 1000 .
  4. , IP- Squid. Squid IP- — Mikrotik. , DHCP , . , , , IP .Barsook
  5. Damit Squid mit einer großen Anzahl von Clients (mehr als 50) arbeiten kann, ist mindestens 1 GB RAM erforderlich. Bevorzugter, da Squid Speicher frisst. Sie können den Speicherstatus überprüfen, indem Sie den Befehl top eingeben .
  6. Ich empfehle, beide Optionen für die Konfiguration des Routers zu verwenden, da Sie die Sperre umgehen können, wenn Sie in den Netzwerkeinstellungen explizit ein anderes Gateway angeben (den Router selbst).


UPD1: Alternative Netzwerkkonfiguration hinzugefügt und Firewall
UPD2: Alternative Routerkonfigurationsoption hinzugefügt, bei der Probleme mit der Anzeige von Adressen in Squid-Protokollen behoben wurden.
UPD3: In 3.1 wurde ein Fix hinzugefügt, der es Paketen ermöglicht, den Server zu passieren, den er ursprünglich vergessen hatte, hinzuzufügen. Andernfalls funktioniert das Internet nicht. Vielen Dank an Dmitry1986 für das Testen des Artikels.

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


All Articles