您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用FirewallD配置防火墙
## 目录
1. [FirewallD简介](#firewalld简介)
2. [安装与基本命令](#安装与基本命令)
3. [区域(Zone)管理](#区域zone管理)
4. [服务(Service)管理](#服务service管理)
5. [端口管理](#端口管理)
6. [富规则(Rich Rules)](#富规则rich-rules)
7. [高级配置技巧](#高级配置技巧)
8. [实战案例](#实战案例)
9. [常见问题排查](#常见问题排查)
---
## FirewallD简介
FirewallD是Linux系统上动态管理的防火墙解决方案,作为iptables/nftables的前端工具,它提供以下核心优势:
- **动态规则更新**:无需重启服务即可应用配置变更
- **区域(zone)概念**:根据不同网络环境预定义安全级别
- **D-Bus接口**:支持与系统其他组件深度集成
- **向后兼容**:底层仍使用iptables或nftables

> 注:本文基于CentOS/RHEL 8+系统演示,其他发行版可能需要调整命令
---
## 安装与基本命令
### 安装步骤
```bash
# CentOS/RHEL
sudo yum install firewalld -y
# Ubuntu/Debian
sudo apt install firewalld -y
# 启动服务
sudo systemctl start firewalld
# 设置开机自启
sudo systemctl enable firewalld
# 检查状态
sudo firewall-cmd --state
# 查看活动区域
sudo firewall-cmd --get-active-zones
# 列出所有预定义服务
sudo firewall-cmd --get-services
# 查看默认区域
sudo firewall-cmd --get-default-zone
FirewallD包含9个预定义区域,按安全等级排序:
区域名称 | 默认规则 |
---|---|
trusted | 允许所有流量 |
home | 仅允许SSH等基础服务 |
public | 最严格的默认区域 |
internal | 类似home但更宽松 |
work | 允许Samba等办公服务 |
# 修改默认区域为work
sudo firewall-cmd --set-default-zone=work --permanent
# 为网卡指定区域
sudo firewall-cmd --zone=home --change-interface=eth0
# 查看特定区域配置
sudo firewall-cmd --zone=public --list-all
# 允许HTTP服务(临时生效)
sudo firewall-cmd --add-service=http
# 永久允许SSH
sudo firewall-cmd --add-service=ssh --permanent
# 重载配置
sudo firewall-cmd --reload
# /etc/firewalld/services/myapp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>My Application</short>
<description>Custom application service</description>
<port protocol="tcp" port="8080"/>
<port protocol="udp" port="8081"/>
</service>
sudo firewall-cmd --reload
sudo firewall-cmd --add-service=myapp --permanent
# 开放单个端口
sudo firewall-cmd --add-port=3306/tcp
# 开放端口范围
sudo firewall-cmd --add-port=8000-9000/tcp
# 永久删除端口规则
sudo firewall-cmd --remove-port=22/udp --permanent
# 将80端口转发到内部8080
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 转发到特定IP
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100
复杂场景下的高级规则语法:
# 允许来自特定IP的SSH访问
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.10" service name="ssh" accept'
# 拒绝某IP段访问3306端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="3306" protocol="tcp" reject'
# 限速规则(每分钟10个连接)
sudo firewall-cmd --add-rich-rule='rule service name="http" limit value="10/m" accept'
# 禁止所有ping请求
sudo firewall-cmd --add-icmp-block=echo-request
# 允许特定ICMP类型
sudo firewall-cmd --add-icmp-block-inversion
# 为被拒绝的连接添加日志
sudo firewall-cmd --set-log-denied=all
# 自定义日志前缀
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" log prefix="LAN_ACCESS:" level="notice" accept'
# 设置默认区域
sudo firewall-cmd --set-default-zone=public
# 开放服务
sudo firewall-cmd --add-service=http --add-service=https --permanent
# 限制SSH访问源IP
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.15" service name="ssh" accept' --permanent
# 拒绝其他所有入站流量
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --reload
# 创建专用区域
sudo firewall-cmd --new-zone=dbzone --permanent
sudo firewall-cmd --reload
# 配置规则
sudo firewall-cmd --zone=dbzone --add-service=mysql --permanent
sudo firewall-cmd --zone=dbzone --add-source=192.168.1.0/24 --permanent
sudo firewall-cmd --zone=dbzone --add-port=3306/tcp --permanent
# 检查规则加载顺序
sudo iptables -L -n --line-numbers
# 验证配置是否已永久保存
sudo firewall-cmd --check-config
# 查看完整活动规则
sudo firewall-cmd --list-all-zones
# 检查端口是否真正开放
sudo ss -tulnp | grep 80
# 重置到上次重载状态
sudo firewall-cmd --reload
# 完全恢复默认配置
sudo firewall-cmd --reset-to-defaults
最佳实践建议: 1. 生产环境每次修改都添加
--permanent
参数后手动reload 2. 使用--timeout
参数测试临时规则(如--add-port=8080/tcp --timeout=300
) 3. 定期备份配置目录:/etc/firewalld/
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。