Iptables mit Squid Transparenter Proxy: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(31 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Kategorie: Proxy]]
 +
[[Kategorie: Squid]]
 +
[[Kategorie: iptables]]
 +
[[Kategorie: nftables]]
 
=Transparenter proxy=
 
=Transparenter proxy=
*Wenn man den http_port auf intercept stellt kann er normal Anfragten nicht beantworten.
+
*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.
 
*Wenn man beides will sollte man die Interception auf einen anderen zusätlichen Port legen.
 
{{#drawio:transparenter-proxy}}
 
{{#drawio: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=
 
=Squid Eintrag=
 
*cat /etc/squid/squid.conf
 
*cat /etc/squid/squid.conf
http_port 8888 intercept
 
  
=Iptabels Kommando=
+
http_port 8889 intercept
;Wenn der Squid sich auf der FIREWALL befindet steht
 
*iptables -t nat -A PREROUTING -j REDIRECT -i $LANDEV -p tcp --dport 80 --to 8888
 
;Wenn der Squid in der DMZ steht
 
*iptables -t nat -A PREROUTING -j DNAT -i $LANDEV -p tcp --dport 80 --to $SQUID:8888
 
  
=SSL=
+
;Wichtig Wichtig https_port nicht http_port
*Wenn man auch den SSL Verkehr umleiten will muss man noch ein paar andere Dinge tun.
+
#intercept https
*[[Squid https aufbrechen]]
+
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
*[[Squid und ClamAV]]
+
ssl_bump bump all
;Wenn der Squid sich auf der FIREWALL befindet steht
+
 
 +
= 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 -t nat -A PREROUTING -j REDIRECT -i $LANDEV -p tcp --dport 443 --to 8888
;Wenn der Squid in der DMZ steht
+
*iptables -A INPUT -p tcp --dport 8888 -s $LAN    -m state --state NEW -j ACCEPT
*iptables -t nat -A PREROUTING -j DNAT -i $LANDEV -p tcp --dport 443 --to $SQUID:8888
+
*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
 +
                ...
 +
        }
 +
...
 +
}

Aktuelle Version vom 12. September 2024, 10:32 Uhr

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.

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
               ...
       }
...
}