Exclusion ProxyPass et AuthType Basic sous Apache 2

Cette bidouille permet de faire une exclusion ProxyPass, mais aussi de contourner AuthType Basic sur un VirtualHost Apache, selon certaines conditions!
L’idée est d’exposer un caméra, au firmware douteux et pas à jour, à la DMZ.

Les Proxies ont été multipliés. Le flux passera:

  • via HAProxy pour l’offloading SSL
  • via Apache2 ProxyPass pour l’authentification

En travaillant sur le virtualhost Apache, il est possible de forcer l’authentification Basic pour tous les clients tout en aménageant une ou plusieurs exclusions. Après, c’est surement un peu overkill dans le sens où on peut faire de l’AuthBasic dans HAProxy… 😉

hey_17

La caméra est configurée sur l’IP 192.168.0.52, port 80, et la passerelle HAProxy sur 192.168.0.254. L’exception se situe sur l’URI « /server-status », nécessaire aux statistiques munin.

Voici la config:

<VirtualHost *:85>
        ServerAdmin mail@mail.com
        ServerName robocam.domain.ltd
        ServerAlias www.robocam.domain.ltd
        LogLevel info

        ErrorLog ${APACHE_LOG_DIR}/error-82.log
        CustomLog ${APACHE_LOG_DIR}/access-82.log combined

        SetEnvIfNoCase User-Agent IPCamViewer get_in
        SetEnvIfNoCase User-Agent munin get_in_munin
        SetEnvIf Request_URI /server-status noauth=1

        ProxyPassMatch /server-status !
        ProxyPass / http://192.168.0.52/
        ProxyPassReverse / http://192.168.0.52/

        <Location />
                Options -Indexes +FollowSymLinks +MultiViews
                AuthType Basic
                AuthName "Restricted Access"
                AuthUserFile /etc/apache2/auth/htpasswords
                <RequireAny>
                        <RequireAll>
                                Require env noauth
                                Require local
                                Require env get_in_munin
                        </RequireAll>
                        <RequireAll>
                                <RequireNone>
                                         Require env noauth
                                </RequireNone>
                                Require user cam_admin
                                Require env get_in
                                Require ip 192.168.0.254
                        </RequireAll>
                </RequireAny>
        </Location>
        
</VirtualHost>

Tous les flux vers « https://robocam.domain.ltd » nécessitent une authentification s’ils proviennent de la passerelle, sauf pour « /server-status » qui ne nécessite pas d’authentification mais qui impose une origine locale via la condition « Require local« :

  • l’adresse IP du client correspond à 127.0.0.0/8
  • l’adresse IP du client est ::1
  • les adresses IP du client et du serveur sont identiques

L’exception se fait grâce aux conditions suivantes:

ProxyPassMatch /server-status !
SetEnvIf Request_URI /server-status noauth=1

En plus de l’authentification et du contrôle de l’origine des flux, les clients devront renvoyer un User-Agent bien précis via la condition « SetEnvIfNoCase« :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.