Anleitung: IPFire & SSL-Bump

  1. Download Squid.
  2. Webproxy stoppen
  3. Backup von Squid erstellen.

    mkdir -p /backup/sslbump
    mv /usr/sbin/squid /backup/sslbump
    mv /usr/lib/squid /backup/sslbump/libsquid


  4. SSH im Webinterface des IPFire aktivieren.


  5. Das heruntergeladene Archiv zum IPFire hochladen.

    scp -C -P 222 squid.tar.gz root@ipadresse:/tmp/


    Unter Linux sollte das benötigte Tool „scp“ vorhanden sein. Ansonsten muss das Paket openssh-client nachinstalliert werden. Unter Windows hilft Putty, hier ist „scp“ ebenfalls enthalten.



  6. Am IPFire anmelden.

    ssh -p 222 root@ipadresse


  7. Ins Verzeichnis „tmp“ wechseln und Archiv entpacken.

    tar xvfz squid.tar.gz oder mit tar xvf squid.tar


  8. Aus entpackten Ordner folgende Dateien verschieben.
  9. zuerst das Binary

    mv squid/usr/sbin/squid /usr/sbin/


  10. dann den Ordner squid

    mv squid/usr/lib/squid /usr/lib/


  11. Besitzer und Rechte anpassen

    chown root:root /usr/sbin/squid
    chmod 0755 /usr/sbin/squid
    chown root:root /usr/lib/squid -R
    chmod 0755 /usr/lib/squid -R


  12. Jetzt den Zertifikats-Ordner für Squid initialisieren.

    /usr/lib/squid/ssl_crtd -c -s /var/lib/ssl_db
    (ab Squid-4 lautet der Behehl:  /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 8MB)
    chown -R squid:root /var/lib/ssl_db


  13. Verzeichnis für Zertifikate anlegen.

    mkdir -p /etc/squid/ssl_cert
    chown -R root:root /etc/squid/ssl_cert
    cd /etc/squid/ssl_cert


  14. Zertifikate für Squid zur Benutzung von OpenSSL erstellen.

    openssl req -new -newkey rsa:1024 -days 1365 -nodes -x509 -keyout myca.pem -out myca.pem


  15. Zertifikat für den Client erstellen und auf den Webserver von IPFire verschieben,
    muss für den jeweiligen Benutzer/Browser mit „http://xxx.xxx.xxx.xxx:81/myca.der“ herunter geladen werden und in die Zertifikatsverwaltung importiert werden .


    openssl x509 -in myca.pem -outform DER -out myca.der
    mv myca.der /srv/web/ipfire/html/



  16. Nun die include.acl mit vi anpassen. (gilt bis Squid 3.5.27, für Squid 4.5 siehe am Ende dieser Seite)

    vi /var/ipfire/proxy/advanced/acls/include.acl



    https_port „ipadresse_des_ipfire“:3129 intercept ssl-bump generate-host-certificates=on cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem version=1

    options=NO_SSLv2,NO_SSLv3,SINGLE_DH_USE

    sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 8MB

    ssl_bump stare all
    ssl_bump bump all


  17. Jetzt noch firewall.local anpassen und mit „/etc/sysconfig/firewall.local start“ laden.

    vi /etc/sysconfig/firewall.local


    #!/bin/sh

    # Used for private firewall rules# See how we were called.
    case „$1“ in
      start)
            ## add your ’start‘ rules here
    iptables -t nat -A CUSTOMPREROUTING -i green0 -p tcp – -dport 443 -j REDIRECT – -to-ports 3129
            ;;
      stop)
            ## add your ’stop‘ rules here
    iptables -t nat -D CUSTOMPREROUTING -i green0 -p tcp – -dport 443 -j REDIRECT – -to-ports 3129
            ;;
      reload)
            $0 stop
            $0 start
            ## add your ‚reload‘ rules here
            ;;
      *)
            echo „Usage: $0 {start|stop|reload}“
            ;;
    esac


  18. Man kann das ganze anstatt in die „firewall.local“ einzutragen das Init-Script von „Squid“ anpassen.


  19. Damit die Einträge der include.acl in die squid.conf übernommen werden muß über das Webui der Webproxy mit „Speichern und Neustart“ gestartet werden.


Meine include.acl


https_port xxx.xxx.xxx.xxx:3129 cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem ssl-bump intercept generate-host-certificates=on dynamic_cert_mem_cache_size=8MB version=1

sslproxy_options NO_SSLv2,NO_SSLv3,SINGLE_DH_USE

sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 8MB

sslproxy_cipher HIGH:MEDIUM:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS

acl broken_sites ssl::server_name „/var/ipfire/proxy/brokensites.squid“
acl step1 at_step sslBump1
ssl_bump peek step1
ssl_bump bump !broken_sites
ssl_bump splice all


Hier noch eine andere Version der include.acl


https_port xxx.xxx.xxx.xxx:3129 cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem ssl-bump intercept generate-host-certificates=on dynamic_cert_mem_cache_size=8MB version=1

sslproxy_options NO_SSLv2,NO_SSLv3,SINGLE_DH_USE

sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 8MB
sslcrtd_children 5

sslproxy_cipher HIGH:MEDIUM:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS

acl bump_step1 at_step sslBump1
acl bump_step2 at_step sslBump2
acl bump_step3 at_step sslBump3
acl bump_nobumpsites ssl::server_name „/var/ipfire/proxy/brokensites.squid“

ssl_bump peek bump_step1 all
ssl_bump splice bump_nobumpsites
ssl_bump peek bump_step2 bump_nobumpsites
ssl_bump splice bump_step3 bump_nobumpsites
ssl_bump bump

sslproxy_cert_error deny all


Und noch eine Variante


https_port xxx.xxx.xxx.xxx:3129 cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem ssl-bump intercept generate-host-certificates=on dynamic_cert_mem_cache_size=8MB version=1

sslproxy_options NO_SSLv2,NO_SSLv3,SINGLE_DH_USE

sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 8MB
sslcrtd_children 5

sslproxy_cipher HIGH:MEDIUM:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS

acl broken_sites ssl::server_name „/var/ipfire/proxy/brokensites.squid“
ssl_bump splice localhost
ssl_bump splice broken_sites

ssl_bump stare all
ssl_bump bump all


Version der include.acl für Squid 4.5 / 4.6


https_port xxx.xxx.xxx.xxx:3129 cert=/etc/squid/ssl_cert/myca.pem key=/etc/squid/ssl_cert/myca.pem ssl-bump intercept generate-host-certificates=on dynamic_cert_mem_cache_size=8MB

http_port 127.0.0.1:3128

tls_outgoing_options options=NO_SSLv3,ALL

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 8MB
sslproxy_cert_error deny all
on_unsupported_protocol tunnel all

acl ssl_exclude_green_ip dst xxx.xxx.xxx.xxx
acl ssl_exclude ssl::server_name „/var/ipfire/proxy/brokensites.squid“

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3

ssl_bump splice localhost
ssl_bump splice ssl_exclude_green_ip

ssl_bump peek step1 all
ssl_bump splice ssl_exclude
ssl_bump stare step2 all
ssl_bump bump all