
pfSense+Squid mit HTTPS-Filterung + Technologie des Single Sign-On (SSO) mit Filterung nach Active Directory-Gruppen
Kurze Vorgeschichte
In dem Unternehmen entstand die Notwendigkeit, einen Proxy-Server einzuführen, der den Zugriff auf Websites (einschließlich HTTPS) nach Gruppen aus AD filtert, sodass die Benutzer keine zusätzlichen Passwörter eingeben müssen und die Verwaltung über eine Webschnittstelle erfolgen kann. Eine nicht schlechte Anfrage, oder?
Die richtige Antwort wäre gewesen, Lösungen wie Kerio Control oder UserGate zu kaufen, aber wie immer gibt es nicht genug Geld, während der Bedarf besteht.
Hier kommt uns das gute alte Squid zu Hilfe, aber woher bekommen wir die Webschnittstelle? SAMS2? Moralisch veraltet. Hier kommt pfSense ins Spiel.
Beschreibung
In diesem Artikel wird beschrieben, wie man den Proxy-Server Squid konfiguriert.
Zur Authentifizierung der Benutzer wird Kerberos verwendet.
Zur Filterung nach Domain-Gruppen wird SquidGuard eingesetzt.
Zur Überwachung werden Lightsquid, sqstat und interne Monitoring-Systeme von pfSense verwendet.
Außerdem wird ein häufiges Problem gelöst, das mit der Einführung der Single Sign-On (SSO)-Technologie verbunden ist, nämlich Anwendungen, die versuchen, mit dem Systembenutzer im Internet zu surfen.
Vorbereitung zur Installation von Squid
Als Grundlage wird pfSense verwendet, Installationsanleitung.
In dessen Rahmen organisieren wir die Authentifizierung am Firewall mit Domänenkonten. Anleitung.
Sehr wichtig!
Vor der Installation von Squid muss DNS Server in pfSense konfiguriert werden, ein A-Eintrag und PTR-Einträge auf unserem DNS-Server erstellt werden, und NTP so eingerichtet werden, dass die Zeit mit der Zeit des Domaincontrollers synchronisiert ist.
Und in Ihrem Netzwerk sollte das WAN-Interface von pfSense Zugang zum Internet haben, während Benutzer im lokalen Netzwerk sich mit dem LAN-Interface verbinden, auch über die Ports 7445 und 3128 (in meinem Fall 8080).
Alles bereit? Die Verbindung zum Domain-Server per LDAP zur Authentifizierung in pfSense ist hergestellt und die Zeit ist synchronisiert? Ausgezeichnet. Es ist Zeit, mit dem Hauptprozess zu beginnen.
Installation und Vorabkonfiguration
Wir installieren Squid, SquidGuard und LightSquid über den Paketmanager von pfSense im Abschnitt „System/Paketmanager“.
Nach erfolgreicher Installation wechseln wir zu „Dienste/Squid Proxy-Server“ und konfigurieren zunächst im Tab „Local Cache“ den Cache. Ich habe alles auf 0 gesetzt, da ich keinen besonderen Sinn darin sehe, Websites zu cachen, damit kommen auch die Browser gut klar. Nach der Einrichtung klicken wir auf die Schaltfläche „Speichern“ am unteren Bildschirmrand, damit können wir die grundlegenden Proxy-Einstellungen vornehmen.
Die grundlegenden Einstellungen bringen wir wie folgt:

Der Standardport ist 3128, aber ich bevorzuge es, 8080 zu verwenden.
Die gewählten Parameter im Tab „Proxy-Schnittstelle“ bestimmen, welche Schnittstellen unser Proxy abhören wird. ServerDa diese Firewall so konzipiert ist, dass sie über die WAN-Schnittstelle ins Internet schaut, auch wenn LAN und WAN im selben lokalen Subnetz sein können, empfehle ich, für den Proxy die LAN-Schnittstelle zu verwenden.
Die LOOPBACK-Adresse ist für den Betrieb von sqstat erforderlich.
Unten finden Sie die Einstellungen für Proxy Transparent sowie den SSL-Filter, diese benötigen wir jedoch nicht. Unser Proxy wird nicht transparent sein, und für die https-Filterung werden wir uns nicht um die Ersetzung des Zertifikats kümmern (schließlich haben wir Geschäftsabrechnungen, Bank-Clients usw.), sondern nur das Handshake beobachten.
In diesem Schritt müssen wir zu unserem Domänencontroller wechseln und ein Konto zur Authentifizierung erstellen (man kann auch das Konto verwenden, das für die Authentifizierung von pfSense eingerichtet wurde). Ein wichtiger Faktor ist — falls Sie die Verschlüsselung AES128 oder AES256 verwenden möchten — setzen Sie die entsprechenden Häkchen in den Kontoeinstellungen.
Falls Ihre Domäne ein sehr komplexer Wald mit einer großen Anzahl von Verzeichnissen ist oder Ihre Domäne .local ist, müssen Sie MÖGLICHERWEISE, aber nicht sicher, ein einfaches Passwort für dieses Konto verwenden. Ein bekannter Bug, aber mit einem komplexen Passwort kann es möglicherweise einfach nicht funktionieren, dies muss im konkreten Einzelfall überprüft werden.

Nachdem wir das alles erledigt haben, erstellen wir die Schlüsseldatei für Kerberos, öffnen die Eingabeaufforderung mit Administratorrechten auf dem Domänencontroller und geben Folgendes ein:
# ktpass -princ HTTP/pfsense.domain.local@DOMAIN.LOCAL -mapuser pfsense -pass 3EYldza1sR -crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} -ptype KRB5_NT_PRINCIPAL -out C:keytabsPROXY.keytabDabei geben wir unseren FQDN pfSense an und achten auf die Großschreibung, im Parameter mapuser geben wir unser Domänenkonto und dessen Passwort ein, und bei crypto wählen wir die Verschlüsselungsmethode aus; ich habe rc4 für die Arbeit verwendet, und im Feld -out wählen wir aus, wo wir unsere fertige Schlüsseldatei speichern.
Nach der erfolgreichen Erstellung der Schlüsseldatei werden wir sie auf unser pfSense senden. Ich habe dafür Far verwendet, aber es kann auch über Befehle, Putty oder über die Webschnittstelle von pfSense im Bereich „Diagnose - Kommandozeile“ durchgeführt werden.
Jetzt können wir die Datei /etc/krb5.conf bearbeiten/erstellen.

wobei /etc/krb5.keytab die von uns erstellte Schlüsseldatei ist.
Überprüfen Sie unbedingt die Funktionalität von Kerberos mit kinit. Wenn es nicht funktioniert, macht es keinen Sinn, weiterzulesen.
Einrichtung der Authentifizierung von Squid und der Zugriffsliste ohne Authentifizierung.
Nachdem wir Kerberos erfolgreich konfiguriert haben, werden wir es an unser Squid anhängen.
Gehen Sie dazu zu Dienste - Squid Proxy-Server und scrollen Sie im Hauptbereich bis ganz nach unten, dort finden wir die Schaltfläche „Erweiterte Einstellungen“.
Geben Sie im Feld Benutzerdefinierte Optionen (Vor Authentifizierung) ein:
#Хелперы
auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME -k /usr/local/etc/squid/squid.keytab -t none
auth_param negotiate children 1000
auth_param negotiate keep_alive on
#Списки доступа
acl auth proxy_auth REQUIRED
acl nonauth dstdomain "/etc/squid/nonauth.txt"
#Разрешения
http_access allow nonauth
http_access deny !auth
http_access allow authuдe auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth – wählt den benötigten Kerberos-Authentifizierungshelfer aus.
Schlüssel -s mit dem Wert GSS_C_NO_NAME – bestimmt die Verwendung eines beliebigen Kontos aus der Schlüsseldatei.
Schlüssel -k mit dem Wert /usr/local/etc/squid/squid.keytab – gibt an, dass genau diese Keytab-Datei verwendet wird. In meinem Fall handelt es sich um die gleiche Keytab-Datei, die wir erstellt haben, die ich in das Verzeichnis /usr/local/etc/squid/ kopiert und umbenannt habe, da Squid mit diesem Verzeichnis nicht zusammenarbeiten wollte, scheinbar fehlten die Rechte.
Schlüssel -t mit dem Wert -t none – deaktiviert zyklische Anfragen an den Domaincontroller, was die Belastung verringert, wenn Sie mehr als 50 Benutzer haben.
Für die Testzeit kann auch der Schlüssel -d hinzugefügt werden – d.h. Diagnose, es werden mehr Protokolle ausgegeben.
auth_param negotiate children 1000 – legt fest, wie viele gleichzeitige Authentifizierungsprozesse gestartet werden können.
auth_param negotiate keep_alive on – verhindert, dass die Verbindung während der Abfrage der Authentifizierungskette abgebrochen wird.
acl auth proxy_auth REQUIRED – erstellt und verlangt eine Zugangskontrollliste, die Benutzer umfasst, die sich authentifiziert haben.
acl nonauth dstdomain "/etc/squid/nonauth.txt" – informiert Squid über die Zugriffsliste nonauth, in der Ziel-Domains enthalten sind, auf die immer allen Zugriff gewährt wird. Die Datei erstellen wir und tragen die Domains im Format ein.
.whatsapp.com
.whatsapp.netWhatsapp wird nicht umsonst als Beispiel verwendet – es ist sehr wählerisch, wenn es um Proxys mit Authentifizierung geht und funktioniert nicht, wenn es nicht vor der Authentifizierung erlaubt ist.
http_access allow nonauth – erlaubt den Zugriff auf diese Liste für alle.
http_access deny !auth – verweigert nicht authentifizierten Benutzern den Zugriff auf andere Sites.
http_access allow auth — den autorisierten Benutzern den Zugriff erlauben.
Alles, der Squid ist bei Ihnen eingerichtet, jetzt ist es an der Zeit, mit der Filterung nach Gruppen zu beginnen.
SquidGuard Konfiguration
Wir gehen zu Dienste > SquidGuard Proxy Filter.
In LDAP-Optionen geben wir die Daten unseres Kontos ein, das für die Kerberos-Authentifizierung verwendet wird, aber im folgenden Format:
CN=pfsense,OU=service-accounts,DC=domain,DC=localWenn es Leerzeichen und/oder nicht-lateinische Zeichen gibt, sollten wir diesen Eintrag in einfache oder doppelte Anführungszeichen setzen:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Als nächstes setzen wir unbedingt diese Häkchen:
![]()
Um unerwünschte DOMAINpfsense zu entfernen DOMAIN.LOCAL, auf die das gesamte System sehr empfindlich reagiert.
Jetzt gehen wir zu Group Acl und verknüpfen unsere Domänen-Zugriffsgruppen, ich verwende einfache Bezeichnungen wie group_0, group_1 usw. bis 3, wobei 3 nur Whitelist-Zugriff ermöglicht und 0 alles erlaubt.
Die Gruppen werden wie folgt verknüpft:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0,OU=squid,OU=service-groups,DC=DOMAIN,DC=LOCAL))Wir speichern unsere Gruppe, gehen zu Zeiten, wo ich einen Zeitraum erstellt habe, der immer gilt, dann gehen wir zu Zielkategorien und erstellen Listen nach Belieben, nach dem Erstellen der Listen gehen wir zurück zu unseren Gruppen und wählen innerhalb der Gruppe mit Schaltflächen aus, wer wo kann und wer nicht.
LightSquid und sqstat
Wenn wir bei der Konfiguration den Loopback in den Squid-Einstellungen gewählt haben und den Zugriff auf 7445 in der Firewall sowohl in unserem Netzwerk als auch auf pfSense erlaubt haben, können wir beim Wechsel zu Diagnosen > Squid Proxy Reports problemlos sowohl sqstat als auch Lighsquid öffnen. Für letzteres müssen wir dort auch einen Benutzernamen und ein Passwort festlegen und es gibt die Möglichkeit, ein Design auszuwählen.
Abschluss
pfSense ist ein sehr leistungsstarkes Werkzeug, das sehr viel kann — sowohl für das Proxying von Verkehr als auch für die Kontrolle des Benutzers über den Internetzugang, dies ist nur ein kleiner Teil der Funktionalität. Dennoch hat es in einem Unternehmen mit 500 Maschinen das Problem gelöst und erlaubte es, beim Kauf von Proxys zu sparen.
Ich hoffe, dieser Artikel hilft jemandem, ein sehr aktuelles Problem für mittelgroße und große Unternehmen zu lösen.
Quelle: habr.com
