文章目录
防火墙服务管理
查看防火墙状态
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
最佳实践建议
- 最小权限原则:只开放必要的端口和服务
- 使用服务而非端口:优先使用预定义服务而非直接开放端口
- 定期审计:定期检查防火墙规则,移除不再需要的规则
- 测试规则:在应用永久规则前先测试临时规则
- 备份配置:在重大更改前备份防火墙配置
- 日志监控:监控防火墙日志以检测异常活动
总结:firewalld 提供了强大而灵活的防火墙管理功能,通过区域概念和服务管理简化了复杂网络环境下的安全配置。掌握这些命令和技巧,能够有效保护系统安全,同时确保必要的网络服务可访问。在实际操作中,建议先在测试环境中验证规则,然后再应用到生产环境。