iptables dnat 不适用于 https

iptables dnat 不适用于 https

我有一个 http 服务器,监听 127.0.0.1 上的 8080(http)和 8081(https)端口

我有以下 iptables 规则用于重定向$external_ip

iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80  -j DNAT --to-destination 127.0.0.1:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination 127.0.0.1:8081
  • HTTP(80 至 8080)运行正常
  • HTTPS(443 至/自 8081)不起作用

该服务器是一个使用 apache APR 库来处理 https 连接的 Tomcat 实例。

我是否遗漏了什么?

更新:表 NAT 的链:$ iptables -t nat -L -n -v

Chain PREROUTING (policy ACCEPT 1111 packets, 69838 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   14   724 REDIRECT   tcp  --  eno1   *       0.0.0.0/0            101.0.105.178        tcp dpt:80 redir ports 8080
    6   360 REDIRECT   tcp  --  eno1   *       0.0.0.0/0            101.0.105.178        tcp dpt:443 redir ports 8081

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

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

Chain POSTROUTING (policy ACCEPT 9 packets, 596 bytes)
 pkts bytes target     prot opt in     out     source               destination         

答案1

iptables -t nat -L -n -v我可以看到您的规则是正确的。正如您所评论的那样,防火墙阻止流量的可能性已得到验证。如的输出中显示的字节和数据包计数器所示,NAT 规则已被多次命中。

您需要确保您可以在本地访问端口 443,并且您可以使用 验证您的 Web 服务器是否正在监听此端口netstat -lnp

答案2

解决方法(有点)

iptables、Tomcat 或 Apache APR 都不喜欢从环回接口进行监听。

我最终通过使用除以下之外的界面使其工作(127.0.0.1)

iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80  -j DNAT --to-destination $local_ip:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination $local_ip:8081

在我的例子中,我使用了虚拟接口(Linux模块:假的) 因为我希望 Tomcat 从“私有”IP 进行“监听”。

我把这个发布出来作为对未来遇到和我一样问题的人的回答,但我不会把这个答案标记为已接受的答案,因为我既没有解决使用环回的问题,也没有解释为什么它可以正常工作。http但不是https

相关内容