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>
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
Der Apache-Proxy kann auch filtern und . Fügen Sie dazu innerhalb des virtuellen Hosts eine Zeile mit gesperrten Domains ein. Z. B. ProxyBlock www.google.de facebook