ssh als SOCKS-Proxy verwenden

Eine geniale Funktion des ssh Protokolls ist der SOCKS-Proxy. Viele kennen und nutzen diese gar nicht. Dabei hilft einem diese enorm bei der Administration von Servern. Ich nutze diese Funktion z.B. sehr häufig, um mit einem Webbrowser aus einem andern Netzwerk zuzugreifen. Dies ist sehr praktisch, wenn man mit seinem Notebook gerade in einem andern IP-Netz hängt und deshalb mit dem Browser nicht durch eine Firewall kommt.

Wie geht sowas?

Um mit einem Webbrowser über den SOCKS-Proxy aus einem anderen Netzwerk zu kommen, sind die beiden folgenden Schritte notwendig.

1. Anmeldung per ssh an einem Server in dem gewünschten Netzwerk

Um aus einem andern Netzwerk zu kommen meldet man sich auf einem System das sich innerhalb des selben befindet mit ssh und dem Parameter -D <Port> an. Dieser Parameter aktiviert den SOCKS-Proxy auf dem angegebenen Port. Wenn man z.B. ein Open SSH, ein anderes System mit ssh-server und der IP-Adresse 10.10.10.10 hat und einen SOCKET auf Port 1080 verwenden möchte, gibt man in der Kommandozeile den folgenden Befehl ein:

ssh -D 1080 10.10.10.10

2. Einstellung des SOCKS-Proxy im Webbrowser

Danach stellt man in dem Webbrowser ein, dass man den SOCKS-Proxy auf dem entsprechenden Port verwenden möchte. Dazu sollte man natürlich einen Webbrowser verwenden, der dies auch kann. Bei dem Firefox Webbrowser geht dies z.B. Verbindungseinstellungen:

Im Anschluss surft man mit diesem Webbrowser von der IP-Adresse 10.10.10.10.

Apache als Reverseproxy für den Webzugriff auf einen Exchangeserver

Um einem Exchangeserver zusätzlich zu schützen kann es sinnvoll sein die Webzugriffe auf diesen über einen Reverseproxy in der DMZ laufen zu lassen. Hierfür eignet sich besonders gut der Apache Webserver, der kostenlos ist und hervorragend als Proxy eingesetzt werden kann. Er kann mit den Modulen alias, headers und proxy und wenigen Zeilen Konfiguration als Reverseproxy eingerichtet werden.

Outlook Web Access über Reverseproxy

Dazu müssen als erstes die Module für den Apache aktiviert werden. Bei Debian kann die mit dem Befehlt a2enmod erfolgen.

Danach müssen zwei virtuelle Hosts konfiguriert werden, welche die Anfragen an den Exchangeserver weiter reichen. Da auch die verschlüsselte SSL-Webseite auf Inhalte der normalen Webseite zugreift, sollte man in jedem Fall auch die normale Webseite einrichten. Die Konfiguration könnte dabei etwa wie folgt aussehen:



   ServerName webmail.example.org
   # This secures the server from being used as a third party
   # proxy server
   ProxyRequests Off

   ProxyVia On

   DocumentRoot /var/www/exchange/
   RequestHeader set Front-End-Https "On"

   ServerName mail.example.com

   #Einträge für Outlook Web Access
   ProxyPass /exchange/ http:///exchange/
   ProxyPassReverse /exchange/ http:///exchange/
   ProxyPass /exchweb/ http:///exchweb/
   ProxyPassReverse /exchweb/ http:///exchweb/
   ProxyPass /public/ http:///public/
   ProxyPassReverse /public/ http:///public/

   #Eintrag für Outlook Mobile Access
   ProxyPass /oma http:///oma/
   ProxyPassReverse /oma http:///oma/

   #Eintrag damit Mobile Endgeräte synchronisieren können
   ProxyPass /Microsoft-Server-ActiveSync http:///Microsoft-Server-ActiveSync/
   ProxyPassReverse /Microsoft-Server-ActiveSync http:///Microsoft-Server-ActiveSync/

   ProxyPreserveHost On



   # This secures the server from being used as a third party
   # proxy server
   ProxyRequests Off

   # Allows the proxying of a SSL connection
   SSLProxyEngine On
   ProxyVia On

   DocumentRoot /var/www/exchange/
   RequestHeader set Front-End-Https "On"

   ServerName mail.example.com

   # Set up SSL to work with this host
   SSLEngine On
   SSLCertificateFile /etc/apache/webmail-proxy/server.crt
   SSLCertificateKeyFile /etc/apache/webmail-proxy/server.key


   #Einträge für Outlook Web Access
   ProxyPass /exchange/ http:///exchange/
   ProxyPassReverse /exchange/ http:///exchange/
   ProxyPass /exchweb/ http:///exchweb/
   ProxyPassReverse /exchweb/ http:///exchweb/
   ProxyPass /public/ http:///public/
   ProxyPassReverse /public/ http:///public/

   #Eintrag für Outlook Mobile Access
   ProxyPass /oma http:///oma/
   ProxyPassReverse /oma http:///oma/
   
   #Eintrag damit Mobile Endgeräte synchronisieren können
   ProxyPass /Microsoft-Server-ActiveSync http:///Microsoft-Server-ActiveSync/
   ProxyPassReverse /Microsoft-Server-ActiveSync http:///Microsoft-Server-ActiveSync/

   ProxyPreserveHost On

Und schon sollte es funktionieren. Bei einem Zugriff auf https://mail.example.com/exchange/ sollte man den Outlook Webaccess zu fassen bekommen (natürlich nur, wenn auf dem Exchangeserver auch ein OWA installiert und konfiguriert ist und der DNS-Eintrag auch wirklich auf den Apache zeigt).

Squid 3.0 in ein Active Directory von Microsoft integrieren

Nach unendlich langer Zeit ist der bekannte und beliebte Proxy Squid in der Version 3.0 erschienen. Die Entwicklung hat fast acht Jahre gedauert. Ich hatte eigentlich auch schon nicht mehr daran geglaubt, dass es jemals eine Version 3.0 geben würde. Wie man den Release Notes entnehmen kann, hat sich einiges geändert. So wurde Squid jetzt in C++ statt C entwickelt und kann das Internet Content Adaptation Protocol (ICAP). Grund genug für mich, mir die neue Version mal etwas näher anzusehen und in der Praxis zu testen. Deshalb habe ich mich für einen Squid 3.0 entschieden, als ich einen kleineren Proxy für ca. 30 Benutzer benötigte.

Aufgabenstellung
Es wird ein HTTP-Proxy für ca. 30 Benutzer benötigt. Die Benutzer sollen sich für Internetzugriffe authentifizieren und teilweise nur zugriff auf bestimmte Internetseiten bekommen. Die Anmeldenamen und Passwörter dafür sind in einem Active Directory hinterlegt. Bei jedem Zugriff soll der Squid also bei einem Windows Domain Controller nachfragen, ob der Benutzer existiert und ob er Internetseiten sehen darf.

HTTP-Proxy

Installation
Als Server habe ich einen IBM HS21 Blade mit einer 2 GHz Xeon Dual Core CPU, 1 GB Hauptspeicher und einem Debian Linux 4.0 (64 Bit) verwendet. Er hatte bereits einige andere Aufgaben, die ihn aber kaum auslasteten.
Bei Squid habe ich die PRE5-Version verwendet. Diese kann man bei Debian 4.0 mit dem Befehlt aptitude install squid3 installieren. Das STABLE2-Paket gibt es nur für den “testing-Zweig” von Debian und es ist wegen einigen Abhängigkeiten nicht so einfach zu installieren. Alle aktuellen Debian-Pakete von Squid 3.0 sind unter http://packages.debian.org/squid3 zu finden.

Konfiguration der Authentifizierung
Um die Anmeldenamen und Passwörter abzufragen, habe ich im Active Directory einen Benutzer SquidAuth und die Gruppe InternetZugang angelegt. Der Benutzer sollte aus Sicherheitsgründen keine vollen Admin-Rechte bekommen. Für das abfragen der Gruppenmitgliedschaft reicht es, wenn er Mitglied in der Gruppe RAS- IAS-Server ist. Falls man die Mitgliedschaften von Gruppen nicht braucht und nur den Benutzernamen und das Passwort gegen den Windows Domain Controller Authentifizieren möchte, reichen sogar normale Benutzerrechte!
Danach habe ich die Konfigurationsdatei des Squid (/etc/squid3/squid.conf) entsprechend erweitert. Wenn der befragte Windows Domain Controller ein Global Catalog Server ist, sollte der Port 3268 anstelle von Port 389 (wie eigentlich bei LDAP üblich) verwendet werden.
Falls sich ein Windows Domain Controller (der auch Global Catalog Server ist) mit der IP-Adresse 192.168.140.11 für die Domäne DOMAIN.local verantwortlich fühlt und das LAN den IP-Bereich 192.168.140.0/24 hat, könnte die Erweiterung etwa wie folgt aussehen:


# Authentifizierung an Active Directory
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "dc=DOMAIN,dc=local" -D "cn=SquidAuth,cn=Users,dc=DOMAIN,dc=local" -w "password" -f sAMAccountName=%s -h 192.168.140.11:3268
auth_param basic children 5
auth_param basic realm "Proxy Authentifizierung. Bitte geben Sie Ihren Benutzername und Ihr Passwort ein!"
auth_param credentialsttl 2 hours

external_acl_type InetGroup %LOGIN /usr/lib/squid3/squid_ldap_group -R -b "dc=DOMAIN,dc=local" -D "cn=SquidAuth,cn=Users,dc=DOMAIN,dc=local" -w "password" -f "(&(objectclass=person)(sAMAccountName=%v) (memberof=cn=%a,cn=Users,dc=DOMAIN,dc=local))" -h 192.168.140.11:3268

acl localnet proxy_auth REQUIRED
acl InetAccess external InetGroup InternetZugang
http_access allow InetAccess

Danach fragt Squid beim Aufruf einer Webseite nach einem Benutzernamen und Passwort. Des weiteren erhalten nur noch die Mitglieder der Gruppe InternetZugang Internetzugriff.

Fazit
Der Squid läuft jetzt seit 14 Tagen ohne Probleme. Bis jetzt habe ich keine Probleme mit Webseiten festgestellt. Sogar das Microsoft Windows Update läuft jetzt. Bei den alten Versionen von Squid funktionierte es meist nicht richtig.