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:proxyapache2: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