Nastavil jsem místní transparentní TCP proxy na localhost
. Chci přesměrovat VŠECHNY TCP provoz na tento proxy, aby to zvládl a nic „neuniklo“ a neobcházelo proxy. Potřebuji použít IPTables k přesměrování provozu. Přemýšlel jsem o použití TPROXY, ale to vyžaduje podporu aplikací a v tuto chvíli je podporován pouze cíl REDIRECT.
Použil jsem následující pravidla IPTables:
iptables -t nat -A OUTPUT -o lo -j RETURN
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A OUTPUT -m owner --uid-owner proxy-owner -j RETURN
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $PROXY_PORT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner proxy-owner -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j LOG
iptables -P OUTPUT DROP
Vypadají fungovat dobře, ale jsem zmatený, proč.
Zde jsou dvě otázky, na které stále neznám odpověď:
1) Pokud jde o poslední pravidlo v tabulce NAT, proč chci přesměrovat pakety SYN pouze na místní port proxy (--syn
)?
Chci přesměrovat VŠECHNY TCP pakety. V aktuální konfiguraci se zdá, že pouze paket SYN
je přesměrován na místní proxy a všem ostatním paketům je povoleno proudit přímo do cíle, což vede (teoreticky) k úplnému nepořádku (nebo jsou všechny kromě SYN blokováno tabulkou filtrů).
Pokud však vypustím --syn
volbu a přesměrovat VŠECHNY pakety na lokální proxy, proxy vůbec nefunguje. Proč?
2) Pokud jde o 4. pravidlo v tabulce filtrů, proč musím výslovně povolit odchozí navázaná připojení? Proxy je jediná aplikace, která stejně může posílat pakety do destinací mimo místního hostitele a už to má povoleno (pravidlo 3), tak k čemu potřebuji čtvrté pravidlo? Zdá se, že umožňuje připojením bez proxy obejít proxy.
Děkuji!
Přijatá odpověď:
Obě části vaší otázky jsou propojené.
Část (1) zachytí paket SYN a přesměruje jej, jak navrhujete. Od tohoto bodu conntrack (2) převezme a rozpozná, že každý následující paket v tomto proudu je součástí stejného připojení a přesměruje jej stejným způsobem jako původní paket SYN.
Související:Změnit prostředí běžícího procesu?Přehled sledování připojení lze nalézt na adrese http://en.wikipedia.org/wiki/Netfilter#Connection_Tracking