Linux 防火墙 (firewalld) 管理完整指南

文章目录

防火墙服务管理

查看防火墙状态

bash 复制代码
# 查看防火墙运行状态
systemctl status firewalld

# 检查防火墙是否开机自启
systemctl is-enabled firewalld

启动与停止防火墙

bash 复制代码
# 启动防火墙
systemctl start firewalld

# 重启防火墙
systemctl restart firewalld

# 停止防火墙(临时停用,重启后恢复)
systemctl stop firewalld

# 永久禁用防火墙(开机不启动)
systemctl disable firewalld

# 设置防火墙开机自启
systemctl enable firewalld

防火墙端口管理

查看端口配置

bash 复制代码
# 查看当前生效的端口配置(临时+永久)
firewall-cmd --list-ports

# 查看永久配置的端口
firewall-cmd --list-ports --permanent

# 查看所有开放的服务和端口
firewall-cmd --list-all

添加开放端口

bash 复制代码
# 添加临时端口(重启后失效)
firewall-cmd --add-port=3306/tcp

# 添加永久端口(需重载生效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 批量添加端口范围
firewall-cmd --add-port=8000-9000/tcp --permanent

参数说明

  • --zone:作用域(默认为 public)
  • --add-port:添加端口,格式为 端口号/协议类型
  • --permanent:永久生效(不加此参数为临时生效)

移除端口

bash 复制代码
# 临时移除端口
firewall-cmd --remove-port=80/tcp

# 永久移除端口
firewall-cmd --remove-port=80/tcp --permanent

重载防火墙配置

bash 复制代码
# 重载防火墙配置(使永久配置生效)
firewall-cmd --reload

# 完全重载防火墙(断开现有连接)
firewall-cmd --complete-reload

注意:添加或移除永久端口后,必须执行重载命令才能使更改生效。

服务管理(替代端口管理)

管理预定义服务

bash 复制代码
# 查看所有预定义服务
firewall-cmd --get-services

# 添加服务(如http)
firewall-cmd --add-service=http --permanent

# 移除服务
firewall-cmd --remove-service=http --permanent

常用服务示例

bash 复制代码
# HTTP服务(端口80)
firewall-cmd --add-service=http --permanent

# HTTPS服务(端口443)
firewall-cmd --add-service=https --permanent

# SSH服务(端口22)
firewall-cmd --add-service=ssh --permanent

# FTP服务(端口21)
firewall-cmd --add-service=ftp --permanent

区域管理

查看与设置区域

bash 复制代码
# 查看所有可用区域
firewall-cmd --get-zones

# 查看默认区域
firewall-cmd --get-default-zone

# 查看活动区域
firewall-cmd --get-active-zones

# 设置默认区域
firewall-cmd --set-default-zone=public

# 查看指定区域的配置
firewall-cmd --zone=public --list-all

常用区域说明

  • public:公共区域(默认),适用于不信任的网络环境
  • internal:内部区域,适用于内部网络
  • trusted:信任区域,允许所有连接
  • work:工作区域,适用于工作场所网络
  • home:家庭区域,适用于家庭网络
  • dmz:非军事化区域,适用于对外服务的服务器

高级功能

IP地址限制

bash 复制代码
# 允许特定IP访问所有端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent

# 允许特定IP访问特定端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent

# 拒绝特定IP访问
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.200" reject' --permanent

端口转发

bash 复制代码
# 将80端口转发到8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

# 将80端口转发到特定IP的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=8080 --permanent

网络连接检查

查看端口使用情况

bash 复制代码
# 查看所有TCP端口监听情况
netstat -ntlp

# 查看特定端口使用情况
netstat -ntulp | grep 3306

# 查看所有网络连接
netstat -tuln

# 查看实时网络连接
ss -tunap

故障排除与验证

检查防火墙规则

bash 复制代码
# 检查防火墙是否正常运行
firewall-cmd --state

# 验证端口是否真正开放
telnet your-server-ip 3306

# 或者使用nmap扫描
nmap -p 3306 your-server-ip

保存与恢复配置

bash 复制代码
# 导出当前防火墙配置
firewall-cmd --runtime-to-permanent

# 备份防火墙配置
cp /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.backup

# 恢复防火墙配置
cp /etc/firewalld/firewalld.conf.backup /etc/firewalld/firewalld.conf
systemctl restart firewalld

最佳实践建议

  1. 最小权限原则:只开放必要的端口和服务
  2. 使用服务而非端口:优先使用预定义服务而非直接开放端口
  3. 定期审计:定期检查防火墙规则,移除不再需要的规则
  4. 测试规则:在应用永久规则前先测试临时规则
  5. 备份配置:在重大更改前备份防火墙配置
  6. 日志监控:监控防火墙日志以检测异常活动

总结:firewalld 提供了强大而灵活的防火墙管理功能,通过区域概念和服务管理简化了复杂网络环境下的安全配置。掌握这些命令和技巧,能够有效保护系统安全,同时确保必要的网络服务可访问。在实际操作中,建议先在测试环境中验证规则,然后再应用到生产环境。

相关推荐
朱包林12 分钟前
数据库服务-日志管理-备份与恢复-主从同步
linux·运维·服务器·数据库·mysql·云计算
李法师_23 分钟前
lwIP MQTT 心跳 Bug 分析与修复
linux·c语言·stm32·单片机·lwip
超级大坏蛋20182 小时前
QT .pro文件的常见用法
java·linux·qt
我好饿14 小时前
Linux入门教程 第十五章 Linux 系统调优工具
linux·运维·网络
mCell8 小时前
Docker 进阶教程
运维·docker·容器
mCell8 小时前
Docker 入门教程
运维·docker·操作系统
祈祷苍天赐我java之术8 小时前
Linux 进阶之性能调优,文件管理,网络安全
java·linux·运维
ajassi20009 小时前
开源 C++ QT Widget 开发(七)线程--多线程及通讯
linux·c++·qt·开源
孤雪心殇9 小时前
如何安全,高效,优雅的提升linux的glibc版本
linux·后端·golang·glibc