Linux :firewalld
防火墙基础概念
- 核心功能:
- 隔离风险区域与安全区域
- 过滤不安全服务和非法用户
- 限制用户访问特定网络
- 提供安全监控能力
二、防火墙
netfilter模块–网络过滤模块
/lib/modules/3.10.0-957.el7.x86_64/kernel/net/netfilte
工具 | 适用系统 | 特点 |
---|---|---|
netfilter | Linux 内核模块 | 基础网络过滤框架 |
iptables | CentOS 6 | 传统管理工具 |
firewalld | CentOS 7+ | 动态防火墙,支持实时更新 |
三、Firewalld 核心概念
-
特殊区域(Zones):
Zone 行为 反馈 drop
强制拒绝流量 无响应 block
拒绝流量 返回拒绝消息 trusted
允许所有流量 - 📌 关键特性:
drop/block
区域始终禁止流量(无论是否勾选服务)trusted
区域始终允许流量
四、常用命令
# 基础操作
firewall-cmd --state # 查看状态
[root@xieyuhui ~]# firewall-cmd --state
running
firewall-cmd --get-default-zone # 查看默认区域
[root@xieyuhui ~]# firewall-cmd --get-default-zone
public
firewall-cmd --set-default-zone=home # 设置默认区域
[root@xieyuhui ~]# firewall-cmd --set-default-zone=home
success
[root@xieyuhui ~]# firewall-cmd --get-default-zone
home
# 服务管理
firewall-cmd --add-service=http # 允许 HTTP 服务(临时生效)
firewall-cmd --add-service=http --permanent # 永久生效
[root@xieyuhui ~]# firewall-cmd --add-service=http --permanent
success
firewall-cmd --remove-service=http # 移除服务
[root@xieyuhui ~]# firewall-cmd --remove-service=http
success
# 端口管理
firewall-cmd --add-port=8080/tcp # 开放端口
[root@xieyuhui ~]# firewall-cmd --add-port=8080/tcp
success
firewall-cmd --list-all # 查看所有配置
[root@xieyuhui ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
五、富规则(Rich Rules)
-
语法:
firewall-cmd --add-rich-rule='' --permanent
-
核心组件:
rule family=ipv4/ipv6 # 协议 source address=192.168.100.10/24 # 源地址 service name=http # 服务名 port=80 protocol=tcp # 端口协议 accept/reject/drop # 动作
-
典型场景:
# 允许特定网段访问 HTTP firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.100.10/24 service name=http accept' --permanent # 拒绝 SSH 连接并记录日志 firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.100.10/24 service name=ssh audit limit value=2/m reject' --timeout=600(未来10分钟内拒绝ssh)
六、网络增强功能
-
IP 转发与伪装:
# 启用 IP 转发 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p # 对某个区域伪装 firewall-cmd --add-masquerade --zone=public --permanent #启用伪装 firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.100.0/24 masquerade' --zone=public --permanent
-
端口转发:
# 基础转发 firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 # 富规则转发(带目标IP) firewall-cmd --add-rich-rule='rule family=ipv4 source address=8.8.8.0/24 forward-port port=80 protocol=tcp to-port=80 to-addr=192.168.100.10' --permanent
-
禁 Ping 配置:
vim /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all=1 sysctl -p
七、日志与审计
-
日志级别:
emerg > alert > crit > error > warning > notice > info > debug
-
审计规则示例:
# 记录 HTTP 访问(notice 级别,限速 10条/分钟) firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.100.10/24 service name=http log prefix=http level=notice limit value=10/m accept' --permanent
八、操作流程
#配置标准流程
1.添加规则
firewall-cmd --add-rich-rule='' --permanent
2. 重新加载
firewall-cmd --reload
3. 验证配置
firewall-cmd --list-all