在CentOS系统中,端口管理是服务器安全配置的重要环节,默认情况下,许多非必要的端口处于开放状态,这可能带来潜在的安全风险,以21端口为例,它常用于FTP服务,但由于FTP协议本身存在明文传输等安全隐患,若服务无需使用,建议关闭该端口以提升系统安全性,本文将详细介绍在CentOS系统中关闭21端口的方法、注意事项及相关安全实践。

为什么需要关闭21端口?
21端口是FTP服务的默认端口,FTP(文件传输协议)广泛应用于文件传输场景,但其设计存在明显缺陷:
- 明文传输:用户名、密码及传输数据均未加密,易被中间人窃取。
- 被动模式复杂性:FTP的被动模式需开放额外端口,可能增加防火墙配置难度。
- 安全漏洞:旧版FTP服务可能存在缓冲区溢出等漏洞,成为攻击入口。
若业务场景无需使用FTP(如改用SFTP、SCP等更安全的协议),关闭21端口是基础的安全措施。
检查21端口当前状态
在关闭端口前,需确认其是否已被占用及服务状态,可通过以下命令查看:
检查端口监听状态
netstat -tuln | grep 21 # 或使用ss命令(推荐,netstat逐渐被ss替代) ss -tuln | grep 21
- 若输出结果包含
21端口,且State为LISTEN,表示服务正在监听该端口。 - 示例输出:
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
检查关联服务
lsof -i :21 # 或通过服务名检查(如vsftpd) systemctl status vsftpd
- 若
lsof显示进程信息(如vsftpd),或systemctl status显示服务为active (running),则说明21端口由该服务占用。
关闭21端口的常用方法
方法1:通过防火墙规则临时关闭
若仅需临时禁止外部访问21端口,可通过防火墙(如firewalld或iptables)实现,不停止服务本身。

使用firewalld(CentOS 7及以上默认)
# 检查firewalld状态 systemctl status firewalld # 永久移除21端口规则 firewall-cmd --permanent --remove-port=21/tcp # 重新加载防火墙使规则生效 firewall-cmd --reload # 验证规则是否移除 firewall-cmd --list-ports | grep 21
使用iptables(CentOS 6或自定义环境)
# 添加规则拒绝TCP 21端口访问 iptables -I INPUT -p tcp --dport 21 -j DROP # 保存规则(CentOS 6下使用service iptables save;CentOS 7+需安装iptables-services) service iptables save # 重启iptables服务 systemctl restart iptables
方法2:停止并禁用FTP服务(彻底关闭)
若无需FTP服务,直接停止并禁用相关服务(如vsftpd)可彻底释放21端口。
停止vsftpd服务
systemctl stop vsftpd
禁用服务开机自启
systemctl disable vsftpd
验证服务状态
systemctl status vsftpd # 应显示 "inactive (dead)" ss -tuln | grep 21 # 无输出表示端口已释放
方法3:修改服务配置(可选)
若需保留FTP服务但限制访问,可修改服务配置文件(如/etc/vsftpd/vsftpd.conf),将listen=NO和listen_ipv6=YES(若需IPv6)结合listen_address绑定特定IP,避免监听所有接口。
关闭端口后的验证与安全加固
验证端口关闭状态
# 外部测试(使用另一台机器或curl) telnet <服务器IP> 21 # 应连接失败 curl -v ftp://<服务器IP>:21/ # 应返回连接错误 # 本地检查 ss -tuln | grep 21 # 确认无LISTEN状态
安全加固建议
- 替换FTP服务:若需文件传输,建议改用SFTP(基于SSH,端口22)或SCP,加密传输更安全。
- 定期审计端口:使用
nmap扫描服务器开放端口,确保仅必要端口暴露:nmap -sT -p- <服务器IP> # 扫描所有TCP端口
- 启用SELinux:检查SELinux状态,确保未因关闭端口导致策略违规:
getenforce # 应为Enforcing
常见问题FAQs
Q1: 关闭21端口后,本地是否仍能访问FTP服务?
A: 若通过防火墙规则关闭端口(如firewall-cmd --remove-port),默认情况下本地访问(0.0.1:21)也会被禁止,若需本地访问,可添加例外规则:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="21" accept' firewall-cmd --reload
若通过停止服务关闭端口,则本地及外部访问均不可用。

Q2: 如何确认21端口被哪个服务占用?
A: 可结合netstat、ss和lsof命令定位:
# 1. 查看监听21端口的进程ID ss -tuln | grep 21 # 输出示例:tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1234 # 2. 通过PID查找进程名 ps -ef | grep 1234 # 输出示例:root 1234 1 0 10:00 ? 00:00:00 vsftpd: /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
若PID为systemd(如1),则可能是系统服务,需通过systemctl status进一步排查。
通过以上方法,可有效关闭CentOS系统中的21端口,并提升服务器安全性,实际操作中,建议先在测试环境验证,避免误关闭关键服务。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!