GNU/Linux >> Tutoriales Linux >  >> Linux

¿Iptables y proxies transparentes?

Configuré un proxy TCP local y transparente en localhost . Quiero redirigir TODO el tráfico TCP a este proxy, para que pueda manejarlo y nada se “filtre”, eludiendo el proxy. Necesito usar IPTables para redirigir el tráfico. Pensé en usar TPROXY, pero eso requiere compatibilidad con la aplicación y, por el momento, solo se admite el destino REDIRECT.

He usado las siguientes reglas de 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

Ellos parecen funcione bien, sin embargo, no sé por qué.

Aquí hay dos preguntas para las que todavía no sé la respuesta:

1) Con respecto a la última regla en la tabla NAT, ¿por qué solo quiero redirigir paquetes SYN al puerto proxy local (--syn )?
Quiero redirigir TODOS los paquetes TCP. En la configuración actual, parece que solo el paquete SYN
se redirige al proxy local, y todos los demás paquetes pueden fluir directamente al destino, lo que lleva (en teoría) a un desorden total (o todos, excepto SYN, son bloqueado por la tabla de filtros).
Sin embargo, si dejo caer el --syn opción y redirige TODOS los paquetes al proxy local, el proxy no funciona en absoluto. ¿Por qué?

2) Con respecto a la cuarta regla en la tabla de filtros, ¿por qué necesito permitir explícitamente las conexiones salientes establecidas? De todos modos, el proxy es la única aplicación que puede enviar paquetes a destinos que no son host local, y ya puede hacerlo (regla 3), entonces, ¿para qué necesito la cuarta regla? Parece que permite que las conexiones que no son de proxy eludan el proxy.

¡Gracias!

Respuesta aceptada:

Ambas partes de su pregunta están vinculadas.

La parte (1) captura un paquete SYN y lo redirige como sugiere. Desde este punto, conntrack (2) asume el control y reconoce que cada paquete subsiguiente en ese flujo es parte de la misma conexión y lo redirige de la misma manera que el paquete SYN original.

Relacionado:¿Cambiar el entorno de un proceso en ejecución?

Puede encontrar una descripción general del seguimiento de conexiones en http://en.wikipedia.org/wiki/Netfilter#Connection_Tracking


Linux
  1. Cómo redirigir la salida a un archivo y salida estándar en Linux

  2. 2>&1 y comprender las expresiones idiomáticas de otros scripts de shell

  3. ¿Cómo funcionan la entrada de teclado y la salida de texto?

  4. ¿Qué significa conectar Stdout y Stdin?

  5. ¿Redirigir y canalizar la salida?

16 consejos y trucos de iptables para administradores de sistemas

50 reglas de IPtables útiles y simples para el administrador de Linux

Explicado:entrada, salida y redirección de errores en Linux

¿Cuál es la diferencia entre las cadenas OUTPUT y FORWARD en iptables?

readlink -f y -e descripción de la opción no clara

¿Depuración de iptables y trampas comunes de firewall?