如何使用 iptables 将入站外部流量从端口 80 NAT 到本地不同端口?

如何使用 iptables 将入站外部流量从端口 80 NAT 到本地不同端口?

我有一台 Tomcat 监听 127.0.0.1:8780 的机器,我只想将所有 HTTP 流量重定向到该端口。它在本地主机上有效,但在同一个(虚拟)LAN 中的另一台机器上无效。

现在我故意允许所有入站流量以便找到正确的 NAT 配置,稍后我计划开始阻止一些端口并保持 HTTP 80 开放。

root@box1:~$ netstat -tulpn
活动互联网连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称
tcp 0 0 127.0.0.1:8780 0.0.0.0:* 侦听 779/java               
udp 0 0 0.0.0.0:29411 0.0.0.0:* 419/dhclient    
udp 0 0 0.0.0.0:68 0.0.0.0:* 419/dhclient    
udp6 0 0 :::56705 :::* 419/dhclient    
iptables -N RULE_0
iptables -A OUTPUT -m 状态 --state NEW -j RULE_0
iptables -A INPUT -m 状态 --state NEW -j RULE_0
iptables -A FORWARD -m 状态 --state NEW -j RULE_0
iptables -A RULE_0 -j LOG --log-level info --log-prefix “规则 0 -- 接受”
iptables -A RULE_0 -j 接受

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8780
iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8780
root@box1:~# iptables -L
链输入(策略接受)
目标 保护 优化 源 目标         
RULE_0 全部 -- 任何地点 任何地点 状态 NEW

链转发(策略接受)
目标 保护 优化 源 目标         
RULE_0 全部 -- 任何地点 任何地点 状态 NEW

链输出(策略接受)
目标 保护 优化 源 目标         
RULE_0 全部 -- 任何地点 任何地点 状态 NEW

链 RULE_0(3 个引用)
目标 保护 优化 源 目标         
LOG 全部 -- 任何地方 任何地方 LOG 级别信息前缀“RULE 0 -- ACCEPT ”
LOG 全部 -- 任何地方 任何地方 LOG 级别信息前缀“RULE 0 -- ACCEPT ”
接受所有 -- 任何地方 任何地方            
root@box1:/etc/halo# nc localhost 80; echo $?
0
usr@box2:~$ nc box1 80; echo $?
box1 [192.168.56.100] 80 (http) :连接超时
1
usr@box2:~$ ping box1
PING box1 (192.168.56.100) 56(84) 字节数据。
来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=1 ttl=63 时间=0.985 毫秒
来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=2 ttl=63 时间=0.972 毫秒
来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=3 ttl=63 时间=0.945 毫秒
来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=4 ttl=63 时间=0.905 毫秒
^C
--- box1 ping 统计 ---
发送 4 个数据包,接收 4 个数据包,0% 数据包丢失,耗时 3003 毫秒
rtt 最小值/平均值/最大值/mdev = 0.905/0.951/0.985/0.048 毫秒

答案1

您的 tomcat 在 localhost: 上监听127.0.0.1:8780,而您尝试连接到box1具有不同 ip 地址的:192.168.56.100

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8780
echo 1 > /proc/sys/net/ipv4/conf/eth0/route_localnet

eth0你的外部接口在哪里?

相关内容