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 터널로 리디렉션합니다. 매스커레이딩 규칙은 패킷 반환을 허용합니다.