如何在 Ubuntu Linux 上显示/检查开放端口
检查 Ubuntu Linux 上的开放端口是安全管理的重要组成部分。某些 Linux 软件通过监听传入连接来工作。一个简单的例子是网络服务器,每当有人导航到网站时,它就会处理用户请求。作为 Linux 管理员或用户,始终了解系统的哪些端口对互联网开放非常重要。否则,您可能不会意识到与您的计算机建立的外部连接,这会消耗带宽和资源,同时也是潜在的安全漏洞。
在本教程中,我们将了解如何检查 Ubuntu Linux 上的开放端口。这可以通过几种不同的命令行实用程序来完成,我们将详细介绍这些实用程序。我们还将了解如何使用 Ubuntu 的 ufw 防火墙来确保端口安全。那么,您知道您的系统开放了哪些端口吗?让我们来看看吧。
在本教程中您将学习:
如何使用 ss 命令检查开放端口
如何使用 Nmap 实用程序检查开放端口
如何在ufw防火墙中检查并添加允许的端口
使用 ss 命令检查开放端口
ss 命令可用于显示哪些端口正在侦听连接。它还显示它正在接受来自哪些网络的连接。
你知道吗?
ss
命令取代了 Linux 上较旧的 netstat
命令。您仍然可以安装并使用 netstat 命令来检查开放端口。
我们建议在命令中使用 -ltn
选项来查看简洁且相关的输出。让我们看一下我们测试系统上的一个例子。
$ sudo ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:*
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 511 *:80 *:*
我们可以看到我们的服务器正在侦听端口 80、3306 和 33060 上的连接。这些是与 HTTP 和 MySQL 相关的众所周知的端口。
您还会看到 ss 输出显示端口 53 和 631 处于监听状态。它们分别用于 DNS 和 Internet 打印协议。这些默认情况下处于启用状态,因此您可能会看到它们在您自己的系统上监听。 DNS 端口实际上并未开放,但它为我们系统上安装的应用程序提供名称解析。
要查看这些侦听端口属于哪些进程,请在命令中包含 -p
选项。
$ sudo ss -ltnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=530,fd=13))
LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=572,fd=7))
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* users:(("mysqld",pid=2320,fd=32))
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=2320,fd=34))
LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=572,fd=6))
LISTEN 0 511 *:80 *:* users:(("apache2",pid=2728,fd=4),("apache2",pid=2727,fd=4),("apache2",pid=2725,fd=4))
现在我们可以看到 systemd-resolve、cupsd、mysqld 和 apache2 是利用端口侦听传入连接的服务。
使用 nmap 检查开放端口
Nmap 是一个网络侦察工具,可用于检查远程主机上的开放端口。但是,我们也可以使用它来检查我们自己的系统,以获得开放端口的快速列表。
通常,我们会指定一个远程IP地址供Nmap扫描。相反,我们可以通过在命令中指定 localhost 来扫描我们自己的系统。
$ sudo nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-12 20:43 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
631/tcp open ipp
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
检查ufw防火墙打开了哪些端口
您应该记住一个重要的警告。在本地系统上使用 ss 或 nmap localhost 命令时,我们会绕过防火墙。事实上,这些命令显示处于侦听状态的端口,但这并不一定意味着这些端口对互联网开放,因为我们的防火墙可能会拒绝连接。
使用以下命令检查 ufw 防火墙的状态。
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
从输出中,我们可以看到 ufw 正在拒绝传入连接。由于端口 80 和 3306 尚未添加为例外,因此 HTTP 和 MySQL 无法接收传入连接,尽管 ss 和 nmap 报告它们处于侦听状态。 让我们使用以下命令为这些端口添加例外。
$ sudo ufw allow 80/tcp
Rule added
Rule added (v6)
$ sudo ufw allow 3306/tcp
Rule added
Rule added (v6)
我们可以再次检查 ufw 的状态,看看端口现在是否已打开。
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp ALLOW IN Anywhere
3306/tcp ALLOW IN Anywhere
80/tcp (v6) ALLOW IN Anywhere (v6)
3306/tcp (v6) ALLOW IN Anywhere (v6)
现在我们的两个端口在防火墙中打开并处于侦听状态。要了解有关 ufw 防火墙的更多信息(包括命令示例),请查看有关在 Linux 上安装和使用 ufw 防火墙的指南。
结束语
在本指南中,我们了解了如何使用 ss 命令以及 nmap 实用程序来检查 Ubuntu Linux 上的侦听端口。我们还学习了如何检查 ufw 防火墙以查看哪些端口打开,并在必要时添加例外。
如果端口处于侦听状态并且允许通过防火墙,则它应该对传入连接开放。但这也取决于您的计算机和互联网之间的路由器或其他网络设备,因为它们可能有自己的规则来阻止传入连接。