tikayevent
Goto Top

Outlook Web Access- bzw. Outlook Anywhere-Zugriff mittels Squid und Gruppenzugehörigkeit regeln

Dani hat vor einiger Zeit eine Anleitung geschrieben, in der erklärt wird, wie man Squid als Reverse Proxy für den Einsatz mit Exchange/Outlook Web Access/Outlook Anywhere einsetzt. Aufgrund einiger Vorkommnisse in unserem Unternehmen im Umgang mit Outlook Web Access habe ich auf Basis der Anleitung eine Möglichkeit gebaut, mit der anhand der Zugehörigkeit einer Sicherheitsgruppe im Active Directory gesteuert werden kann, wer aus dem Internet auf Outlook Web Access bzw. auch auf Outlook Anywhere zugreifen darf.
Dieses System ist jetzt seit etwa einem Jahr erfolgreich im Einsatz und funktioniert, bis auf die ständig gleichen Anwenderfehler, problemlos.

Visualisiert sieht es wie folgt aus

dfd20ad5a43ee5c80283b333977bbbf2

Diese Anleitung erläutert nur einige nötige Schritte, die von anderen Anleitungen abweicht, um keine Redundanz hineinzubringen. Dazu gehören die Originalanleitung von Dani, die grundlegende Konfiguration eines Exchangeserver sowie die Integration eines Linuxsystems im Active Directory mittels Samba/Winbind.

Damit es funktioniert, müssen aber einige Anpassungen in den Exchange Servern getätigt werden, die die CAS-Rolle installiert haben.

Dazu muss die Authentifizierung von Outlook Web Access, der Exchange-Systemsteuerung und Exchange ActiveSync auf die Standard-Authentifizierung umgestellt werden.

Als Beispiel hab ich mal das entsprechende Tab für Outlook Web Access geöffnet:

3001d579c15658da9701631d2ef6853c
Das Feld Anmeldedomäne beinhaltet normal einen Wert, dieser ist hier entfernt worden.

Beachtet bei Exchange ActiveSync auch den Hinweis unten im Tab.

In den Einstellungen der jeweiligen CAS-Server muss man, weil die SSL-Verbindung mehrfach aufgebrochen wird, das SSL-Offloading/die SSL-Verschiebung aktivieren:

8767f6def24ee22dee37f901272e7ec4
Das Feld Externer Hostname muss normal einen Wert beinhalten, dieser ist hier entfernt worden.

Anschließend baut ihr euch zwei Linuxserver anhand von Danis Anleitung. Damit ihr euch nicht zuviel Arbeit macht, könnt ihr das gebaute deb-Paket für beide Server nutzen.

Squid1 entspricht ganz genau Danis Anleitung, nur zeigt der eingetragene cache_peer nicht auf den Exchangeserver sondern auf die IP-Adresse vom internen Squid.

Squid2 entspricht bis auf ein paar Anpassungen in der Konfiguration auch Danis Anleitung, wobei der cache_peer hier auf den Exchangeserver zeigt, aber noch über die Authentifizierung verfügt.

Dazu müsst ihr, nachdem ihr den Squid installieren, aber bevor ihr die Konfiguration des Squid vornehmt, müsst ihr noch einen kleinen Extraschritt machen. Ihr müsst auf diesem Server Samba sowie Winbind installieren und dann diesen Server zum Mitglied des Active Directorys machen. Nutzt dazu bitte eine der Anleitungen, die ihr überall im Internet finden könnt, ich geh einfach mal davon aus, dass ihr wisst, was ihr macht und wie man diese Anleitungen findet.

Die dazugehörige smb.conf sieht so aus:
#
### Hostname des Servers
#
netbios name = www01
#
### Domaenenkurzname
#
workgroup = DOMAIN
#
### Domaenencontroller
#
password server = server1.domain.local, server2.domain.local
#
### FQDN der Domaene
#
realm = DOMAIN.LOCAL
security = ads
winbind uid = 10000-20000
winbind gid = 10000-20000
restrict anonymous = 2
#
### Achtung, der Backslash muss escaped werden
#
winbind separator = \\
winbind use default domain = yes

Wichtig sind die beiden winbind-Zeilen am Ende sowie der darüberstehende Hinweis. Normalerweise wird ein einzelner Backslash bei Windows genutzt, da dieses aber normal das Escapezeichen ist, wie auch bei Samba/Winbind muss dieser selbst escaped werden, daher \\. Der Rest der Konfiguration von Samba entspricht einer normalen AD-Mitgliedschaft eines Linuxsystems.

Jetzt kommt die eigentliche Konfiguration des internen Squids:
#
### Basiseinstellungen
#
visible_hostname webmail.domain.de
unique_hostname www01.domain.de
httpd_suppress_version_string on
extension_methods RPC_IN_DATA RPC_OUT_DATA
error_directory /usr/share/squid/errors/German
cache_mgr squidmaster@domain.de
#
### Squid soll nur SSL und nur von einer bestimmten IP-Adresse annehmen
### Da Squid als Man-in-the-Middle arbeitet, ist hier das Zertifikat zu
### hinterlegen
#
https_port 192.168.0.171:443 cert=/etc/squid/ssl/webmail.domain.de.crt key=/etc/squid/ssl/webmail.domain.de.key  defaultsite=webmail.domain.de options=NO_SSLv2 cipher=ALL:!aNULL:!eNULL:!LOW:!EXP:!ADH:!RC4+RSA:+HIGH:+MEDIUM:!SSLv2
#
### CAS-Array ueber Loadbalancer als Parent Server hinterlegt
### Authentifizierung wird durchgereicht
### Keine Pruefung des SSL-Zertifikats des CAS-Arrays
#
cache_peer 192.168.0.133 parent 443 0 no-query originserver login=PASS ssl sslflags=DONT_VERIFY_PEER name=ExchangeServer
#
### ACLs, welche nur die URLs des CAS-Arrays erlauben, die noeting sind
#
acl EXCH url_regex -i ^https://webmail.domain.de/rpc/rpcproxy.dll.*$
acl EXCH url_regex -i ^https://webmail.domain.de/exchange.*$
acl EXCH url_regex -i ^https://webmail.domain.de/exchweb.*$
acl EXCH url_regex -i ^https://webmail.domain.de/owa.*$
acl EXCH url_regex -i ^https://webmail.domain.de/Microsoft-Server-ActiveSync.*$
acl EXCH url_regex -i ^https://webmail.domain.de/ecp.*$
acl EXCH url_regex -i ^https://webmail.domain.de/public.*$
acl EXCH url_regex -i ^https://webmail.domain.de/autodiscover.*$
#
#
### Authentifizierung gegen das AD via Samba und Winbind
### erlaubte Gruppe: DOMAIN\_OWAExtern
### Wichtung: Backslash escapen => \\
#
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="domain\\_owaextern"  
auth_param basic children 5
auth_param basic realm Firma OWA
auth_param basic credentialsttl 5 hours
#auth_param basic utf8 on
#
### ACLs fuer die Definition der Authentifizierung
### lokale Netzwerke duerfen ohne Auth zugreifen
### Der Rest muss authentifiziert werden
### Erlaubt ist nur der Zugriff auf den ExchangeServer
### Alles andere wird verboten
#
acl users proxy_auth REQUIRED
acl localnet src 192.168.0.0/22
acl localnet src 172.21.0.0/22


#Eingefugt zu Testwecken
#acl localnet src all


acl all src all

#
cache_peer_access ExchangeServer allow EXCH
never_direct allow localnet EXCH
never_direct allow users EXCH
http_access allow localnet EXCH
http_access allow users EXCH
http_access deny all
miss_access allow localnet EXCH
miss_access allow users EXCH
miss_access deny all

ignore_expect_100 on
forwarded_for on

logformat common2 IP %>a via %<A, Benutzer: %[un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh  
access_log /var/log/squid/access.log common2
Wie ihr seht, entspricht die Konfiguration des internen Squids sehr stark der von Dani.
Der Server lauscht auf der 192.168.0.171:443 und erwartet eine HTTPS-Verbindung, 192.168.0.131 ist der Exchangeserver mit der CAS-Rolle.
Der erste wichtige Teil ist dieser hier:
### Authentifizierung gegen das AD via Samba und Winbind
### erlaubte Gruppe: DOMAIN\_OWAExtern
### Wichtung: Backslash escapen => \\
#
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="domain\\_owaextern"  
auth_param basic children 5
auth_param basic realm Firma OWA
auth_param basic credentialsttl 5 hours
Damit ermöglicht man dem Squid, eine Standardauthentifizierung gegen das Active Directory auszuführen, die Sicherheitsgruppe, die auf OWA von extern zugreifen darf, wird mittels --require-membership-of="domain\\_owaextern" angegeben.

Sehr wichtig ist auch das login=PASS in der Definition des cache_peers, damit wird nämlich die Authentifizierung transparent an den Exchangeserver weitergeleitet, so dass keine Mehrfachanmeldung nötig ist, dieses war aber auch in der Originalkonfiguration der Fall.

Die letzte Änderung ist bei den ACLs erfolgt.
Und zwar wird hierüber gesteuert, wer was darf. In meinem Fall ist es so, dass die lokalen Netzwerke, also 192.168.0.0/22 und 172.21.0.0/22 immer auf OWA zugreifen dürfen, während alles aus den anderen Netzen nur nach einer Benutzerauthentifizierung zugreifen darf. Aber Achtung, im Regelfall sieht der interne Squid nur die IP-Adresse des Squids in der DMZ, wenn jemand von außerhalb zugreift, daher könnte man diese ACL noch viel feiner einstellen.

Diese ACLs stammen noch aus den Anfängen, als wir intern noch nicht geklärt haben, wie unsere Filialen auf OWA zugreifen sollen. Mittlerweile ist es so, dass die Filialen direkt auf die CAS-Server zugreifen und der Squid nur den Traffic aus dem Internet behandelt. Man könnte also die ACLs vereinfachen, dass überlasse ich aber euch.

Die letzte Zeile der Konfiguration habe ich reingesetzt, um mir das Logging während der Inbetriebnahme zu vereinfachen. Diese Zeile erzeugt dann in der access.log folgende Einträge
IP 10.0.44.5 via ExchangeServer, Benutzer: domain\\user1 [04/Jan/2014:06:28:33 +0100] "POST https://webmail.domain.de/Microsoft-Server-ActiveSync? HTTP/1.0" 504 1691 TCP_MISS:FIRST_UP_PARENT
IP 10.0.44.5 via ExchangeServer, Benutzer: domain\\user2 [04/Jan/2014:06:28:53 +0100] "POST https://webmail.domain.de/Microsoft-Server-ActiveSync? HTTP/1.0" 200 233 TCP_MISS:FIRST_UP_PARENT
Wie ihr seht, sieht man bei der IP immer die IP des Squid1. In den Logs des Squid1 sieht man dagegen immer die öffentliche IP des Benutzers, aber keine Benutzerkennung, da diese hier nicht ausgewertet werden kann.

Es gibt aber ein bekanntes Problem, was ich bisher noch nicht lösen konnte: Outlook Web Access akzeptiert in den neueren Versionen den Slash (/) sowie den Backslash (\) gleichermaßen, obwohl in Active Directory-Umgebungen nur der Backslash zulässig ist. Benutzer kennen normal den Unterschied zwischen Slash und Backslash nicht, so dass die im Regelfall den falschen, also den Slash, nutzen. Damit ist keine Anmeldung über den Squid möglich. Dieser bzw. Winbind als Authentifizierungsdienst erwartet zwangsläufig den Backslash (oder das eingetragene Trennzeichen). Dieses hat bei mir zu sehr viel Verwirrung geführt, weil im internen Netzwerk der Slash grundsätzlich funktioniert.

EDIT: Ich habe gerade nochmal eben einen Test gemacht, die neue Schreibweise, also user@domain.de funktioniert auch problemlos.

Ebenso ist keine Nutzung der formularbasierten Authentifizierung möglich. Per Squid ist es gar nicht möglich, wenn man anhand meiner Anleitung den Zugriff regeln will, für die interne Nutzung müsste man einen extra CAS-Server, der nicht via Squid veröffentlicht wird, einrichten, der die formularbasierte Authentifizierung anbietet.

Content-Key: 225877

Url: https://administrator.de/contentid/225877

Printed on: April 20, 2024 at 01:04 o'clock

Member: wiesi200
wiesi200 Jan 05, 2014 at 15:42:39 (UTC)
Goto Top
Hallo,

Am Exchange selbst kann man doch die zugriffe auch regeln?

Wobei der Squid ist ja auch interessant um andere Dienste zu veröffentlichen, von der Seite auf jedem Fall interessant.
Member: tikayevent
tikayevent Jan 05, 2014 at 15:57:37 (UTC)
Goto Top
Am Exchange kannst du nur einstellen, ob OWA oder nicht. Wir haben es so, dass wir für unsere Filialen auch intern OWA nutzen (spart etwa 200 Outlooklizenzen), aber die Filialen dürfen nicht von außerhalb auf OWA zugreifen.

Wir hatten schon den Fall, dass Filialmitarbeiter gegangen sind, in der Filiale das Passwort nicht geändert wurde (Filialmitarbeiter gehen auch mal außerhalb der üblichen Passwortwechselintervalle) und dann waren auf einmal unternehmensinterne Informationen bei Personen, die nichts davon wissen sollten.

Diese Sache war aber nicht nur bei uns so gewünscht sondern auch bei unserem Outsourcingpartner, der bis vor einem Jahr unseren Exchangebetrieb inne hatten. Leider können die mit meiner Lösung nichts anfangen, da die die formularbasierte Authentifizierung nutzen und davon auch nicht wegwollen. Bisher nutzen die einen ISA oder ein TMG, ich glaube aber, dass es noch der ISA ist und die interne Sicherheitspolitik besagt, dass die DMZ keinerlei AD-Zugriff haben darf, daher die Zwei-Proxy-Strategie.
Member: wiesi200
wiesi200 Jan 05, 2014 at 16:40:37 (UTC)
Goto Top
Auf jeden Fall ein Interessantes Konstrukt. Squid bietet einiges an Spielmöglichkeiten auch für kleine Firmen bietet.

Ich bin gespannt @certifiedit wollt eftl noch ausprobieren wie es mit webTS aussieht.
Member: tikayevent
tikayevent Jan 05, 2014 at 16:56:36 (UTC)
Goto Top
Ich hatte auch mal eine Konfiguration mit eingebautem Load Balancer, die dann aber nicht umgesetzt wurde, weil mein Chef auch "mitspielen" wollte. Weil Pound mit dem SSL-Offloading irgendwie nicht funktioniert hat, ist dann einfach ein Kemp VLM gekauft worden. Ich weiß nicht, ob ich die LoadBalancer-Config noch irgendwo rumliegen habe.

In Verbindung mit dem Mittelstandscluster (wie Frank Carius ihn nennt) bekommt man eine All-in-One-Lösung für so.
Member: Dani
Dani Jan 06, 2014 at 12:56:46 (UTC)
Goto Top
Moin,
ich habe deine Anleitung in meiner querverlinkt, damit diese besser gefunden wird.

Am Exchange kannst du nur einstellen, ob OWA oder nicht.
Das ist so nicht richtig. Alle anderen Protokolle wie POP3, IMAP, OA und Activesync lassen sich am Exchangeserver konfiguieren. Ich habe dazu auch einen kl. Tipp vor einer Ewigkeit veröffentlicht

Grüße,
Dani
Member: tikayevent
tikayevent Jan 06, 2014 at 14:47:08 (UTC)
Goto Top
Ich weiß was du meinst, ich meinte auch damit, dass man pro Benutzer einstellen kann, ob er OWA, OA, POP3, ... nutzen kann, aber nicht von welcher IP oder ob über einen Proxy oder so. Sobald einem Benutzer das Recht OWA eingeräumt würde, kann er es intern wie extern nutzen (wenn OWA von außerhalb erreichbar ist, was bei den meisten Installationen so sein wird).