Uživatelské nástroje

Nástroje pro tento web


Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

cs:howto:squid_transparent [2016/09/20 13:17] (aktuální)
Řádek 1: Řádek 1:
 +====== Squid v transparentním módu ======
 +
 +Ukázali jsme si, jak nastavit [[squid]]. Toto nastavení ale má jeden drobný
 +problém. Vyžaduje nastavení v každém prohlížeči. To může být u více prohlížečů
 +zbytečně mnoho práce. Navíc, ochuzené prohlížeče na tabletech a telefonech
 +často ani možnost proxy nastavit neposkytují. Je však možné nastavit squid jako
 +takzvanou transparentní proxy. Jednoduše si průchozí spojení ukradne.
 +
 +===== Nevýhody =====
 +
 +Než začneme, je třeba zmínit, že tento přístup má několik nevýhod.
 +
 +První z nich je morální hledisko. V případě, kdy si uživatel nastavil
 +prohlížeč,​ aby použil proxy, dělá tak vědomě. V tomto nastavení mu proxy může
 +do komunikace nahlížet bez jeho vědomí. Pokud se jedná o domácí síť, kde jsou
 +všichni uživatelé informováni,​ problém není. V případě veřejných míst a
 +veřejných sítí je však tato věc značně diskutabilní.
 +
 +Druhým problémem je čistě technická otázka. Přestože se mód proxy jmenuje
 +transparentní,​ komunikaci mění. Pokud by se všechny webové aplikace chovaly dle
 +standardu HTTP, k žádným problémům by nedocházelo. V praxi se ovšem vyskytují
 +stránky, které se k proxy chovají nekorektně a například zobrazují zastaralý,
 +již nacachovaný obsah, nebo mohou ukázat nacachovaná data některého jiného
 +uživatele. V případě proxy nastavené v prohlížeči lze buď proxy na chvíli
 +vypnout, nebo prohlížeč požádat o plné obnovení (obvykle CTRL+F5). Toto
 +však u transparentní proxy nejde, protože o ní prohlížeč neví.
 +
 +===== Nastavení =====
 +
 +Na straně squidu je třeba povolit některý další port, který bude mít speciální
 +mód ''​intercept''​. Je lepší přidat nový port, jednak proto, aby bylo možné
 +prohlížeče nakonfigurovat explicitně a vyhnout se tak některým problémům s
 +transparentní proxy, jednak proto že některé funkce u portu v módu
 +''​intercept''​ nelze použít nebo jsou problematické. Do
 +''/​etc/​squid/​squid.conf''​ tedy přidáme:
 +
 +  http_port 3129 intercept
 +
 +<WRAP center info 80%>
 +Novější verze squid podporují i podobný mód, nazvaný ''​tproxy''​. Ten je v
 +mnohých ohledech lepší, než ''​intercept''​. Bohužel, na OpenWRT v tomto módu
 +squid neumí pracovat ‒ ze zatím nezjištěných důvodů spojení na takovém portu
 +okamžitě zavírá.
 +</​WRAP>​
 +
 +Tato část však pouze instruuje squid, že má přijímat spojení, která mu nepatří.
 +Nyní ale potřebujeme zařídit, aby se k němu tato spojení dostala. K tomu
 +použijeme firewall.
 +
 +Za předpokladu,​ že všechna síťová připojení do domácí sítě končí v bridgi
 +''​br-lan''​ (výchozí nastavení),​ a výše použitý port je 3192, budou příkazy na
 +přesměrování vypadat následovně:​
 +
 +  iptables -t nat -I PREROUTING -i br-lan -p tcp --dport 80 -j REDIRECT --to-port 3129
 +  ip6tables -t nat -I PREROUTING -i br-lan -p tcp --dport 80 -j REDIRECT --to-port 3129
 +
 +Tyto příkazy uložíme do souboru, například do ''/​etc/​squid/​redirect''​. Přidáme
 +spuštění příkazů do ''/​etc/​config/​firewall''​
 +
 +  config include
 +    option path /​etc/​squid/​redirect
 +    option reload 0
 +
 +Nyní restartujte jak squid, tak firewall.
 +
 +  /​etc/​init.d/​squid restart
 +  /​etc/​init.d/​firewall restart
 +
 +===== Transparentní cachování https provozu =====
 +
 +Zde se podíváme na kombinaci transparentní cache z tohoto návodu a
 +[[:​cs:​howto:​squid_https|návodu na cachování https]]. Samozřejmě,​ kombinace má
 +nevýhody obou přístupů. Navíc je trochu sporné, jestli je k něčemu dobrá. Sice
 +není třeba nastavit proxy server, ale je nutné instalovat certifikát do
 +prohlížeče,​ takže se to bez úprav na každém klientovi stejně neobejde. Taktéž,
 +návštěvě nedáváme na výběr, jestli využije služeb proxy, nebo dá přednost
 +soukromí a do spojení si nenechá nahlížet.
 +
 +Předpokládejme,​ že oba módy jednotlivě jsme již nastavili a otestovali. To mimo
 +jiné znamená, že máme v prohlížeči nainstalovanou autoritu.
 +
 +Jednoduše otevřeme další port, na kterém bude jak modifikátor ''​intercept'',​
 +tak ''​ssl-bump''​. Tento port ovšem bude deklarován direktivou ''​https_port'',​
 +neboť komunikace z prohlížeče do proxy běží rovnou přes šifrované spojení. To
 +také znamená, že nemůžeme použít stejný port, jako pro nešifrovanou komunikaci.
 +
 +  https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/​etc/​squid/​ssl_cert/​authority.pem
 +
 +Obdobně jako u portu 80, přesměrujeme i port 443, který se používá pro https
 +(přidat na konec souboru s pravidly, ''/​etc/​squid/​redirect''​):​
 +
 +  iptables -t nat -I PREROUTING -i br-lan -p tcp --dport 443 -j REDIRECT --to-port 3130
 +  ip6tables -t nat -I PREROUTING -i br-lan -p tcp --dport 443 -j REDIRECT --to-port 3130
 +
 +A obě služby restartujeme.
 +
 +  /​etc/​init.d/​squid restart
 +  /​etc/​init.d/​firewall restart
 +
 +===== Přesměrování jen některých klientů =====
 +
 +Někdy se může hodit přesměrovávat jen některé klienty skrz proxy. Například je
 +možné přesměrovat jen telefony, které nedovolují nastavit proxy a počítače
 +nastavit ručně. Nebo naopak přesměrovat všechny klienty s výjimkou těch, které
 +nepodporují nainstalování vlastního certifikátu. Taková nastavení jsou
 +samozřejmě možná a nejjednodušeji se jich dosáhne úpravou firewallu.
 +
 +Pro jemnější nastavení firewallu se hodí mít nějakou zkušenost s
 +[[http://​www.netfilter.org/​|iptables]].
 +
 +V předchozích případech jsme pravidla na přesměrování přidávali na začátek
 +chainu nejvyšší úrovně ''​PREROUTING''​. Nyní si vytvoříme vlastní chain, na
 +jehož konci přesměrujeme potřebné porty do proxy. To nám umožní jednoduše do
 +daného chainu poslat jen některé množiny klientů a naopak z něj předčasně
 +vyhodit klienty-výjimky.
 +
 +Všechny příklady zde patří do souboru s pravidly pro firewall
 +(''/​etc/​squid/​redirect''​). Ty nahrazují jednodušší příklady výše.
 +
 +Napřed vytvoříme chain pro přesměrování:​
 +
 +  iptables -t nat -N squid
 +  ip6tables -t nat -N squid
 +
 +Nyní do něj pošleme některé klienty (zde z rozsahu
 +''​192.168.1.128-192.168.1.255''​ a ''​2001:​db8:​2::/​48''​). Samozřejmě je možné mít
 +více pravidel, která posílají do chainu ''​squid''​ různé množiny klientů:
 +
 +  iptables -t nat -I PREROUTING -i br-lan -s 192.168.1.128/​25 -j squid
 +  ip6tables -t nat -I PREROUTING -i br-lan -s 2001:​db8:​2::/​48 -j squid
 +
 +Dále, jeden z počítačů z tohoto chainu „vystoupí předčasně“,​ aby se
 +přesměrování vyhnul.
 +
 +  iptables -t nat -A squid -s 192.168.1.222 -j RETURN
 +  ip6tables -t nat -A squid -s 2001:​db8:​2::​2222 -j RETURN
 +
 +Případně můžeme filtrovat i podle MAC adresy, což nám pomůže, pokud si zařízení
 +nastavuje různé IPv6 adresy (v anonymním módu). Taktéž, ty jsou stejné pro IPv4
 +i IPv6.
 +
 +  iptables -t nat -I PREROUTING -i br-lan -m mac --mac-source 00:​11:​22:​33:​44:​55 -j squid
 +  ip6tables -t nat -I PREROUTING -i br-lan -m mac --mac-source 00:​11:​22:​33:​44:​55 -j squid
 +
 +A nakonec, všem zbylým počítačům přesměrujeme port 80 do proxy:
 +
 +  iptables -t nat -A squid -p tcp --dport 80 -j REDIRECT --to-port 3029
 +  ip6tables -t nat -A squid -p tcp --dport 80 -j REDIRECT --to-port 3029
 +
 +<WRAP center tip 80%>
 +Zatímco v předchozích příkladech jsme přidávali na začátek ''​PREROUTING''​
 +pomocí ''​-I'',​ zde přidáváme na konec ''​squid''​ pomocí ''​-A''​. Na relativním
 +pořadí pravidel uvnitř jednoho chainu záleží, vykonávají se od začátku.
 +</​WRAP>​