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

相关推荐
帅帅梓14 小时前
docker 资源限制
运维·docker·容器
zt1985q14 小时前
本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )
运维·服务器·windows·rabbitmq·ruby
赖small强15 小时前
【蓝牙】BLE 数据收发实战指南(手机 App ↔ 嵌入式 Linux/BlueZ)
linux·蓝牙·bluez·bluetoothctl·dbus-monitor·central·peripheral
wit_yuan15 小时前
linux udp广播数据包实际用例
linux·服务器·udp
大聪明-PLUS15 小时前
io_uring:Linux 上的高性能异步 I/O
linux·嵌入式·arm·smarc
qq_4798754315 小时前
Linux time function in C/C++【2】
linux·c语言·c++
小武~15 小时前
嵌入式网络编程深度优化 --网络协议栈配置实战指南
linux·网络·网络协议
二进制星轨15 小时前
在 Ubuntu 上快速配置 Node.js 环境(附问题说明)
linux·ubuntu·node.js
kblj555515 小时前
学习Linux——网络——网卡
linux·网络·学习
zhanglianzhao15 小时前
基于云服务器自建Rustdesk远程桌面——以京东云为例
运维·服务器·京东云