防火墙及firewall工具详解
防火墙及firewall工具详解
一、防火墙基础概念
防火墙是一种网络安全机制,用于隔离风险区域与安全区域的连接,主要作用包括:
- 阻止未授权用户进入内部网络,过滤不安全服务和非法用户
- 防止入侵者接近内部防御设施
- 限定用户对特定网络的访问权限
- 为监视互联网安全状态提供便利
二、netfilter模块
netfilter是Linux内核中的网络过滤模块,其文件路径通常为:
/lib/modules/4.18.0-193.el8.x86_64/kernel/net/netfilter
Linux系统中常用的netfilter管理工具:
- iptables:主要用于CentOS 6及更早版本
- firewalld:CentOS 7及以上版本的动态防火墙工具(更灵活,支持实时生效)
三、firewalld的使用
1. 特殊Zone(区域)
firewalld通过"区域"管理不同信任级别的网络,其中3个特殊区域:
- drop:强制拒绝所有流量,不返回任何响应(类似直接挂断电话)
- block:拒绝所有流量,但会返回拒绝响应(类似拒接后回拨告知)
- trusted:允许所有流量通过
注:drop和block区域无论是否勾选服务,默认均禁止访问;trusted区域则默认允许所有访问
2. 图形化操作
通过系统自带的防火墙配置工具(如firewall-config
)可直观管理,例如:
安装http服务后,在图形界面勾选"http"服务,即可允许外部访问该服务(默认情况下客户端无法访问)
3. 命令行工具(firewall-cmd)
常用命令:
命令 | 功能 |
---|---|
firewall-cmd --list-all | 查看当前区域的所有配置信息 |
firewall-cmd --get-default-zone | 查看当前默认区域 |
firewall-cmd --set-default-zone=home | 设置默认区域为home |
firewall-cmd --add-service=http | 临时添加http服务允许规则 |
firewall-cmd --add-port=80/tcp | 临时添加80/tcp端口允许规则 |
firewall-cmd --remove-service=http | 移除http服务规则 |
firewall-cmd --change-interface=eth0 --zone=public | 将eth0接口切换到public区域 |
关键参数:
--permanent
表示配置永久生效(需重启防火墙或执行firewall-cmd --reload
生效);未带此参数则仅当前会话生效
4. 富规则(Rich Rules)
富规则用于配置更复杂的访问控制策略,支持基于源地址、服务、端口等的精细控制。
基本动作:
accept
:允许流量通过reject
:拒绝流量并返回响应drop
:直接丢弃流量,无响应
规则优先级:拒绝规则(reject/drop)优先于允许规则(accept)
日志设置:
日志级别(从高到低):emerg
、alert
、crit
、error
、warning
、notice
、info
、debug
审计日志格式:audit limit value=rate/duration
(rate为数字,duration单位:s/秒、m/分、h/时、d/天)
富规则示例:
-
允许172.16.30.0/24网段访问http服务,以notice级别记录日志(每分钟最多10条),永久生效:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 service name=http log prefix=http level=notice limit value=10/m accept' --zone=public --permanent firewall-cmd --reload # 使永久配置生效
-
未来10分钟内(600秒)拒绝172.16.30.0/24网段的ssh连接,每分钟最多记录2条审计日志:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 service name=ssh audit limit value=2/m reject' --timeout=600
5. 伪装(Masquerading)
用于实现NAT(网络地址转换),需先开启IP转发:
-
开启IP转发:
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 # 添加此行 sysctl -p # 使配置生效
-
启用伪装:
- 对特定源地址:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 masquerade' --zone=public --permanent
- 对整个区域:
firewall-cmd --add-masquerade --zone=public --permanent
- 生效配置:
firewall-cmd --reload
- 对特定源地址:
6. 端口转发
将指定端口的流量转发到其他端口或主机,需先开启IP转发。
示例:
-
临时将本地8000/tcp端口流量转发到172.16.30.130的80/tcp端口:
firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80:toaddr=172.16.30.130
-
永久配置:将12.12.12.0/24网段访问本地80/tcp的流量转发到172.16.30.30的80/tcp:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=12.12.12.0/24 forward-port port=80 protocol=tcp to-port=80 to-addr=172.16.30.30' --permanent firewall-cmd --reload
-
永久配置:允许172.16.30.0/24网段访问Server30的9527端口时转发到80端口:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 forward-port port=9527 protocol=tcp to-port=80' --permanent firewall-cmd --reload
7. 禁ping设置
禁止ICMP echo请求(即禁ping):
vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1 # 添加此行
sysctl -p # 生效配置
四、富规则语法总结
基本结构:
rule family=ipv4/ipv6source address=源地址/网段service name=服务名 (或 port port=端口 protocol=协议)[log prefix=前缀 level=日志级别 limit=速率/时间] # 可选日志配置[audit limit=速率/时间] # 可选审计配置[forward-port port=源端口 protocol=协议 to-port=目标端口 to-addr=目标地址] # 可选端口转发动作(accept/reject/drop/masquerade)