Squid als Reverse Proxy für Exchange 2010

justj

Member of Honour
Hallo zusammen,

ich bin grade dabei, eine Exchange 2010 Infrastruktur aufzubauen. Das System wird von ca. 200-300 Usern verwendet werden, deshalb wird es nur einen Server geben, der alle Exchange-Rollen (ohne UM) hosted.
Ich möchte den Exchange nicht direkt aus dem Internet zugreifbar machen, weshalb ich gerne einen Reverse Proxy davor setzen möchte. Nach viel Googlen und Lesen habe ich mich für Squid entschieden, da Apache anscheinend einen Bug hat, welcher verhindert, dass Outlook Anywhere (RPCoHTTP) verwendet werden kann.

Mit dem Squid habe ich bis jetzt alles auch soweit hinbekommen, OWA läuft, ActiveSync läuft auch, nur Outlook Anywhere funktioniert noch nicht. Als Authentifizierungsmethode ist 'Basic' eingestellt. Mit einem Windows 7 Rechner mit Outlook kommt man bis zu einem Authentifizierungsfenster, dieses kommt jedoch immer wieder. D.h. nach einer Eingabe von Benutzername (in allen Varianten) und Passwort wird man sofort wieder um eine Authentifizeirung gebeten. Der Client kann einfach nicht sauber connecten. Wenn ich den Remote Connectivity Analyzer von Microsoft verwende und die RCP over HTTP Funktionalität teste ist alles wunderbar, der liefert mir nur grüne Haken und meint, es passt alles.

Hier meine Squid.conf:
Code:
https_port 443 accel defaultsite=exchange.domain.de  cert=/usr/local/squid/certs/exchange_ext.pem key=/usr/local/squid/certs/exchange_ext.key
cache_peer 192.168.xxx.xxx parent 443 0 proxy-only login=PASS connection-auth=off ssl sslflags=DONT_VERIFY_PEER sslcert=/usr/local/squid/certs/exchange_ext.pem sslkey=/usr/local/squid/certs/exchange_ext.key name=exchange.domain.de


#acl all src all
#acl manager proto cache_object
acl localhost src 127.0.0.0/32
acl local src 192.168.xxx.0/24
#acl to_localhost dst 127.0.0.0/8

acl Safe_ports port 80 #http
acl Safe_ports port 443 #https
acl Safe_ports port 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

#http_access allow manager localhost local
acl url_allow url_regex -i ^https://autodiscover.domain.de
acl url_allow url_regex -i ^https://autodiscover.domain.de
acl url_allow url_regex -i ^https://exchange.domain.de/autodiscover
acl url_allow url_regex -i ^https://exchange.domain.de.*$
acl url_allow url_regex -i ^https://exchange.domain.de/owa.*$
acl url_allow url_regex -i ^https://exchange.domain.de/rpc/rpcproxy.dll.*$
acl url_allow url_regex -i ^https://exchange.domain.de/rpc/rpcproxy.dll
acl url_allow url_regex -i ^https://exchange.domain.de/exchange.*$
acl url_allow url_regex -i ^https://exchange.domain.de/exchweb.*$
acl url_allow url_regex -i ^https://exchange.domain.de/ews.*$
acl url_allow url_regex -i ^https://exchange.domain.de/ews


http_access allow url_allow
http_access deny !Safe_ports
http_access deny all

server_persistent_connections on
client_persistent_connections on

debug_options ALL,1 33,2
Kennt jemand von euch das Problem oder hat jemand eine funktionierende Konfiguration?

MfG justj
 
Zuletzt bearbeitet:

Chromatin

Moderator
Mitarbeiter
Hast Du mal eine Regex eingebaut, die "alles" frisst?

Funktioniert es damit?

Ich habe ähnliche Sachen mit Pound gebaut, der wesentlich einfacher zu konfigurieren ist, oder spaeter mit relayd von OpenBSD.
 

justj

Member of Honour
Hallo Chromatin,

ich habe es sowohl mit
Code:
acl url_allow url_regex -i ^https://*
als auch mit
Code:
http_access allow all
ausprobiert, beides hatte keinen Erfolg. Ich bekomme auch eine Authentifizierungsnachfrage, aber das Ergebnis wird aus mir unbekannten Gründen zurückgewiesen und sofort wieder nach Logindaten gefragt.

Wenn du eine funktionierende Pound-Config hast, wäre ich dir sehr dankbar, wenn du mir die zukommen lässt, ich bin auch bereit, das System zu wechseln.

Vielen Dank
justj
 

Chromatin

Moderator
Mitarbeiter
Kannst du vor und hinter dem Squid mal den Traffic mitschneiden?
Das ist wirklich strange.

Pound kommt ziemlich simple daher. Ich benutze in etwa die folgende Config als SSL Reverse Proxy.
DH ich habe mehrere OpenBSD Maschinen mit Pound oder relayd, die als Reverse Proxy für http und https dienen.
Dahinter stehen dann die Windows Kisten. Im Grunde sind unsere Setups sehr ähnlich, da ich die windows Kisten auch nicht nackt ins Netz stellen wollte.
Ich lasse Pound auf OpenBSD laufen. Wenn Du das auch willst, musst du unter OpenBSD OpenSSL mit multithreading neu bauen. Bau die Lib in einem Extraordner, da du die nur fuer Pound brauchst. Dann baue Pound mit dem SSL Pfad zu der selbstgebauten SSL Lib.


Code:
## Vorgeplenke
User        "www"
Group       "www"
LogLevel    3
Alive         30
Grace       3600


### http Section
ListenHTTP
  Address 192.168.1.1
  Port 80
  HeadRemove "X-Forwarded-Proto"

  Service
   ### require host ist das "target"
    HeadRequire "Host: www.foobar.de/*"

   ### wird weitergeleitet an Adress im Backend
    BackEnd
      Address 192.168.2.1
      Port 80
      TimeOut 180
    End

    Session
      Type IP
      TTL 1800
    End
  End

### https Section
ListenHTTPS
  Address 192.168.1.1
  Port 443
  
  ### Hier kommen die Zertifikate rein
  Cert "/etc/pound/ssl_2012.cert"
  ### Zwischencert für class3 Certs, wenn nötig
  VerifyList "/etc/pound/orgva1.pem"

  ### noch ein bischen config, nicht zwingend noetig
  AddHeader  "X-Forwarded-Proto: https"
  HeadRemove "X-Forwarded-Proto"
  Err500 "/etc/pound/err500.html"

  Service
    HeadRequire "Host: exchange.domain.de/rpc/rpcproxy.dll.*"

    BackEnd
    ### hier kommt deine interne IP von exchange.domain.de/rpc/rpcproxy.dll.*
      Address 192.168.2.4
      Port 80
      TimeOut 180
      Priority 6
    End

    Session
      Type IP
      TTL 1800
    End
  End

  ### Redirects sehen so aus:
  Service
    ### Target
    HeadRequire "Host: sub.foobar.de*"
    Redirect 301 "https://sub.foobar.de"
  End

End

Du kannst in der HTTP und der HTTPS beliebig viele Service Sections einbauen. Die Servives entsprechen dann deinen Hosts in der Squid ACL Liste.
 
Oben