我在 Linode Shared CPU 实例上全新安装了 Rocky Linux 9。我刚刚安装firewalld
并设置了它。默认情况下,它已启用http
和ssh
服务。
在此阶段进行nmap
扫描显示端口 22 和 80 处于打开状态,其余端口已被过滤,如下所示:
Host is up (0.59s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9090/tcp closed zeus-admin
(我不知道 zeus admin 是什么,我不知道它是否相关)
我目前需要为我正在设置的一些内容打开https
和端口。我尝试运行以下命令:smtp
sudo firewall-cmd --permanent --add-service=https
之后我firewalld
通过重新加载服务systemctl
。
我希望端口 443 是开放的,但是 nmap 输出却显示以下内容:
Host is up (0.51s latency).
Not shown: 996 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
9090/tcp closed zeus-admin
对于我尝试用该--add-service
标志添加的任何服务,我都会得到相同的结果,即端口已关闭。通过 URL 测试我正在设置的服务时,我只是得到Connection refused
错误。
我还尝试使用以下命令直接添加端口:
sudo firewall-cmd --permanent --add-port=443/tcp
但结果是一样的,端口显示为关闭。
我该如何解决这个问题?
答案1
添加防火墙服务会关闭所需端口,而不是打开它
这不是“打开”和“关闭”的意思。重新运行 nmap 以--reason
查看更多信息。
Nmap 的输出是面向服务的,而不是面向防火墙的,并且两个都“开放”和“封闭”表明存在某种回答该端口上的数据包 – 即它们都表明防火墙允许数据包通过。
区别在于收到的答案类型:“Open”表示 TCP 连接已成功建立(即有一个服务正在侦听该端口),而“closed”表示 TCP 握手被明确拒绝,即曾经被允许通过防火墙,但是没有任何东西等待连接,因此收到了标准 TCP RST。
(浏览器或 HTTP 客户端的“连接被拒绝”与 nmap 的“关闭”含义相同 - 这意味着服务器确实通过防火墙接收到了您的 TCP 握手数据包,但由于没有服务监听该端口而主动拒绝它。)
同时,如果 TCP 握手数据包触发 ICMP 错误(例如“管理禁止”)或者没有任何答案(某些防火墙直接丢弃不允许的数据包),nmap 会将端口列为“已过滤”– 在您的情况下,它们被报告为“未显示:997 个过滤端口”(nmap 将大多数答案分组并仅显示例外)。
为了获得更精确的输出,请指定要扫描的端口列表-p
,并添加--reason
以获取附加列,指示 nmap 如何确定状态:
$ nmap -p 21,22,23,24 ember
Starting Nmap 7.92 <...>
PORT STATE SERVICE REASON
21/tcp filtered ftp no-response
22/tcp open ssh syn-ack
23/tcp closed telnet conn-refused
24/tcp filtered priv-mail host-unreach
Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds
在这个例子中,端口 22 和 23 在防火墙术语中都是“打开的”,但是只有其中一个具有监听套接字(主机使用 TCP ACK 进行响应),而另一个没有(收到 TCP RST),而端口 21 和 24 被防火墙“过滤”。
(为了便于说明,两者的过滤方式不同 - 端口 21 有“丢弃”规则,但端口 24 有“使用 icmpx 管理员禁止拒绝”规则。通常您只会看到其中一个。)
我该如何解决这个问题?
您的 httpd 服务未监听端口 443(例如,未启用 mod_ssl 模块,或未将端口 443 添加到参数listen
)。请对其进行配置以监听端口 443。
(我不知道 zeus admin 是什么,我不知道它是否相关)
我也不知道它是什么,但 9090 是许多服务出于美观原因选择的端口号之一(如 8888 或 5555 或 8080),而不管它被正式分配给什么,所以 99.99% 的时间它与原始的“zeus-admin”列表无关。
当然,Nmap 并不知道服务器是否打算将该端口用于 zeus-admin(特别是如果端口已“关闭”,并且是由于没有可以进一步探测的服务,因此它仅从其“nmap-services”数据库中报告名称。