# 实例:假设现在系统中发现了一个可疑进程,想要检查与之关联的端口。
根据这个问题,我们可以使用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