如何在 Linux 上检查开放的端口并关闭不需要的端口

时间:2025-05-08 11:40:55
-n:以数字形式显示端口

# 实例:假设现在系统中发现了一个可疑进程,想要检查与之关联的端口。

根据这个问题,我们可以使用lsof命令,该命令用于列出与进程相关联的打开文件。

lsof -i 4 -a -p <进程数字>

比如,现在要检查进程 1593

[root@monitor ~]# lsof -i 4 -a -p 1593
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
master  1593 root   13u  IPv4  29723      0t0  TCP localhost:smtp (LISTEN)

其中

  • lsof:调用程序
  • -i:列出与互联网交互的文件,选项4表示仅打印IPv4,选项6可用于IPv6。
  • -a:指示输出结果进行逻辑与操作
  • -p:指定要检查的进程的PID编号

正如前面所看到的,该进程与监听的SMTP端口相关联。

2.远程检查 linux 上的开放的端口

如果想要检测远程系统的端口,最常用的工具是Nmap(网络映射器)。下面对远程服务器 haopython.com 进行端口扫描:

nmap www.haopython.com

输出分为 3 列,分别显示端口、端口状态和在端口后面侦听的服务:

[root@monitor ~]# nmap www.haopython.com

Starting Nmap 6.40 ( http://nmap.org ) at 2025-05-08 10:03 CST
Nmap scan report for www.haopython.com (147.94.44.183)
Host is up (0.022s latency).
Not shown: 994 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
888/tcp  open  accessbuilder
3306/tcp open  mysql
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 9.97 seconds
[root@monitor ~]#

默认情况下,Nmap仅扫描最常用的1000个端口。如果要Nmap扫描所有端口,则添加下面参数并运行:

nmap -p- www.haopython.com

3.在CentOS 8上移除httpd服务

为确保服务器的安全,除了防火墙规则以保持端口被阻止外,还建议删除不必要的服务。

下面举例删除CentOS 8上已经安装且不提供服务的httpd服务。

1)确认服务状态

systemctl status httpd

2)停止服务并禁用自动启动

systemctl stop httpd
systemctl disable httpd

3)移除服务

使用 yum 或 dnf(CentOS 8 默认使用 dnf)来移除 httpd 服务及其相关文件:

dnf remove httpd

4)验证移除结果

dnf list installed | grep httpd

如果没有输出,说明 httpd 服务及其相关文件已被成功移除。

通过以上步骤,成功移除了 CentOS 8 系统中不再需要的 httpd 服务,减少了系统资源的占用,同时也降低了因未使用服务可能带来的安全风险。

4.使用 UFW 关闭 Linux 上的开放的端口

如果我们发现有不需要开放的端口,最简单的解决方案是使用UFW(简单防火墙)将其关闭,某些Linux 系统可能需要先安装UFW。

关闭端口有两种方式,一种是使用deny选项,另一种是使用reject选项,两者的区别在于reject指令会告知另一端连接已被拒绝。

要使用deny 规则阻止22端口,则运行:

ufw deny 22

要使用 reject 规则阻止 22端口,请运行:

ufw reject 22

5.使用 iptables 关闭 Linux 上的开放的端口

虽然 UFW 是管理端口的最简单方法,但它是 Iptables 的前端。

以下示例显示如何使用 iptables 拒绝与端口 22 的连接:

iptables -I INPUT -p tcp --dport 22 -j REJECT

上述规则表示拒绝所有目标端口(dport)为 22 的TCP传入(INPUT)连接。被拒绝后,源端将被告知连接已被拒绝。

下面规则只是丢弃所有数据包,而不通知源连接被拒绝:

iptables -A INPUT -p tcp --dport 22 -j DROP

6.使用firewalld在Linux上关闭开放的端口

确保 firewalld 防火墙已经运行,假设现在想关闭端口80/tcp,可以使用以下命令:

firewall-cmd --zone=public --remove-port=80/tcp --permanent

然后重新加载:

firewall-cmd --reload

最后确认端口是否已关闭:

firewall-cmd --list-all