iptables localhost 리디렉션이 에코만 표시합니다.

iptables localhost 리디렉션이 에코만 표시합니다.

iptables인터넷에서 localhost , 포트 2025 의 SSH 터널로 트래픽을 리디렉션하려고 합니다 . 어떤 이유로 리디렉션이 작동하지 않습니다.

나는 그것을 사용하여 연결했는데 telnet어떤 이유로 에코가 발생했지만 SMTP 서버로 리디렉션되는 배너는 표시되지 않았습니다. 내 시스템에서 포트 2025로의 리디렉션을 켜면 telnet즉시 SMTP 서버로부터 인사말을 받게 됩니다.

외부 세계에서 연결하고 임의의 키를 누르십시오.

$ telnet infantile.xyz 25
Trying 94.156.189.160...
Connected to infantile.xyz.
Escape character is '^]'.
cfvghnjdfghdfgh

임의의 키를 에코합니다.

리디렉션이 있는 시스템에 연결하면 인터넷상의 외부 사람들이 어떻게 작업하기를 원하는지 알 수 있습니다.

# telnet localhost 2025
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 infantile.xyz ESMTP Postfix (Debian/GNU)

iptables구성은 다음과 같습니다.

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 252M  124G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 270K   16M ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  308 12340 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 8988  612K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 ctstate NEW
2277K  462M UDP        udp  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate NEW
3204K  147M TCP        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02 ctstate NEW
2277K  462M REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
2914K  130M REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1855 packets, 447K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination         
22104 1144K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
 4976  265K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
 2585  145K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
   95  4836 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:587

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination

내가 만든 리디렉션 규칙 세트에 대한 NAT 규칙은 다음과 같습니다.

Chain PREROUTING (policy ACCEPT 3813 packets, 465K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 2954  174K DNAT       tcp  --  *      *       0.0.0.0/0            94.156.189.0/24      tcp dpt:25 to:127.0.0.1:2025

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

Chain OUTPUT (policy ACCEPT 6798 packets, 408K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 11177 packets, 583K bytes)
 pkts bytes target     prot opt in     out     source               destination    

이상한 점은 연결을 받아들이고 에코하지만 어쨌든 상대방(접미사)의 서비스에는 응답하지 않는다는 것입니다.

처음에는 iptables이 가이드를 사용하여 구성했습니다.https://wiki.archlinux.org/index.php/simple_stateful_firewall

이것이 리디렉션에 사용하려는 것입니다.

iptables -t nat -I PREROUTING -i eth0 -p tcp -d 94.156.189.160 --dport 25 -j DNAT --to-destination 127.0.0.1:2025

다음 sysctl 옵션이 활성화되어 있습니다.

net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.route_localnet = 1

답변1

iptables이 방화벽을 통해 포트를 리디렉션하려면 체인 에 몇 가지 규칙이 필요 TCP하고 체인 정책에 대한 변경이 필요합니다 FORWARD.

순방향 체인은 수락 상태에 있어야 합니다.

# iptables -P FORWARD ACCEPT

리디렉션된 포트와 해당 대상을 허용해야 합니다.

# iptables -A TCP -p tcp --dport 25 -j ACCEPT
# iptables -A TCP -p tcp --dport 2025 -j ACCEPT

이 POSTROUTING 규칙은...

# iptables -t nat -A POSTROUTING -j MASQUERADE
# iptables -t nat -I PREROUTING -i eth0 -p tcp -d 94.156.189.160 --dport 25 -j DNAT --to-destination 127.0.0.1:2025

이러한 규칙을 사용하면 iptables는 이제 포트 25에서 들어오는 패킷을 localhost 포트 2025의 SSH 터널로 리디렉션합니다. 매스커레이딩 규칙은 패킷 반환을 허용합니다.

관련 정보