Kategorien
Randnotiz

Apache2: Auth hinter Proxy

Leitet man einen internen Dienst, der nur über eine interne IP erreichbar ist, über einen Apache2 Proxy weiter, kommt es bei Authentifizierungen zu Problemen. Einige Browser verweigern das senden der Authentifizierungsdaten, wenn die Empfängeradresse nicht der aktuellen Adresse entspricht. Das Einrichten einer Authentifizierung am Apache, der diese dann an den Proxy Endpunkt weiter leitet, bringt Abhilfe. Benutzername und Passwort sollte gleich lauten:

  ProxyRequests On
  ProxyVia On
<Proxy *>
    Order deny,allow
    Allow from all
    AuthType Basic
    AuthName „Passwort erforderlich“
    AuthUserFile /etc/httpd/.passwdfile
    Require valid-user
</Proxy>   ProxyPassMatch ^/xxx/(.*)$ http://$1/cgi-bin/faststream.jpg?stream=full&html

Im Fall der Weiterleitung von MOBOTIX Cam Streams, funktioniert die Konfiguration. (Link)

Kategorien
Allgemein

MOBOTIX Cam über Apache Proxy

Eine für mich exotische Aufgabe war, mehrere Überwachungskameras über eine Website verfügbar zu machen. Eine Cam über eine URL mit dem Apache Server zu installieren ist keine besondere Sache. Zahlreiche Anleitungen existieren, wie die Direktive „ProxyPass“ einzusetzen ist.

Interessanter ist es, beliebig viele Cams über eine URL – nur durch Path unterschieden – im Apache zu realisieren.

Das Userinterface der MOBOTIX Cam setzt direkte  und relative Links, weshalb das Umleiten über den Proxy schwierig ist. Der Proxy muss mit dem Wechsel der Art und Weise zurecht kommen.

Es soll also über eine URL, mit den Paths /CAM1/, /CAM2/ ….. usw. das Kamerainterface, Bild und Livestream dem User zur Verfügung gestellt werden. Das Menuesystem, jeder CAM ist in seiner Struktur zwei bis drei Stufen tief. Das ist zu beachten, da jeder User auch mehrere CAMs geöffnet haben kann.

Wie in dem Listing zu sehen, wird ein Mapping und Rewriting der Proxydaten vorgenommen. Sobald der User aber mehrere Funktionen oder Ebenen der Menüstruktur aufruft, fügt das Substitute mehrmals, je nach dem ob der Link relativ oder direkt ist, den Path hinzu. Hier steuere ich mit Substitute „s|/CAM1/CAM1/|/CAM1/|i“ gegen. Als so zu sagen“letzte“ Regel, verhindere ich die Path Kaskadierung der vorherigen Umschreibung.

Diese Konfiguration läuft für beliebig viele CAMS und durch alle Ebenen der Menüs.

<VirtualHost *:443>
 ..........

ProxyRequests off
ProxyPreserveHost Off
ProxyHTMLInterp On
ProxyPass         /CAM1/ http://URL.CAM1.INTERN/
ProxyPass         /CAM2/ http://URL.CAM2.INTERN/

ProxyHTMLURLMap http://URL.CAM1.INTERN/ /CAM1
ProxyHTMLURLMap http://URL.CAM2.INTERN/ /CAM2

<Location /CAM1/>
 RequestHeader unset Accept-Encoding
 setOutputFilter proxy-html
 AddOutputFilterByType SUBSTITUTE text/html

 Substitute "s|/admin/|/CAM1/admin/|i"
 Substitute "s|/cgi-bin/|/CAM1/cgi-bin/|i"
 Substitute "s|/control/|/CAM1/control/|i"
 Substitute "s|/decor/|/CAM1/decor/|i"
 Substitute "s|/help/|/CAM1/help/|i"
 Substitute "s|/record/|/CAM1/record/|i"
 Substitute "s|/webcam/|/CAM1/webcam/|i"
 Substitute "s|/server/|/CAM1/server/|i"
 Substitute "s|/CAM1/CAM1/|/CAM1/|i"

 ProxyHTMLURLMap / /CAM1/
 ProxyHTMLURLMap /CAM1 /CAM1
 ProxyPassReverse /
 </Location>

<Location /CAM2/>
 ..........

</Location>

### Livestreams

ProxyPass /CAM1STREAM http://URL.CAM1.INTERN/cgi-bin/faststream.jpg?stream=full&html
ProxyPass /CAM2STREAM http://URL.CAM2.INTERN/cgi-bin/faststream.jpg?stream=full&html

</VirtualHost>