
No tengo el enrutador, así que convertí mi sistema Linux CentOS 6.4 en un enrutador, reenviando el tráfico de la red pública a mi LAN local. Dispone de dos tarjetas NIC, una para la dirección IP pública (eth1) y otra para la dirección IP privada (eth2).
Tengo un servidor conectado a mi LAN local, digamos en 192.168.1.2
.
Enrutador
- eth1:
x.x.x.x
, la dirección IP pública - eth2:
192.168.1.1
, la dirección interna del enrutador
Cuando alguien de una red externa ejecuta ssh en la IP pública, debe ser redirigido al servidor:
ssh x.x.x.x
o usandoMasilla
Deshabilité el firewall SELinux e iptables en el servidor. Probé algunas modificaciones de iptables en el enrutador del sistema Linux, pero la solicitud SSH aún no se redirige:
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 22 -j DNAT --to-destination 192.168.1.2:22
También quiero reenviar todo el tráfico HTTP (80) a mi servidor interno usando iptables desde el mismo enrutador del sistema Linux.
Respuesta1
En primer lugar, asegúrese de que el reenvío de paquetes esté habilitado en el kernel.
# echo 1 > /proc/sys/net/ipv4/ip_forward
También puede hacerlo permanente agregando la siguiente línea a/etc/sysctl.conf
net.ipv4.ip_forward = 1
Tienes que hacer esto en una máquina Linux que actúe como enrutador. Puede probar la siguiente regla en la máquina enrutadora.
iptables -t nat -A PREROUTING -i eth1 -d x.x.x.x -p tcp --dport 22 -j DNAT --to-destination 192.168.1.2:22
También háganos saber el resultado de sus reglas NAT desde la caja del enrutador.
iptables -t nat -L -n -v
Respuesta2
Basado en este sorprendenteOcéano Digitaldel tutorial sobre cómo reenviar puertos, decidí reescribirlo aquí.
Pasé muchas horas investigando cómo funciona esto. Soy nuevo en Linux y los comienzos no siempre son fáciles. Aquí hay un ejemplo de mis servidores y su reenvío de puertos:
Servidor firewall (2 tarjetas NIC) - detalles de la red:
- Dirección IP pública:xx.xx.xx.xx
- Dirección IP privada:yy.yy.yy.yy
- Interfaz pública:eth0
- Interfaz privada:eth1
Interno(por ejemplo, ssh, web) servidor (1 tarjeta NIC) - detalles de la red:
- Dirección IP privada:zz.zz.zz.zz
- Interfaz privada:eth0
Solución:
Habilite el reenvío de paquetes en el kernel:
echo 1 > /proc/sys/net/ipv4/ip_forward
Definir variables:
# Admin IP address (e.g. public home ip)
ADMIN="aa.aa.aa.aa"
# IP addresses of servers (e.g. in cloud):
FW_eth0_ip="xx.xx.xx.xx"
FW_eth1_ip="yy.yy.yy.yy"
WEB_eth0_ip="zz.zz.zz.zz"
# Services:
SSH="22"
HTTP="80"
Reenvío de puertos de Iptables (con -m conntrack):
iptables -t nat -A PREROUTING -i eth0 -s $ADMIN -d $FW_eth0_ip -p tcp --dport $SSH -j DNAT --to-destination $WEB_eth0_ip
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport $SSH -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport $SSH -d $WEB_eth0_ip -j SNAT --to-source $FW_eth1_ip
Algunas notas:
- "..-s $ADMIN -d $FW_eth0_ip.." (primera fila) - agregado solo por razones de seguridad - significa que solo la IP ADMIN puede acceder a SSH (si no es necesario, puede eliminarlo)
- -m pista de conexiónes lo mismo que-m estado
- Recomiendo cambiar el puerto predeterminado de SSH a otro puerto, como 1xxxx (en /etc/ssh/sshd_config)
- controlarLista de números de puertos TCP y UDP
- Utilizo el puerto 15xx1 para acceder a SSH en el servidor Firewall y el 15xxx2 el interno
Terminal:
# access firewall server
$ ssh [email protected] -p 15xx1
# access internal server
$ ssh [email protected] -p 15xx2
Más detalles sobre las reglas utilizadas se describen perfectamente en el tutorial mencionado.
Eso es todo de mi parte, espero que te ayude.
Respuesta3
Aunque esta pregunta es sobre iptables, en caso de que también tenga FirewallD ejecutándose, aquí se explica cómo acceder a HTTP de la red interna.
Primero permita el tráfico http en su servidor interno FirewallD:
# firewall-cmd --permanent --add-service=http
Luego reenvíe el tráfico http desde la ip externa al puerto 80 de la ip interna:
# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=10.0.0.11
Se puede hacer lo mismo con el servicio SSH.
Respuesta4
En primer lugar, habilite el enrutamiento en la puerta de enlace de Linux:
echo 1 > /proc/sys/net/ipv4/ip_forward
Luego agregue las siguientes reglas con su interfaz de red (es decir, eth1) y los puertos deseados:
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.2
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.2
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Verifique sus reglas con iptables -L -v
, las columnas de paquetes y bytes le mostrarán qué reglas coinciden.