Sur la base de cette étonnante DigitalOcean sur la façon de transférer des ports, j'ai décidé de le réécrire ici.
J'ai passé de nombreuses heures à faire des recherches sur la façon dont cela fonctionne Je suis nouveau sous linux et les débuts ne sont pas toujours faciles Voici un exemple de mes serveurs et de sa redirection de port :
Serveur pare-feu (2 cartes NIC) - détails du réseau :
- Adresse IP publique : xx.xx.xx.xx
- Adresse IP privée : yy.yy.yy.yy
- Interface publique : eth0
- Interface privée : eth1
Interne (par exemple, ssh, web) (1 carte NIC) - détails du réseau :
- Adresse IP privée : zz.zz.zz.zz
- Interface privée : eth0
Solution :
Activer le transfert de paquets dans le noyau :
echo 1 > /proc/sys/net/ipv4/ip_forward
Définir les 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"
Iptables port forwarding (avec -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
Quelques notes :
- "..-s $ADMIN -d $FW_eth0_ip " (1ère ligne) - ajouté uniquement pour des raisons de sécurité - cela signifie que seule l'IP ADMIN peut accéder à SSH (si ce n'est pas nécessaire, vous pouvez le supprimer).
-
-m conntrack est identique à -m état
- Je recommande de changer le port par défaut de SSH pour un autre port, comme 1xxxx (dans /etc/ssh/sshd_config).
- vérifier Liste des numéros de port TCP et UDP
- J'utilise le port 15xx1 pour accéder à SSH sur le serveur Firewall, et le port 15xxx2 pour l'accès interne.
Terminal :
# access firewall server
$ ssh sancro@xx.xx.xx.xx -p 15xx1
# access internal server
$ ssh sancro@xx.xx.xx.xx -p 15xx2
Plus de détails sur les règles utilisées sont parfaitement décrits dans le tutoriel mentionné.
C'est tout ce que j'ai à dire, j'espère que cela vous aidera.