35 Apache style ACL

35.1 Grundlagen der Zugriffskontrolle mit Apache als Forward Proxy

35.1.1 mod_proxy

Das mod_proxy-Modul ermöglicht Apache, als Proxy-Server zu fungieren, sowohl als Forward Proxy als auch als Reverse Proxy.

35.1.2 mod_authz_host

Das mod_authz_host-Modul wird verwendet, um den Zugriff auf den Server basierend auf Hostnamen, IP-Adressen oder IP-Bereichen zu steuern.

35.1.3 mod_authz_core

Das mod_authz_core-Modul bietet eine allgemeine Zugriffskontrollstruktur, die in Kombination mit anderen Authentifizierungs- und Autorisierungsmodulen verwendet werden kann.

35.2 Konfiguration der ACLs in der Apache-Konfigurationsdatei

Die Zugriffskontrolle wird in der Apache-Konfigurationsdatei (httpd.conf oder apache2.conf) oder in spezifischen Virtual Host- oder Verzeichnis-Konfigurationsdateien (.htaccess) definiert.

35.2.1 Beispielkonfigurationen

35.2.1.1 Zugriff basierend auf IP-Adressen

<VirtualHost *:3128>
    ProxyRequests On
    <Proxy *>
        Require ip 192.168.1.0/24
        Require ip 10.0.0.0/8
    </Proxy>
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>

Diese Konfiguration erlaubt den Zugriff auf den Forward Proxy nur für Clients aus den Netzwerken 192.168.1.0/24 und 10.0.0.0/8.

35.2.1.2 Zugriff basierend auf Hostnamen

<VirtualHost *:3128>
    ProxyRequests On
    <Proxy *>
        Require host example.com
        Require host mydomain.local
    </Proxy>
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>

Diese Konfiguration erlaubt den Zugriff auf den Forward Proxy nur für Clients, deren Hostnamen example.com oder mydomain.local entsprechen.

35.2.1.3 Zugriff basierend auf Zeitplänen (mit externen Skripten)

Apache bietet keine native Unterstützung für zeitbasierte Zugriffskontrollen. Dies kann jedoch durch externe Skripte erreicht werden, die in Kombination mit Apache-Konfigurationsanweisungen verwendet werden können.

<VirtualHost *:3128>
    ProxyRequests On
    <Proxy *>
        # Beispiel für die Verwendung eines externen Skripts zur Zugriffskontrolle
        Require expr %{TIME_HOUR} -ge 9 && %{TIME_HOUR} -lt 17 && %{TIME_WDAY} -ge 1 && %{TIME_WDAY} -le 5
    </Proxy>
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>

Diese Konfiguration erlaubt den Zugriff auf den Proxy nur während der Bürozeiten von Montag bis Freitag zwischen 9:00 und 17:00 Uhr.

35.2.1.4 Zugriff basierend auf URLs

<VirtualHost *:3128>
    ProxyRequests On
    <Proxy "*">
        Require all granted
    </Proxy>
    <Location "/blocked">
        Require all denied
    </Location>
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>

Diese Konfiguration erlaubt den Zugriff auf alle URLs außer denen, die mit /blocked beginnen.

35.3 Zusammenfassung

Der Apache HTTP Server bietet verschiedene Mechanismen zur Zugriffskontrolle, die es ermöglichen, den Zugriff auf den Forward Proxy detailliert zu steuern. Durch die Kombination von mod_proxy, mod_authz_host und mod_authz_core können Administratoren spezifische Regeln basierend auf IP-Adressen, Hostnamen, URLs und externen Bedingungen festlegen. Diese Zugriffskontrollen können ähnlich flexibel wie die ACLs in Squid konfiguriert werden, bieten jedoch durch die Integration mit den umfassenden Möglichkeiten von Apache zusätzliche Flexibilität und Funktionalität.