¿Cómo puedo redirigir el tráfico saliente al puerto 80 usando iptables localmente?
19
Estoy tratando de redirigir localmente los puertos en mi máquina Ubuntu usando iptables. Similar al proxy transparente. Quiero atrapar cualquier cosa que intente dejar mi sistema en el puerto 80 y redirigirlo a un host y puerto remotos.
¿Puedo lograr esto usando las funciones NAT y de enrutamiento previo de iptables?
Agregue la siguiente regla a la tabla NAT ( -t nat).
Esta regla se agregará ( -A) al tráfico saliente ( OUTPUT).
Solo nos interesa el tráfico TCP ( -p tcp).
Solo nos interesa el tráfico cuyo puerto de destino es 80 ( --dport 80).
Cuando tengamos una coincidencia, salte a DNAT ( -j DNAT).
Dirija este tráfico al puerto IP @ de algún otro servidor 80 ( --to-destination IP:80).
¿Qué es DNAT?
DNAT
This target is only valid in the nat table, in the PREROUTING and OUTPUT
chains, and user-defined chains which are only called from those chains.
It specifies that the destination address of the packet should be modified
(and all future packets in this connection will also be mangled), and
rules should cease being examined.
¿Es porque esto es localmente y no a través de una puerta de enlace? Tu SNAT funcionaría a través de una puerta de enlace?
pjf
@pjf: eso creo. He actualizado mi respuesta.
slm
@pjf: encontré ambas reglas y estaba en el proceso de actualizar mi respuesta con ambas. Sin embargo, no estaba seguro de en qué situación estabas.
slm
6
Esto puede hacerse más específico para operar solo en el tráfico a un host de destino particular. Por ejemplo, cuando Postfix cometió un error y los correos en cola quieren ser enviados a una antigua dirección IP.
Esto puede permitirle traducir puertos a todas las direcciones IP. La principal diferencia aquí es la ausencia de una dirección IP en el --to-destinationcampo.
Consejo muy útil; exactamente lo que necesitaba ¿Hay alguna manera de incrementar el número de puerto? Digamos que tengo un rango de 100 puertos y quiero aumentarlos a todos en una cantidad específica.
Zdenek,
No estoy seguro de lo que quieres decir. ¿Podrías escribir un bucle for en Bash?
Felipe Alvarez
Un bucle que agrega 100 reglas de iptables funcionaría, pero lo ralentizaría. Prefiero poder decirle que incremente muchos puertos sucesivos en una sola regla.
Zdenek
@ Zdenek No sé si eso es posible con iptables. ¿Has mirado firewalld?
Esto puede hacerse más específico para operar solo en el tráfico a un host de destino particular. Por ejemplo, cuando Postfix cometió un error y los correos en cola quieren ser enviados a una antigua dirección IP.
fuente
Esto puede permitirle traducir puertos a todas las direcciones IP. La principal diferencia aquí es la ausencia de una dirección IP en el
--to-destination
campo.fuente
firewalld
?