Wie richte ich einen Client für einen transparenten Squid-Proxy ein?

9

Serverdetails

Squid Transparent Proxy Version: 3.3.8
OS: Ubuntu Server 14.04
Server IP: 192.168.1.3

Squid-Konfigurationsdatei

(ohne Kommentare mit grep)

root@ubuntu:~# grep -v '^$\|^\s*\#' /etc/squid3/squid.conf
acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT
acl mylocalnetwork src 192.168.1.0/24
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access allow mylocalnetwork
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128 transparent
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /opt/squid/cache 10000 14 256
maximum_object_size 128000 KB
cache_swap_low 95
cache_swap_high 99
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern -i \.(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200
refresh_pattern -i \.(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 10080 90% 43200
refresh_pattern -i \.(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000
refresh_pattern -i \.(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i \.index.(html|htm)$ 0 75% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 1440 90% 10080
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
store_avg_object_size 13 KB
visible_hostname localhost

Tintenfischprotokolle

-------------------------------------------------------------
-----------------------------------------------------------
----------------------------------------------------------
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| Loaded Icons.
2014/07/03 22:11:57| HTCP Disabled.
2014/07/03 22:11:57| Pinger socket opened on FD 13
2014/07/03 22:11:57| Squid plugin modules loaded: 0
2014/07/03 22:11:57| Adaptation support is off.
2014/07/03 22:11:57| Accepting NAT intercepted HTTP Socket connections at local=0.0.0.0:3128 remote=[::] FD 11 flags=41
2014/07/03 22:11:57| Done reading /opt/squid/cache swaplog (2 entries)
2014/07/03 22:11:57| Finished rebuilding storage from disk.
2014/07/03 22:11:57|         2 Entries scanned
2014/07/03 22:11:57|         0 Invalid entries.
2014/07/03 22:11:57|         0 With invalid flags.
2014/07/03 22:11:57|         2 Objects loaded.
2014/07/03 22:11:57|         0 Objects expired.
2014/07/03 22:11:57|         0 Objects cancelled.
2014/07/03 22:11:57|         0 Duplicate URLs purged.
2014/07/03 22:11:57|         0 Swapfile clashes avoided.
2014/07/03 22:11:57|   Took 0.08 seconds ( 24.94 objects/sec).
2014/07/03 22:11:57| Beginning Validation Procedure
2014/07/03 22:11:57|   Completed Validation Procedure
2014/07/03 22:11:57|   Validated 2 Entries
2014/07/03 22:11:57|   store_swap_size = 12.00 KB
2014/07/03 22:11:57| ERROR: No forward-proxy ports configured.
2014/07/03 22:11:57| pinger: Initialising ICMP pinger ...
2014/07/03 22:11:57| pinger: ICMP socket opened.
2014/07/03 22:11:57| pinger: ICMPv6 socket opened
2014/07/03 22:11:57| Pinger exiting.
2014/07/03 22:11:58| storeLateRelease: released 0 objects

Iptables Regeln

(vorerst mit Single Interface "eth0")

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Client-Konfiguration

Das Problem ist, dass ich auf meinen Client-Computern mit Squids IP als Gateway und primärem DNS nicht auf das Internet zugreifen konnte , wie unten gezeigt.

Auf einem Ubuntu-Client

auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.3

dns-nameservers 192.168.1.3

Auf einem Windows-Client

Geben Sie hier die Bildbeschreibung ein

Wenn ich DNS auf dem Ubuntu-Client in dns-nameservers 192.168.1.1& Windows-Client auf dieselbe IP-Adresse des Routers 192.168.1.1anstelle der Squid-IP (192.168.1.3) ändere, kann ich auf beiden auf das Internet zugreifen. Dies ist möglicherweise nicht der richtige Weg, da die Seite möglicherweise direkt vom Router gerendert wird und möglicherweise nicht vom Squid-Server mithilfe des Cache (natürlich konnte ich sehen, dass die Protokolle in /var/log/squid3/cache.log generiert werden). Ich habe auch festgestellt, dass mein Router für die Seiten, auf die bereits zugegriffen wird, blinkt. Dies kann bedeuten, dass er die Anforderung über das Internet sendet, anstatt sie aus dem Squid-Cache abzurufen.

Ich bin immer noch nicht kompromittiert. Wenn ich weiterhin über den Cache, in dem das Internet heruntergefahren wurde, auf die besuchten Seiten auf meinen Client-Computern zugreifen könnte, wäre ich zufrieden.

Wie werden Clients für Squid Transparent Proxy konfiguriert?

Update 1

root@ubuntu:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:192.168.1.3:3128
    0     0 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3128

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth0    192.168.1.0/24       0.0.0.0/0

Update 2

Es funktioniert in der vorherigen Ausgabe Ubuntu 10.04(lucid)mit der Squid-Version Squid Cache: Version 2.7.STABLE7, und unten ist die Squid-Konfigurationsdatei, die funktioniert, und ich konnte auf Client-Computern auf das Internet zugreifen, wenn das Client-Gateway und der DNS auf die IP-Adresse von lucid eingestellt sind:

root@lucid:~# grep -v '^$\|^\s*\#' /etc/squid/squid.conf
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl mynet src 192.168.1.0/24    # RFC1918 possible internal network
acl SSL_ports port 443      # https
acl SSL_ports port 563      # snews
acl SSL_ports port 873      # rsync
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl Safe_ports port 631     # cups
acl Safe_ports port 873     # rsync
acl Safe_ports port 901     # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow mynet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 8 MB
maximum_object_size_in_memory 32 KB
cache_dir ufs /var/spool/squid 2000 16 256
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Package(.gz)*)$    0   20% 2880
refresh_pattern .       0   20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
offline_mode on
coredump_dir /var/spool/squid

Ich bin mir nicht sicher, warum es Ubuntu 14.04mit der Squid-Version nicht funktioniert Squid Cache: Version 3.3.8. Ich vermisse definitiv einige Einstellungen in der neuen Version von Squid oder in New Destro!.

user53864
quelle
1
Ich sage vielleicht das Offensichtliche, aber ist es nicht der springende Punkt einer transparenten Proxy-Konfiguration, dass Sie die Clients NICHT konfigurieren?
HBruijn
Nein, ich habe gerade die Serverkonfigurationen erwähnt, wenn das Problem besser behoben werden könnte.
user53864
Ich verstehe nicht, wie man Squid-Clients konfiguriert. Ich konnte auf dem Client nicht auf das Internet zugreifen, wenn ich die IP-Adresse von squid (192.168.1.3) als Gateway und primären DNS-Server verwendete. Ich denke, dies ist der richtige Weg, um Clients zu konfigurieren!
user53864
Keine Warnungen oder Fehlermeldungen von squid3 -k parse, es ist alles sauber.
user53864
Was ist die Ausgabe dieses Befehls: "iptables -t nat -L -n -v"?
TBI Infotech

Antworten:

11

Ich bin mir nicht sicher, aber bitte schauen Sie sich diese Checkliste an:

Bearbeiten Sie die Datei squid.conf und ändern Sie die folgende Zeile, um den transparenten Proxy-Modus zu aktivieren:

http_port 3128

to

http_port 3128 intercept

Service Squid Neustart Service Squid Reload

Fügen Sie einen Eintrag zur NAT-Tabelle von iptables hinzu, um eingehenden Datenverkehr auf der internen Schnittstelle (LAN-Seite) an den Squid-Server auf Port 3128 weiterzuleiten (vorausgesetzt, eth0 ist die interne Schnittstelle mit der IP-Adresse 192.168.1.3

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to (Forts.) 192.168.1.3:3128

Jetzt können Sie Ihre iptables, die Standardfiltertabelle und die nat-Tabelle mit den folgenden Befehlen anzeigen

iptables -L -t filter

iptables -L -t nat

Jetzt können Sie die iptable-Filtertabelle mit den folgenden Befehlen hinzufügen (anhängen), um Eingaben an Port 3128 für Squid zu akzeptieren

iptables -t Filter -A INPUT -p tcp --dport 3128 -j ACCEPT

Versuchen Sie dies auch

Sie benötigen in der Konfiguration sowohl einen Intercept- als auch einen Forward-Proxy-Port, auch wenn Sie keinen Forward-Proxy verwenden:

http_port 3129

http_port 3128 abfangen

Hinweis : Die Option "transparent" ist seit 2010 durch die Option "abfangen" veraltet.

TBI Infotech
quelle
Ich habe es bereits geändert, interceptwie von HBruijn vorgeschlagen. Iptables nat-Regeln sind bereits vorhanden und INPUT to Proxy Server ist für keinen Port / keine Quelle blockiert. Alle eingehenden Pakete sind vorerst zulässig.
user53864
Können Sie Port 3129 anstelle von 3128 als http_port 3129-Intercept überprüfen?
TBI Infotech
@ user53864 überprüfen Sie die aktualisierte Antwort
TBI Infotech
Ich habe es versucht!, Kein Glück, das Ergebnis ist das gleiche. Ich habe es mit 3129 Port im Tintenfisch versucht und auch die iptables-Regeln durch den neuen Port ersetzt. Ich konnte auf meinen Client-Computern immer noch nicht auf das Internet zugreifen.
user53864
Nachdem Sie beide in squid.conf hinzugefügt haben, wird der Protokollbericht von squid angezeigt. http_port 3129 http_port 3128 abfangen
TBI Infotech
1

Laut Squid WiKi haben Sie die falsche Einstellung in der Option http_port , bei Squid 3.1+ und DNAT sollte es interceptstattdessen sein transparent.

http_port 3128 intercept

Obwohl die Ausgabe Ihres Squid-Protokolls anscheinend darauf hinweist, dass abgefangene Sockets aktiv sind.

Eine zweite Sache ist, dass der Linux-Server die TCP-IP-Weiterleitung mit zulassen muss sysctl net.ipv4.ip_forward=1

HBruijn
quelle
Ich habe die Einstellungen in geändert intercept. Das Ergebnis ist dasselbe, dass ich auf Clients mit 192.168.1.3Gateway und primärem DNS nicht auf das Internet zugreifen konnte . Ja, die TCP-IP-Weiterleitung ist in der Datei sysctl.conf aktiviert.
user53864
Was ist eigentlich der richtige Weg, um den Squid-Client einzurichten? Sollte der DNS die IP von Squid (192.168.1.3) oder die IP des allgemeinen Routers (192.168.1.1) sein?
user53864
Das normale Setup besteht darin, dass der Router / das Standard-Gateway, das ein Client auf seiner DHCP-Anforderung empfängt, über eine Umleitungsregel verfügt, die ausgehenden Datenverkehr zum TCP-Port 80 abfängt und diese Pakete an den transparenten Proxy umleitet. Dort werden sie verarbeitet und die Ergebnisse an den Kunden zurückgegeben. Das verwendete DNS spielt keine Rolle.
HBruijn
Es sollte also nur mit der Gateway-Einstellung auf den Clients funktionieren. Ich weiß immer noch nicht, warum ich auf Clients nicht auf das Internet zugreifen konnte.
user53864
Ich habe meinen Beitrag aktualisiert!
user53864
1

Fehler: No forward-proxy ports configure(in /var/log/squid3/cache.log)

Wiki lesen .

Nach meiner Erfahrung benötigt ein transparenter Proxy einen NAT-Port in squid.conf(beide)

 http_port 3128
 http_port 8080 intercept
sebix
quelle
0

Nachdem ich der Option "http_port" nur "intercept" hinzugefügt habe, treten immer noch Probleme in Kombination mit dem iptables-Umleitungsmodus auf, wenn Clients für die Verwendung eines Proxys konfiguriert sind:

"FEHLER: Keine Forward-Proxy-Ports konfiguriert." und "WARNUNG: Weiterleitungsschleife erkannt für:"

Nachdem ich die obigen Aussagen durchgearbeitet habe, verwende ich dies als das beste Ergebnis jetzt:

a) Verwenden Sie einen doppelten Port-Eintrag in squid.conf wie folgt:

http_port 8080
http_port 3128 intercept

Dadurch wird Port 8080 als normaler Weiterleitungsport für die clientseitige Konfiguration dargestellt und ein zweiter Port zum Weiterleiten von umgeleitetem Datenverkehr bereitgestellt.

b) Verwenden Sie eine iptables-Regel wie folgt:

iptables -A PREROUTING -t NAT -i $LAN_IF -p tcp --dport 80 -j REDIRECT --to-port 3128

Auf diese Weise haben Sie einen klassischen Proxy-Port (8080), den Sie auf Ihren Clients konfigurieren können, und einen erzwingenden Port für unverschlüsselten Datenverkehr.

Warum sollten Sie das tun wollen? Nun, wenn Sie nicht möchten, dass HTTPS-Verkehr den Proxy umgeht (die Notwendigkeit, normale Clients zu konfigurieren) und wenn Sie weniger intelligente Geräte oder Programme unterstützen möchten, aber nicht konfigurieren möchten (oder können).

BlueStar88
quelle
Auf Raspbian (und wahrscheinlich auch auf anderen) gibt der Befehl iptables den Fehler "iptables v1.4.21: iptables-Tabelle` NAT 'kann nicht initialisiert werden: Tabelle existiert nicht (müssen Sie insmod?) Möglicherweise müssen iptables oder Ihr Kernel aktualisiert werden . ". Durch Ändern von "-t NAT" in "-t nat" wird dies behoben.
Glennr
-1

In Ubuntu 14.04 Squid Transparent Proxy Version: 3.3.8 müssen Sie transparent aus der Konfiguration entfernen http_port 3128 Ich meine, lassen Sie einfach

http_port 3128

nicht

http_port 3128 transparent

aus irgendeinem Grund funktioniert jetzt nicht.

Geyson Rodriguez
quelle
-2

mit:

http_port 3128
http_port 8080 intercept

Es klappt

(Fehler: In /var/log/squid3/cache.log sind keine Forward-Proxy-Ports konfiguriert.)

mpman077
quelle