Linux 列出对外开放的端口

Linux 列出对外开放的端口

我找不到如何列出或“读取”Linux 上打开的端口列表。我有一台基于 Debian 的服务器。我找到了大量列出打开端口的命令,但我找不到任何列出可以从外部访问的打开端口的命令。我知道 3309 是打开的,但我已经将 mySQL 配置为仅回复本地主机,但该端口仍列为打开。再说一次,我只对向外界开放的端口感兴趣。

如果没有这样的命令,也许有一个 grep 可以过滤掉仅限内部的端口?

答案1

您可能无法找到一个简单的答案,因为这个问题比您想象的要复杂得多。至少有 3 个可能值得关注的点:

  1. 服务器上正在监听的端口。netstat -an | grep LISTEN将为您提供一个大致的概念。查找源地址 0.0.0.0 或特定的“外部”接口(如果适用,请不要忘记 IPv6 地址)。

  2. 服务器防火墙(通常是 iptables)。iptables -l将提供一些允许哪些流量的信息。但它还应该向您显示服务器级别执行的任何 NAT/端口重定向。例如,您的端口 3309 可能会重定向到 127.0.0.1:3309。因此,即使您的 mysql 可能只在本地主机上监听,从技术上讲它也可以从“外部”世界访问。

  3. 您的边缘防火墙。这是您的互联网路由器/网关。这里最简单的做法是转到“外部世界”中的服务器(无论是开放的互联网,还是您网络上的其他地方,等等 - 问题中没有明确定义),然后运行nmap <your-external-ip>并查看它报告为开放的内容。这样做的缺点是,如果您的服务器没有专用 IP,您可能会看到很多不适用于您的特定服务器的内容。

这三件事将回答您的大部分问题,但我相信其他人会有更多的想法/建议。

答案2

您好,欢迎来到 ServerFault。

这个怎么样?

ss -tulpen | grep -vEe "\s+127[.]|::1"

这将从输出中删除 127.0.0.0/8 和 ::1 地址。

虽然这确实列出了所有在此框上可访问的地址上侦听的 TCP 和 UDP 端口,但它没有告诉你它们是否实际上可访问。防火墙(IPTables/Netfilter、外部设备)或安全策略(SELinux、SystemD、tcpwrappers)可能仍会阻止访问。

编辑 如果你想知道端口确实可以从外界访问,将一个主机放置在所述“外部世界”(例如互联网)中,并在该主机上运行针对您的服务器的端口扫描器(如 nmap)。

nmap 示例:

sudo nmap -sS -p1-65535 <your_server's_ip>

答案3

您可以使用 netstat 命令。需要与 netstat 命令一起使用的开关来显示守护进程在服务器上监听的程序名称、端口号和协议,如下所示。

netstat -ntlp

相关内容