Iptables mit Squid Transparenter Proxy

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Transparenter proxy

  • Wenn man den http_port auf intercept für https auf https stellt kann er normal Anfragten nicht beantworten.
  • Wenn man beides will sollte man die Interception auf einen anderen zusätlichen Port legen.
transparenter-proxy

Installation von squid

Wir brauchen eine angepasste Version von squid
Diese können wir selbst kompillieren oder das squid-openssl Paket von nutzen
  • apt install squid-openssl

Erstellen eines Selbstsignierten Zertifikates

Verzeichnis anlegen
  • mkdir /etc/squid/certs
  • cd /etc/squid/certs
Generieren Sie ein lokales selbstsigniertes CA-Zertifikat und geheimen Schlüssel (in derselben Datei))
  • openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout squid_proxyCA.pem -out squid_proxyCA.pem
  • chown -R proxy:proxy squid_proxyCA.pem
  • chmod 0400 squid_proxyCA.pem
füge das squid_proxyCA-Zertifikat zum System hinzu, damit es standardmäßig vertrauenswürdig ist (optional)
  • openssl x509 -inform PEM -in squid_proxyCA.pem -out squid_proxyCA.crt
  • cp squid_proxyCA.crt /usr/local/share/ca-certificates
  • update-ca-certificates

Splice Modus

  • Der Splice Modus weist Squid an den HTTPS-Verkehr nicht aufzubrechen
  • Dadurch ist eine reine Kontrolle der SNI durch die ACLs möglich ohne, dass ein Zertifikat generiert wird
  • vim /etc/squid/squid.conf
...
http_port 3129 intercept
https_port 3130 intercept ssl-bump cert=/etc/squid/certs/squid_proxyCA.pem

ssl_bump peek all
ssl_bump splice all

Zertifikat auf den Clients installieren

!!!Wichtig Wichtig Wichtig!!!

  • squid_proxyCA.crt auf die Clients kopieren.
Firefox
  • Burgermenu
    • Einstellungen
      • Nach Zertifikaten suchen
        • Zertifikate anzeigen
          • Zertifizierungsstellen importieren

Zertifikats Cache anlegen

security_file_certgen — SSL certificate generator for Squid.
  • Das Generieren und Signieren von SSL-Zertifikaten nimmt Zeit in Anspruch.
  • Squid kann diesen Helfer als externen Prozess verwenden, um die Arbeit zu erledigen.
  • Die Kommunikation erfolgt über TCP-Sockets, die an die Loopback-Schnittstelle gebunden sind.
  • Dieser Helfer kann einen Festplattencache mit Zertifikaten verwenden, um die Antwortzeiten bei wiederholten Anforderungen zu verbessern.
  • Es kann auch ohne Cache arbeiten und generiert bei jeder Anfrage neue Zertifikate.
  • /usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB
  • chown -R proxy:proxy /var/spool/squid

Squid Eintrag

  • cat /etc/squid/squid.conf
http_port 8889 intercept
Wichtig Wichtig https_port nicht http_port
#intercept https
https_port 8888 intercept ssl-bump cert=/etc/squid/certs/squid_proxyCA.pem generate-host-certificates=on options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1,SINGLE_DH_USE,SINGLE_ECDH_USE
ssl_bump bump all

Firewall

Iptables Kommando

  • iptables -t nat -A PREROUTING -j REDIRECT -i $LANDEV -p tcp --dport 80 --to 8889
  • iptables -t nat -A PREROUTING -j REDIRECT -i $LANDEV -p tcp --dport 443 --to 8888
  • iptables -A INPUT -p tcp --dport 8888 -s $LAN -m state --state NEW -j ACCEPT
  • iptables -A INPUT -p tcp --dport 8889 -s $LAN -m state --state NEW -j ACCEPT

nftables Version

  • vim /etc/nftables.conf
flush ruleset
...
table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                iif lo accept
                ct state { established, related } accept
                ...
                iif $landev tcp dport { 3128, 3129 } accept
                ...
        }
...
}
...
table inet nat {
       chain prerouting {
               type nat hook prerouting priority -100;
               ...
               iif $landev tcp dport 80 redirect to 3128
               iif $landev tcp dport 443 redirect to 3129
               ...
       }
...
}