1 votes

Impossible de transférer le port local vers un autre port local

Essayer de transférer un port local vers un autre port local 7777 -> 55555

# ufw disable
# iptables -t nat -A PREROUTING -p tcp -i enp58s0f1 --dport 7777 -j DNAT --to-destination 192.168.47.5:3000
# iptables -t nat -A POSTROUTING -o enp58s0f1 -j MASQUERADE
# iptables -A FORWARD -i enp58s0f1 -j ACCEPT

# curl -s -I 192.168.47.5:3000 | head -1
HTTP/1.1 302 Found

# curl 192.168.47.5:7777
curl: (7) Failed to connect to 192.168.47.5 port 7777: Connection refused

# cat /proc/sys/net/ipv4/ip_forward
1

# cat /proc/sys/net/ipv4/conf/enp58s0f1/forwarding
1

J'ai également essayé le transfert de port dans ufw, en réinitialisant d'abord les règles ufw et en ajoutant ce qui suit au début de /etc/ufw/before.rules

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 3000
COMMIT

Voici la sortie de iptables-save

# iptables-save
# Generated by iptables-save v1.6.1
*mangle
:PREROUTING ACCEPT [4543:2482113]
:INPUT ACCEPT [4543:2482113]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4711:804006]
:POSTROUTING ACCEPT [4781:811782]
COMMIT
# Generated by iptables-save v1.6.1
*nat
:PREROUTING ACCEPT [85:23165]
:INPUT ACCEPT [85:23165]
:OUTPUT ACCEPT [183:37649]
:POSTROUTING ACCEPT [80:5380]
-A PREROUTING -i enp58s0f1 -p tcp -m tcp --dport 7777 -j DNAT --to-destination 192.168.47.5:3000
-A POSTROUTING -o enp58s0f1 -j MASQUERADE
COMMIT
# Generated by iptables-save v1.6.1
*filter
:INPUT ACCEPT [2058:1070158]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1937:450137]
-A FORWARD -i enp58s0f1 -j ACCEPT
COMMIT

2voto

Doug Smythies Points 12803

La directive REDIRECT d'iptables est la méthode appropriée pour le transfert de port sur la même machine :

sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.47.5 --dport 7777 -j REDIRECT --to-port 3000

À titre d'exemple de démonstration et de vérification, je vais utiliser un ordinateur situé à l'adresse 192.168.111.122 et rediriger le port 7777 vers le port 22, où se trouve sshd. Donc (remarquez que j'ai ajouté un qualificatif d'interface réseau) :

sudo iptables -t nat -A PREROUTING -i enp3s0 -p tcp -d 192.168.111.122 --dport 7777 -j REDIRECT --to-port 22

Maintenant, j'utilise un autre ordinateur à 192.168.111.1 pour le vérifier (note : je n'essaie pas vraiment de faire du telnet, je vérifie juste s'il peut se connecter) :

doug@DOUG-64:~$ telnet 192.168.111.122 7777
Trying 192.168.111.122...
Connected to 192.168.111.122.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.1p1 Ubuntu-5

Invalid SSH identification string.
Connection closed by foreign host.
doug@DOUG-64:~$

O.K. ça semble O.K. Essayez ssh :

doug@DOUG-64:~$ ssh -p 7777 192.168.111.122
doug@192.168.111.122's password:
Welcome to Ubuntu Focal Fossa (development branch) (GNU/Linux 5.5.0-rc6-stock x86_64)
... a bunch deleted ...
Last login: Fri Feb  7 15:32:45 2020 from 192.168.111.1
doug@s18:~$
doug@s18:~$ logout
Connection to 192.168.111.122 closed.
doug@DOUG-64:~$

Et vérifiez également les communications au niveau des paquets, pendant une session, via une session tcpdump (ou wireshark, si vous préférez) sur 192.168.111.122 :

doug@s18:~/temp-git-git$ sudo tcpdump -n -nn -tttt -i enp3s0 port 7777
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes
2020-02-07 15:37:16.480311 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [S], seq 494277163, win 29200, options [mss 1460,sackOK,TS val 349415894 ecr 0,nop,wscale 7], length 0
2020-02-07 15:37:16.480329 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [S.], seq 2825406220, ack 494277164, win 65160, options [mss 1460,sackOK,TS val 2718854230 ecr 349415894,nop,wscale 7], length 0
2020-02-07 15:37:16.480600 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 1, win 229, options [nop,nop,TS val 349415894 ecr 2718854230], length 0
2020-02-07 15:37:16.486525 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [P.], seq 1:33, ack 1, win 510, options [nop,nop,TS val 2718854236 ecr 349415894], length 32
2020-02-07 15:37:16.486668 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 33, win 229, options [nop,nop,TS val 349415896 ecr 2718854236], length 0
2020-02-07 15:37:18.016165 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [P.], seq 1:3, ack 33, win 229, options [nop,nop,TS val 349416278 ecr 2718854236], length 2
2020-02-07 15:37:18.016175 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [.], ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 0
2020-02-07 15:37:18.016262 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [P.], seq 33:67, ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 34
2020-02-07 15:37:18.016408 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [FP.], seq 67:69, ack 3, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 2
2020-02-07 15:37:18.016428 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [.], ack 67, win 229, options [nop,nop,TS val 349416278 ecr 2718855766], length 0
2020-02-07 15:37:18.016589 IP 192.168.111.1.45918 > 192.168.111.122.7777: Flags [F.], seq 3, ack 70, win 229, options [nop,nop,TS val 349416278 ecr 2718855766], length 0
2020-02-07 15:37:18.016600 IP 192.168.111.122.7777 > 192.168.111.1.45918: Flags [.], ack 4, win 510, options [nop,nop,TS val 2718855766 ecr 349416278], length 0
12 packets captured
12 packets received by filter
0 packets dropped by kernel

doug@s18:~/temp-git-git$ sudo iptables -t nat -v -x -n -L
Chain PREROUTING (policy ACCEPT 38 packets, 4409 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       4      240 REDIRECT   tcp  --  enp3s0 *       0.0.0.0/0            192.168.111.122      tcp dpt:7777 redir ports 22

Chain INPUT (policy ACCEPT 40 packets, 4329 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2 packets, 228 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 2 packets, 228 bytes)
    pkts      bytes target     prot opt in     out     source               destination
doug@s18:~/temp-git-git$

Les compteurs de paquets sont très utiles. Notez que le chemin PREROUTING ne sera parcouru qu'une seule fois par connexion (je l'avais fait 4 fois, lorsque j'ai exécuté la commande ci-dessus).

Si vous faites une erreur et que vous devez supprimer vos règles et recommencer, faites-le :

sudo iptables -t nat -F

pour effacer les règles de la table nat. Cette réponse devra peut-être être intégrée dans un ensemble de règles iptables plus important ou dans un contexte UFW.

EDIT : Oh, au fait :

doug@s18:~/temp-git-git$ grep . /proc/sys/net/ipv4/conf/*/forwarding
/proc/sys/net/ipv4/conf/all/forwarding:0
/proc/sys/net/ipv4/conf/default/forwarding:0
/proc/sys/net/ipv4/conf/enp3s0/forwarding:0
/proc/sys/net/ipv4/conf/lo/forwarding:0
doug@s18:~/temp-git-git$ grep . /proc/sys/net/ipv4/ip_forward
0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X