Iptables mit Squid Transparenter Proxy: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→SSL) |
|||
| (28 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 8889 intercept | ||
| + | |||
| + | ;Wichtig Wichtig https_port nicht http_port | ||
#intercept https | #intercept https | ||
| − | https_port 8888 | + | 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 8888 -s $LAN -m state --state NEW -j ACCEPT | ||
*iptables -A INPUT -p tcp --dport 8889 -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 | ||
| + | ... | ||
| + | } | ||
| + | ... | ||
| + | } | ||
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
- Zertifikate anzeigen
- Nach Zertifikaten suchen
- Einstellungen
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
...
}
...
}
