Как выполнить команду диалога с процессом? [дубликат]

Su pregunta se divide en dos partes.

  1. ¿Por qué necesitamos la regla de la MASCARADA?.
  2. ¿Por qué tiene que estar en la cadena POSTROUING?.
  3. ¿Hay alguna alternativa?

Para responder a la primera pregunta, primero debemos entender cómo funciona NAT de iptables. Las tablas NAT se utilizan en el primer paquete de una conexión para determinar qué traducciones se deben aplicar a esa conexión. Una vez que se procesa el primer paquete, se crea una entrada en la tabla de asignación interna que se usa para procesar los paquetes posteriores de la conexión, pero una caja solo puede procesar los paquetes que ve.

Así que supongamos que XXX.XXX.XXX.XXX y YYY.YYY.YYY.YYY son servidores en Internet sin un enrutamiento especial configurado. Supongamos que el cliente también está en Internet abierto sin firewalls y tiene una IP de ZZZ.ZZZ.ZZZ.ZZZ. Veamos qué sucede sin la regla MASQURADE.

  • El cliente envía un paquete inicial ZZZ.ZZZ.ZZZ.ZZZ :1234 -> XXX.XXX.XXX.XXX :80
  • El paquete llega al servidor A que realiza NAT de destino, por lo que el paquete ahora es ZZZ.ZZZ.ZZZ.ZZZ :1234 -> YYY.YYY.YYY.YYY :80 crea el seguimiento de la conexión entrada y vuelve a colocar el paquete en la red.
  • El ISP puede bloquear el paquete en este punto por "suplantación de identidad" o puede entregarlo al servidor B. Supongamos que lo entregan al servidor B.
  • El paquete llega al servidor B que elabora una respuesta YYY.YYY.YYY.YYY :80 -> ZZZ.ZZZ.ZZZ.ZZZ :1234
  • Se entrega la respuesta al cliente.
  • El cliente busca la respuesta en su tabla de sockets pero no encuentra una coincidencia y descarta el paquete (posiblemente enviando un error ICMP en respuesta ).

¿Cómo cambia esto si agregamos la regla MASQUERADE?

  • El cliente envía un paquete inicial ZZZ.ZZZ.ZZZ.ZZZ :1234 -> XXX.XXX.XXX.XXX :80
  • El paquete llega al servidor A que realiza NAT de destino y MASQUARADING, por lo que el paquete ahora es XXX.XXX.XXX.XXX :5678 -> YYY.YYY.YYY.YYY :80 lo vuelve a poner en la red.
  • El ISP entrega el paquete al servidor B
  • El paquete llega al servidor B que elabora una respuesta YYY.YYY.YYY.YYY :80 -> XXX.XXX.XXX.XXX :5678
  • La respuesta se entrega al servidor A
  • El servidor A busca el paquete en sus tablas de seguimiento de conexiones y cambia su origen y destino a XXX.XXX.XXX.XXX :80 -> ZZZ.ZZZ.ZZZ.ZZZ :1234
  • La red entrega la respuesta al cliente.
  • El cliente busca la respuesta en su tabla de sockets y encuentra una coincidencia. La conexión se ha establecido correctamente.

Para la pregunta 2 realmente no tengo una respuesta, iptables insiste en que SNAT/MASQUERADE solo se puede hacer en POSTROUTING pero no veo ninguna buena justificación técnica de por qué este debería ser el caso.


Podríamos razonablemente querer evitar el uso de MASQUERADE. Tiene varios problemas, en primer lugar perdemos la información sobre la fuente original del tráfico que nos gustaría tener para el control de abusos. En segundo lugar, el servidor A tiene un suministro limitado de puertos.

Esto se puede solucionar, pero solo si ambos servidores están bajo nuestro control. La solución consta de tres pasos.

  • Establecemos algún tipo de túnel entre los servidores A y B. A los extremos del túnel se les asignan direcciones IP privadas.
  • En el servidor A hacemos DNAT del tráfico a la IP del túnel del servidor B.
  • En el servidor B, usamos enrutamiento de políticas para que el tráfico proveniente de la IP privada del servidor B se envíe por el túnel al servidor A en lugar de enviarse de vuelta a Internet.
3
21.09.2014, 15:25
0 ответов

Теги

Похожие вопросы