Proxy-Infoseite im Stil eine Captive Portals

Problem:

In einem Netzwerk, von dem aus man nur mit einem Proxy in „das Internet“1) kommt, finden sich immer wieder Rechner (meist durch B Y O D), die keinen Proxy konfiguriert haben und im Browser nur nichtssagende Fehlermeldungen über den nicht erreichbaren Server erhalten.

Idee:

Rechner, die einen direkten HTTP-Request (nicht via Proxy) lossenden, sollen eine Infoseite zurück geliefert bekommen.
Die direkten HTTP-Requests werden an die Firewall gerichtet, das sie das IP-Gateway zum Internet ist. Anstatt den Request zum Zielserver zu schicken, leitet man ihn an einen Webserver auf der Firewall weiter. Dieser antwortet mit einer (temporären) HTML-Redirect-Seite - also einer gefälschten Antwort. Diese Seite gibt dem Browser das Kommando eine andere Seite zu laden - die Infoseite. Für HTTPS-Requests funtioniert so eine Lösung natürlich nicht - die Fälschung würde nicht akzeptiert werden. Jedoch starten viele Browser/Betriebssystem bei einem frisch konfigurierten WLAN von sich aus einen HTTP-Zugriff auf entsprechende Seiten, damit diese Funktion für sogenannte Captive-Portals genutzt werden kann, also den Seiten, bei denen man sich z.B. in einem Hotel anmelden muss.

Realisierung:

1. Infoseite

2. Redirect-Seite

  • installiere einen Webserver (hier apache) auf der Firewallmaschine, hier auf Port 8888
  • konfiguriere den VirtualHost in der Datei 000-default.conf:
    <VirtualHost *:8888>
      # Der Server, der nur einen Redirect macht
      ServerAdmin webmaster@localhost
      RewriteEngine On
      RewriteRule ^ http://intranet.example.de/proxyinfo.html [L,R=302]
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
  • beachte, dass die 302 für eine temporäre Weiterleitung steht, damit der nächste Request durch den Browser wieder an das originale Ziel gerichtet wird.

3. Firewallkonfiguration

  • konfiguriere die Firewall für folgenden Redirect:
    • in Worten: Leite alle TCP-Pakete aus den lokalen Netzen (leh,kwl,lwl), welch an einen Port 80 (www) außerhalb der lokalen Netze (nicht 10.0.0.0/8) gerichtet sind und die Firewall erreichen an den Port 8888 der Firewall weiter
    • für Shorewall in der Datei rules - ggf. aber erst nach den Regeln, in denen Port-80-Zugriffe erlaubt werden:
  #ACTION   SOURCE          DEST      PROTO DPORT   SPORT   ORIGDEST
  REDIRECT  leh,kwl,lwl     8888      tcp   www     -       !10.0.0.0/8

Test:

  • rufe mit cURL die URL <ip-der-firewall>:8888 auf und beobachte den Redirect
  • rufe die Infoseite ohne Proxy auf
  • rufe mit curl eine Seite außerhalb2) der internen Netze auf und prüfe, ob der Redirect stattfindet.
  • Alternative: mit telnet kann man auch ohne Browser oder curl die Verbindung testen.
  telnet checkip.dyndns.org 80
1)
gemeint ist natürlich das per HTTP und HTTPS erreichbare WWW
2)
z.B. die IP des Internetrouters, der meist auf Port 80 reagiert