Proper port forwarding (ie. ssh)
The snippet can be accessed without any authentication.
Authored by
uıןǝnbsɐW ןǝɐʞɔıW
Ce snippet décrit comment mettre en place du forward de port. En exemple, on prend un cas d'utilisation avec ssh (tcp/22).
Architecture
Machine dans la DMZ
Serveur avec 2 cartes réseaux. Le détail :
- Adresse IP publique : xxx.xxx.xxx.xxx
- Adresse IP privée : yyy.yyy.yyy.yyy
- Interface publique : eth0
- Interface privée : eth1
Serveur avec 1 seule carte réseau. Le détail :
- Adresse IP privée : zzz.zzz.zzz.zzz
- Interface privée : eth0
Setup
1. Activer le forwarding de paquets
echo 1 > /proc/sys/net/ipv4/ip_forward
Pour que cela soit permanent (càd après reboot) :
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
2. Appeler le script
./sample.sh
(au préalable /bin/chmod +x
)
La section
... -s $ADMIN_IP -d $DMZ_eth0_ip ...
est ajoutée uniquement à des fins de sécurité. Cela signifie que seule cette machine peut se connecter à ssh sur port tcp/22. Elle peut être retirée.
sample.sh 861 B
#!/bin/bash
# Adresse IP d'un poste administrateur :
ADMIN_IP="aaa.aaa.aaa.aaa"
# Adresse IP des serveurs :
DMZ_eth0_ip="xxx.xxx.xxx.xxx"
DMZ_eth1_ip="yyy.yyy.yyy.yyy"
WEB_eth0_ip="zzz.zzz.zzz.zzz"
# Services:
SSH="22"
# Gestion du port forwarding avec iptables (en CLI)
/usr/sbin/iptables -t nat -A PREROUTING -i eth0 -s $ADMIN_IP -d $DMZ_eth0_ip -p tcp --dport $SSH -j DNAT --to-destination $WEB_eth0_ip
/usr/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport $SSH -m conntrack --ctstate NEW -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
/usr/sbin/iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
/usr/sbin/iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport $SSH -d $WEB_eth0_ip -j SNAT --to-source $DMZ_eth1_ip
Please register or sign in to comment