端口 80 上的传入流量不工作

端口 80 上的传入流量不工作

我正在尝试在我的 arch linux 安装上设置 Apache 服务器。该机器具有具有公共 IP 地址的以太网连接。我曾多次尝试从外部计算机进行连接,但始终无法正常工作,然后我在 Apache 中设置了 SSL 并且能够正常连接。

为了测试,当我使用以下命令启动一个简单的 http 服务器时

$ sudo python3 -m http.server <port_here> --bind <public_ip_here> 

我可以从其他计算机正常连接所有端口除了80.那就不行了。它甚至适用于端口 443。

我想知道为什么 80 端口被阻止以及如何解决此问题。

答案1

您可以运行以下命令来查看流量是否真正进入系统:

# iptables -I INPUT -p TCP --dport 80 -j LOG
# iptables -I INPUT -p TCP --dport 80 -j ACCEPT

会将-j LOG匹配流量的记录发送到您的消息日志,但防火墙将继续处理规则。第二条规则只是ACCEPT为所有端口 80 流量设置显式规则。这消除了防火墙作为一个瓶颈。如果数据包计数器(输出左侧的两个数字列iptables -nvL)上升,则您知道规则匹配,您可以查看消息以查看流量​​传入方式是否有任何异常(例如 NAT 等) )。

您还可以运行netstat -tlpnlsof -i tcp:80来查看您的守护进程当前是否正在侦听网络可访问的 IP。例如:

[root@xxx01 ~]# lsof -i tcp:42499
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
ruby    12659 puppet   10u  IPv4 37071710      0t0  TCP localhost:42499 (LISTEN)

指示有一个 ruby​​ 脚本正在侦听端口 42499 并绑定到 127.0.0.1(localhost:42499),因此任何寻址公共 IP 的内容都不会到达此守护进程。对比:

[root@xxx01 ~]# lsof -Pi tcp:80 | head -3
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    2247   root    4u  IPv6  12264      0t0  TCP *:80 (LISTEN)
httpd    7376 apache    4u  IPv6  12264      0t0  TCP *:80 (LISTEN)

星号表示它正在侦听所有可用的 IP 地址(包括网络可访问的 IP 地址)。

答案2

您可以尝试在本机上使用tcpdump以查看 80 端口是否有任何通信到达:

sudo tcpdump port 80

(如果你没有的话pacman -S tcpdump:)

并尝试从外部机器进行连接。

除此之外,您可以查看是否有任何 iptables 规则阻止本地 80 端口连接。如果以下命令输出任何内容,请分析是否是拒绝或丢弃操作: sudo iptables-save | grep 80...或分析整个 iptables 规则sudo iptables-save

  • 另一种尝试是强制命令侦听 0.0.0.0 地址而不是公共 IP 地址。

PS:请记住,有些提供商会阻止 80 端口,以不允许客户托管网站或“尝试”减轻攻击。

答案3

检查是否有任何防火墙可能阻止路由器上的端口。还要检查 iptables;你可以试试这个:

iptables -I INPUT -p TCP --dport 80 -j ACCEPT

相关内容