¿Es posible reenviar el tráfico de un puerto a otro fuera de la caja?

2

Tengo un Oracle dbms en una máquina remota de Linux (aws linux, debería ser similar a rhel).

Desafortunadamente, la red en la que estoy solo permite el tráfico saliente al puerto 80,443 y 22.

Como estamos hablando de una máquina de prueba, me gustaría hacer una configuración para que cada tráfico entrante en el puerto 80 se envíe inmediatamente al puerto 1521.

No puedo usar un proxy http, ya que el tráfico sería el tráfico del protocolo oracle personalizado en el puerto 1521, pero escuché que Linux permite simplemente reenviarlo de forma inmediata. ¿Podrías decirme cómo hacer esto? Gracias

Phate
fuente
Debería poder hacer esto de forma inmediata con netfilter (iptables). Pero no estoy familiarizado con el comando exacto.
Cliff Armstrong

Respuestas:

2

Una forma de hacerlo (desafortunadamente no 'fuera de la caja' como usted menciona) es usar un programa llamado socat. Es accesible en la mayoría de los repositorios de paquetes, por lo que podría usarlo yum install socaten su escenario (en Debian, apt install socatfunciona).

El comando usado es socat tcp-listen:[public accessible port],reuseaddr,fork tcp:localhost:[actual port]. En su caso, lo sería sudo socat tcp-listen:80,reuseaddr,fork tcp:localhost:1521. (Tenga en cuenta que puede necesitar privilegios de superusuario dependiendo de su configuración).

Para más respuestas, puedes mirar aquí .

Wesley Chalmers
fuente
2

Advertencia justa, no soy experto en netfilter (iptables).

Cualquier distribución respetable del servidor Linux debe tener instalado netfilter y habilitado en su núcleo. Netfilter le permite enrutar, bloquear y manipular paquetes que entran y salen de su sistema. Intente ejecutar esto como root en la máquina del servidor:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 1521

Es posible que deba cambiar eth0 al nombre de dispositivo correcto para el adaptador LAN del servidor. Esto debería ocasionar que Oracle DBMS reciba los paquetes que ingresan en el puerto 80 que escuchan en el puerto 1521.

Seguí y busqué qué hacen estas opciones (porque no estoy muy familiarizado con la administración de netfilter a mano). Leme lo descompone:

-t nat -A PREROUTING

Esto selecciona la tabla NAT y agrega ( -A) la nueva regla a la cadena PREROUTING de la tabla NAT. En general, cuando redirige de un puerto a otro, eso pertenece a la tabla NAT. La cadena PREROUTING ocurre muy temprano cuando Netfilter procesa los paquetes entrantes. Es la primera cadena de paquetes entrantes, por lo general.

-i eth0 -p tcp -dport 80

Estas son la parte de filtro de la regla. Le estamos diciendo en qué interfaz ( -i) y protocolo ( -p) desea que esta regla afecte los paquetes. En este ejemplo, estamos creando una regla para el tráfico tcp en la interfaz eth0. También le estamos diciendo qué puerto de destino ( -dport) debe buscar en los paquetes ... en este caso, paquetes con un puerto de destino de 80 (tcp).

Cuando intente conectarse al puerto 80 de TCP en el servidor con el DBMS de Oracle, los paquetes TCP que envía su máquina tendrán un puerto de destino de 80 en sus encabezados.

--j REDIRECT --to-ports 1521

Esta es la carne de la regla. Aquí le está diciendo que los paquetes que coinciden con los filtros anteriores se deben redirigir ( --j REDIRECT) al puerto 1521 ( --to-ports 1521). Cuando el filtro de red está en el mismo sistema que la aplicación que desea redirigir el tráfico que utiliza REDIRECT. Cuando la aplicación está en otro servidor que usaría en su DNATlugar (y especifica tanto IP como puerto).

Por favor, avíseme si esto funciona.

Estas configuraciones no son persistentes; para que sean persistentes, te sugiero que consideres la instalación iptables-persistent. Puede encontrar más información aquí en StackOverflow .

Acantilado
fuente
Lo intentaré de inmediato, gracias! ¿Esta configuración es persistente o se perdería después de reiniciar? En el primer caso, ¿también podría decirme cómo hacerlo retroceder?
Phate