GNU/Linux >> Znalost Linux >  >> Linux

Iptables a transparentní proxy?

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


Linux
  1. Jak funguje vstup z klávesnice a textový výstup?

  2. Omezit najít výstup a vyhnout se signálu 13?

  3. Co znamená propojení Stdout a Stdin?

  1. Zachycovat vstup a výstup z konkrétního spustitelného souboru?

  2. Přesměrování výstupu příkazu do souboru a terminálu

  3. Různé barvy pro příkaz a výstup

  1. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  2. Blokování černé listiny hostitelů a iptables

  3. Iptables – řetězec Bridge a Forward