Linux - firewall
使用 firewall-cmd
管理 Linux 防火墙的实用指南
在 Linux 系统中,尤其是基于 Red Hat 的发行版(如 CentOS、Fedora、RHEL),firewalld
是默认的动态防火墙管理工具。它通过 firewall-cmd
命令提供了一个灵活的方式来管理网络规则和端口访问控制。
本文将介绍如何使用 firewall-cmd
来查看和配置防火墙规则,并结合 MongoDB 和 SSH 服务进行示例说明。
🧾 一、查询当前 SSH 的端口
SSH 服务通常监听 TCP 22 端口,但为了安全考虑,有时我们会修改其默认端口。以下是查询当前 SSH 端口的方法:
# 查看 SSH 配置文件中的 Port 设置
grep ^Port /etc/ssh/sshd_config# 查看实际监听的 SSH 端口
ss -tlnp | grep ssh
🔐 二、放行 SSH 端口(所有 IP 可访问)
如果你希望所有 IP 地址都能通过 SSH 访问服务器,可以添加如下规则:
sudo firewall-cmd --permanent --add-port=22/tcp
✅ 注意:请确保你已确认新的 SSH 端口并测试连接成功后再关闭默认 22 端口。
🎯 三、允许某个 IP 访问特定端口(如 MongoDB 的 27017)
若你想只允许某个特定 IP(例如 10.3.69.6
)访问 MongoDB 的 27017 端口,可以使用 rich rule:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.3.69.6" port protocol="tcp" port="27017" accept'
🌐 四、允许某个网段访问特定端口
如果你想让整个子网(如 10.3.69.0/24
)都能访问 27017 端口,只需修改源地址为 CIDR 格式:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.3.69.0/24" port protocol="tcp" port="27017" accept'
📦 五、允许某个 IP 访问一段端口范围
如果 MongoDB 实例使用了多个端口(比如 27000-27017
),你可以这样设置:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.3.69.6" port protocol="tcp" port="27000-27017" accept'
🗑️ 六、删除某条防火墙规则
当你需要移除某条规则时,可以使用以下命令:
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.3.69.6" port protocol="tcp" port="27017" accept'
⚠️ 注意:必须精确匹配原始规则字符串才能正确删除。
💡 七、重新加载防火墙规则
每次对规则进行修改后,都需要重载防火墙以使更改生效:
sudo firewall-cmd --reload
📋 八、查看当前防火墙规则
要查看当前生效的所有规则,可以使用:
sudo firewall-cmd --list-all
或者只查看 rich rules:
sudo firewall-cmd --list-rich-rules
📝 总结
操作 | 命令 |
---|---|
查询 SSH 端口 | grep ^Port /etc/ssh/sshd_config 、ss -tlnp | grep ssh |
放行所有 IP 访问某端口 | --add-port=<port>/<proto> |
放行指定 IP 访问某端口 | --add-rich-rule='rule ...' |
放行指定 IP 访问端口范围 | port="start-end" |
删除规则 | --remove-rich-rule='...' |
重载规则 | --reload |
查看规则 | --list-all 、--list-rich-rules |