怎么用FirewallD配置防火墙

发布时间:2022-02-16 13:14:24 作者:iii
来源:亿速云 阅读:223
# 怎么用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

![FirewallD架构示意图](https://example.com/firewalld-arch.png)

> 注:本文基于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

区域(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

服务(Service)管理

预定义服务示例

# 允许HTTP服务(临时生效)
sudo firewall-cmd --add-service=http

# 永久允许SSH
sudo firewall-cmd --add-service=ssh --permanent

# 重载配置
sudo firewall-cmd --reload

自定义服务创建

  1. 创建服务定义文件:
# /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>
  1. 加载新服务:
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

富规则(Rich Rules)

复杂场景下的高级规则语法:

# 允许来自特定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'

高级配置技巧

ICMP控制

# 禁止所有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'

实战案例

场景1:Web服务器配置

# 设置默认区域
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

场景2:数据库服务器

# 创建专用区域
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

常见问题排查

1. 规则不生效

# 检查规则加载顺序
sudo iptables -L -n --line-numbers

# 验证配置是否已永久保存
sudo firewall-cmd --check-config

2. 服务无法访问

# 查看完整活动规则
sudo firewall-cmd --list-all-zones

# 检查端口是否真正开放
sudo ss -tulnp | grep 80

3. 配置回滚

# 重置到上次重载状态
sudo firewall-cmd --reload

# 完全恢复默认配置
sudo firewall-cmd --reset-to-defaults

最佳实践建议: 1. 生产环境每次修改都添加--permanent参数后手动reload 2. 使用--timeout参数测试临时规则(如--add-port=8080/tcp --timeout=300) 3. 定期备份配置目录:/etc/firewalld/ “`

推荐阅读:
  1. Linux防火墙firewalld安全设置
  2. Firewalld防火墙基础

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

firewalld 防火墙

上一篇:网络状态工具SS命令怎么用

下一篇:laravel中契约和门面有哪些区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》