Apache Web-Proxy

Es muss nicht immer Squid sein! Auch mit Apache kann man einen Web-Proxy einrichten.

Mit dem nachfolgenden Beispiel installieren Sie den Apache Webserver und konfigurieren diesen als Web-Proxy, welcher dann von Browsern und anderen HTTP-Klienten für den Internetzugang genutzt werden kann.

/srv/salt/apache-proxy/init.sls
#
# Build and maintain a Web-Proxy based on Apache
#

{% set port = 8045 %}

apache-packages:
  pkg.installed:
    - pkgs:
      - apache2
      - apache2-utils
      - libapache2-mod-authnz-external
      - pwauth

{% for module in ['proxy','proxy_connect','proxy_http'] %}
enable-mod-{{ module }}:
  apache_module.enabled:
    - name: {{ module }}
    - require: 
      - pkg: apache-packages
{% endfor %}

Disable default site:
  apache_site.disabled:
    - name: 000-default

#
# Disable Port 80. We don't serve content with Apache
#
Enable Port {{port}}:
  file.append:
    - name: /etc/apache2/ports.conf
    - text: Listen {{port}}
  
Disable Port 80:
  file.replace:
    - name: /etc/apache2/ports.conf
    - pattern: ^Listen 80$
    - repl: >-
        #Listen 80

#
# Copy a proxy config. The build-in state 
# https://docs.saltproject.io/en/latest/ref/states/all/salt.states.apache.html
# cannot handle proxy configurations
#
/etc/apache2/sites-available/proxy.conf:
  file.managed:
    - source: salt://apache-proxy/proxy.conf
    - template: jinja
    - defaults:
      port: {{port}}

Enable proxy:
  apache_site.enabled:
    - name: proxy

apache2:
  service.running:
    - enable: True
    - watch:
      - file: /etc/apache2/sites-available/proxy.conf
      - file: /etc/apache2/ports.conf
/srv/apache-proxy/proxy.conf
<VirtualHost *:{{ port}}>
	ProxyRequests On
	ProxyVia On
	AllowCONNECT 22-65535
	<IfModule mod_authnz_external.c>
		AddExternalAuth pwauth /usr/sbin/pwauth
		SetExternalAuthMethod pwauth pipe
	</IfModule>

	<Proxy *>
    	Order deny,allow
    	Deny from all
  		# Allow access only from local network
  		Allow from all
		AuthType Basic
		AuthName "Proxy requires authentication"
		AuthBasicProvider external
		AuthExternal pwauth
		Require valid-user
	</Proxy> 
    ServerName proxy.local
	ErrorLog "/var/log/apache2/proxy-error.log"
	CustomLog "/var/log/apache2/proxy-access.log" common
</VirtualHost>

Der Apache-Proxy kann auch filtern und Zugriff auf bestimmte Domänen verbieten. Fügen Sie dazu innerhalb des virtuellen Hosts eine Zeile mit gesperrten Domains ein. Z. B. ProxyBlock www.google.de facebook

Eine Liste mit erlaubten Proxy-Usern »zusammenbauen« aus dem User-Pillar.

{% set valid_proxy_users = [] %}
{% for login,user in pillar['users'].iteritems() %}
{% if user['proxy'] %}
{% do valid_proxy_users.append(login) %}
{% endif %}
{% endfor %}

Verwenden Sie die zuvorgenannte Authentifierung nicht in produktiven Umgebungen. Das Passwort wird im Klartext unverschlüsselt übertragen. Wenn Sie eien Web-Proxy mit Authentifizierung einrichten möchten, muss für diesen TLS/HTTPS aktiviert werden.

In der Apache Proxy-Konfiguration werden die erlaubten User nun wie folgt angeben:

... snip
Require user {{ valid_proxy_users|join(' ') }}
... snap

Last updated