Reglas de iptables: servicios de reenvío/enmascaramiento usando la tabla nat

Reglas de iptables: servicios de reenvío/enmascaramiento usando la tabla nat

Necesito completar un ejercicio en iptablesuna red (contenedores acoplables) configurada de la siguiente manera:

  1. Un routerhost con 2 interfaces de red ( eth0 <- public 10.9.0.0/24; eth1 <- lan 192.168.60.0/24; está routeren x.x.x.254ambas redes) y un servidor SSH en el puerto predeterminado 22;
  2. Un jumpboxhost lancon IP 192.168.60.10, con SSH y TELNET en los puertos predeterminados 22 y 23;
  3. Un adminhost publiccon IP 10.9.0.2.

Una de las solicitudes que nos hacen es el reenvío/enmascaramiento de los servicios SSH (en el puerto 2222) y TELNET del jumboxhost a través routerdel adminhost.
El problema es que no puedo redirigir estos puertos, la conexión permanece en espera perpetua (creo que porque los paquetes de retorno no están configurados correctamente).
Actualmente mi configuración es la siguiente (ver ADMIN'S RULES):

#!/bin/bash

# Reset IPv4 rules
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Set default policies for chains
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Allow loopback traffic
iptables -A INPUT -i lo -j ACCEPT

# Allow traffic for ongoing connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# ====================== #
#  NAT INTERNAL NETWORK  #
# ====================== #

# Masquerade internal network hosts
iptables -t nat -A POSTROUTING -s 192.168.60.0/24 -o eth0 -j MASQUERADE

# Forward internal network requests to external network
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT


# =============== #
#  ADMIN'S RULES  #
# =============== #

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A POSTROUTING -s 192.168.60.10 -p tcp --sport 22   -j SNAT --to 10.9.0.254:2222
iptables -t nat -A PREROUTING  -s 10.9.0.2      -p tcp --dport 2222 -j DNAT --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2      -p tcp --dport 22   -j ACCEPT

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A POSTROUTING -s 192.168.60.10 -p tcp --sport 23 -j SNAT --to 10.9.0.254
iptables -t nat -A PREROUTING  -s 10.9.0.2      -p tcp --dport 23 -j DNAT --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2      -p tcp --dport 23 -j ACCEPT

¿Alguien podría indicarme la solución?
Gracias de antemano.


EDITAR:

Después de varios intentos logré mi intento con estos comandos:

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254    -p tcp --dport 2222 -j DNAT   --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -p tcp --dport 22   -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10 -p tcp --dport 22   -j SNAT   --to 192.168.60.254

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254    -p tcp --dport 23 -j DNAT   --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -p tcp --dport 23 -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10 -p tcp --dport 23 -j SNAT   --to 192.168.60.254

Ahora el problema es que si intento conectarme usando la IP interna:

$ telnet 192.168.60.10 23  # or
$ ssh -p2222 192.168.60.10

Puedo hacer esto, perotengo que bloquear este comportamiento.

Respuesta1

Pude lograr mi objetivo con las siguientes reglas:

# ...

# Allow 'admin' connection to 'jumpbox' SSH (on 2222 port)
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254                                -p tcp --dport 2222 -j DNAT   --to 192.168.60.10:22
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -m conntrack --ctstate DNAT -p tcp --dport 22   -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10                             -p tcp --dport 22   -j SNAT   --to 192.168.60.254

# Allow 'admin' connection to 'jumpbox' TELNET
iptables -t nat -A PREROUTING  -s 10.9.0.2 -d 10.9.0.254                                -p tcp --dport 23 -j DNAT   --to 192.168.60.10
iptables        -A FORWARD     -s 10.9.0.2 -d 192.168.60.10 -m conntrack --ctstate DNAT -p tcp --dport 23 -j ACCEPT
iptables -t nat -A POSTROUTING             -d 192.168.60.10                             -p tcp --dport 23 -j SNAT   --to 192.168.60.254

información relacionada