在linux中用firewalld关闭危险端口,关键是通过--remove-port=端口号/协议删除放行规则并--reload重载生效,而非停止服务;需先用ss -tuln和firewall-cmd --list-all确认监听与放行状态,再针对22、3306等高危端口按需限制或移除规则。

在 Linux 中用 firewalld 关闭危险端口,关键不是“关掉端口本身”,而是通过防火墙规则阻止外部对它的访问。端口是否监听由服务决定(如 sshd 监听 22),firewalld 只负责拦截流量。操作分三步:确认哪些端口在运行、判断是否真需关闭、再用正确命令移除放行规则。
先查清楚哪些端口正在被使用
别凭印象删端口——先验证它是否真的在监听,以及是否已被 firewalld 放行:
- 查服务监听状态:
sudo ss -tuln | grep ':端口号'(例如grep ':22'),有输出说明服务正监听该端口 - 查 firewalld 是否开放了它:
sudo firewall-cmd --list-ports或更全面的sudo firewall-cmd --list-all - 额外提醒:如果
ss显示监听但--list-ports没出现,说明该端口没被 firewalld 显式放行——默认策略是拒绝,此时它本就不通,无需操作
识别常见危险端口并评估风险
以下端口常被攻击者利用,但是否关闭取决于你的实际用途:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 22(SSH):远程管理必需,不建议直接关闭;应改端口、禁密码登录、配密钥或限制 IP 访问
- 23(Telnet):明文传输,极度不安全;若未启用 telnetd 服务,可忽略;若启用,应停服务并删除 firewalld 放行规则
- 139/445(Samba):内网文件共享常用,暴露在公网极危险;如无外网共享需求,务必关闭对应规则
-
3306(MySQL)、5432(PostgreSQL):数据库端口默认不应对外;确认应用是否真需远程连接,否则应删 firewalld 放行规则 + 绑定本地地址(
bind-address = 127.0.0.1)
用 firewalld 安全关闭指定端口
确保你操作的是永久规则,并重载生效,避免重启后恢复开放:
- 关闭单个 TCP 端口(如 3306):
sudo firewall-cmd --permanent --remove-port=3306/tcp - 关闭单个 UDP 端口(如 161 SNMP):
sudo firewall-cmd --permanent --remove-port=161/udp - 关闭端口范围(如废弃的测试端口 8000–8010):
sudo firewall-cmd --permanent --remove-port=8000-8010/tcp - 必须执行重载才能生效:
sudo firewall-cmd --reload - 验证是否已移除:
sudo firewall-cmd --list-ports,确认目标端口不再出现
关闭后建议做的验证
规则删了不代表万无一失,还需交叉检查:
- 从另一台机器测试连通性:
nc -zv 你的服务器IP 3306,应显示 Connection refused 或 timeout - 确认服务仍在本地正常工作(如 MySQL 仍可通过
mysql -u root -p本地连接) - 检查云平台安全组(阿里云、腾讯云等)是否也放行了该端口——firewalld 关了,云防火墙没关,照样通
- 如使用 SELinux(RHEL/CentOS),临时设为 permissive 模式测试:
sudo setenforce 0,排除策略干扰










