我在 Ubuntu 服务器上使用 apache 时遇到了问题。它不是本地机器,我通过 SSH 访问它。运行时nmap -sS 127.0.0.1
显示以下内容:
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp filtered HTTP
ports.conf 设置监听 80 端口,如下所示:
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
值得一提的是,我也尝试将其设置为Listen 0.0.0.0:80
我似乎无法打开端口 80,而不是将其设置为已过滤。当我运行时,sudo ufw status verbose
它说:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80,443/tcp ALLOW IN Anywhere
22/tcp ALLOW IN Anywhere
80,443/tcp (v6) ALLOW IN Anywhere (v6)
22/tcp (v6) ALLOW IN Anywhere (v6)
所以我不认为这是防火墙问题。运行ss -tunapl
显示以下内容:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 172.31.255.175%eth0:68 0.0.0.0:* users:(("systemd-network",pid=19297,fd=17))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=17786,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=17786,fd=4))
tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=27990,fd=4),("apache2",p id=27989,fd=4),("apache2",pid=27987,fd=4))
此外,运行iptables --table filter --list --numeric
显示输出这个(pastebin 链接)。
可能是什么问题呢?
答案1
来自您的 pastebin iptables 规则列表链接:
Chain INPUT (policy DROP)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
...
因此,INPUT 链中的第一个规则是端口 80 DROP 规则。但是,您的列表缺少关键的网络接口信息,可以使用以下命令获取这些信息:sudo iptables -xvnL
。
编辑:新的 pastebin 没有显示网络接口依赖性,并且还显示数据包采用第一个 DROP 规则路径,正如预期的那样:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
434 23648 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
因此,您需要删除该规则(未经测试):
sudo iptables -D INPUT 1
首先,为什么会有这条规则并不明显。