如何查找和关闭Linux服务器中开放端口

网络和服务器管理是一个关键领域,在这个领域中,Linux实际上比任何其他操作系统都更受欢迎。因此,大多数数据中心的管理员都精通Linux命令行。
我们常常遇到这种情况:服务器上某些原本需要关闭的端口打开了,导致服务器上出现意外的流量。
今天,我们将学习如何在Linux服务器中寻找和关闭开放端口。
查找Linux中的开放端口
为了查找开放端口,我们将使用ss命令,它在大多数常见的Linux发行版中都预装了,现在它已经取代了之前非常流行的netstat命令。
让我们用下面的语法运行ss命令,来获取所有监听的TCP套接字。
$ ss -tl
这里,'t'代表TCP,'l'代表Listening sockets。

同样,要获取所有监听的UDP端口,运行。
$ ss -ul

观察输出。在UDP的 "State "一栏中,所有端口的状态都是UNCONN,即未连接。由于我们只需要那些正在监听的端口,所以我们将输出结果用管道输送,并用grep命令进行过滤。
$ ss -ul | grep LISTEN
我们也可以把TCP和UDP的输出结合在一起。
$ ss -tul | grep LISTEN

这里还可以增加一个参数: '-n'。在上面的输出中,该命令是解析与端口相关的服务名称。比如HTTP, IPP等
有了'-n'这个参数,它只是显示正在监听的端口号。
$ ss -tuln | grep LISTEN

关闭Linux中的开放端口
在Linux服务器中,手动关闭一个开放端口的方法是相当繁琐和程序化的。因此, 我们将使用更简单的方法: 关闭正在监听端口的进程。
我们需要在调用 ss 时加上另一个参数, '-p'来列出正在使用每个端口的进程(以 sudo 用户身份运行该命令)。
$ sudo ss -tulnp | grep LISTEN

如上图所示, 最后一列列出了 "users", 即使用端口号的进程。现在您可以通过终止使用该端口的进程来关闭该端口。例如,要关闭80端口,我们必须停止 "Apache2 "进程。
$ sudo service apache2 stop
或
$ sudo systemctl stop apache2

我们成功关闭了80端口,不再有进程监听。
在这篇文章中,我们学习了如何在Linux中寻找和关闭一个开放端口。很多端口,如22(SSH)、21(Telnet)等,在大多数时候都应该保持关闭,因为这些端口可能会产生网络攻击。
当不再需要使用这些端口的过程中,也应该关闭其他端口。