1. 防火墙类型对比
包过滤防火墙(Packet Filtering)
- 层级:工作在网络层(IP)和传输层(TCP/UDP)。
- 功能:基于IP地址、端口、协议类型(TCP/UDP/ICMP)过滤流量。
- 示例:允许来自192.168.1.0/24的SSH(22端口)流量。
- 缺点:无法检测应用层内容(如HTTP请求中的恶意载荷)。
应用层防火墙(Application Layer Firewall)
- 层级:工作在应用层(如HTTP、FTP)。
- 功能:深度解析协议内容,阻止SQL注入、恶意文件上传等攻击。
- 示例:阻止HTTP请求中包含/etc/passwd的路径。
- 工具示例:ModSecurity(用于Web服务器)。
状态检测防火墙(Stateful Inspection)
- 核心:跟踪连接状态(如TCP握手、UDP会话)。
- 优势:自动放行已建立连接(ESTABLISHED)的返回流量,减少规则复杂度。
- 示例:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
2. iptables四表五链
四张表(Tables)
表名 | 用途 | 支持的链 |
filter | 流量过滤(默认表) | INPUT, FORWARD, OUTPUT |
nat | 网络地址转换(NAT) | PREROUTING, POSTROUTING, OUTPUT |
mangle | 修改数据包(如TTL、QoS标记) | 所有链 |
raw | 绕过连接跟踪(conntrack) | PREROUTING, OUTPUT |
五条链(Chains)
链名 | 触发时机 | 常见操作 |
PREROUTING | 数据包进入系统后,路由判断前 | DNAT(目标地址转换) |
INPUT | 数据包目标为本机进程 | 过滤入站流量 |
FORWARD | 数据包需要转发到其他主机 | 过滤转发流量 |
OUTPUT | 本机进程产生的出站数据包 | 过滤出站流量 |
POSTROUTING | 数据包离开系统前,路由判断后 | SNAT(源地址转换) |
查看规则命令
# 查看filter表规则(默认表)
iptables -L -n -v --line-numbers
# 查看nat表规则
iptables -t nat -L -n -v
# 删除INPUT链第3条规则
iptables -D INPUT 3
3. firewalld基础操作
核心概念
- 区域(Zone):定义网络接口的信任级别(如public、internal、dmz)。
- 服务(Service):预定义规则集(如http、ssh),包含协议和端口。
- 运行时(Runtime) vs 永久(Permanent):临时规则需通过--permanent保存。
常用命令
# 查看默认区域
firewall-cmd --get-default-zone
# 将eth0接口绑定到internal区域
firewall-cmd --zone=internal --change-interface=eth0 --permanent
# 允许HTTP服务(永久生效)
firewall-cmd --permanent --add-service=http
firewall-cmd --reload # 重新加载配置
# 开放8080/TCP端口(临时生效)
firewall-cmd --add-port=8080/tcp
# 查看所有区域配置详情
firewall-cmd --list-all-zones
4. 数据包处理流程
完整流程图
数据包处理流程图
关键点
- PREROUTING:用于DNAT(如将公网IP的80端口转发到内网服务器)。
- POSTROUTING:用于SNAT(如内网主机通过网关访问外网时隐藏源IP)。
- INPUT/OUTPUT:仅处理本机流量。
5. 实践任务
任务1:查看iptables规则
- 列出filter表的规则:
iptables -L -n -v --line-numbers
- 观察默认策略(ACCEPT/DROP)及规则顺序。
任务2:配置firewalld允许SSH
- 添加SSH服务到public区域(永久生效):
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload
- 验证规则是否生效:
firewall-cmd --zone=public --list-services
任务3:模拟数据包流程
- 从外部主机ping本机,观察是否被阻止(默认策略可能允许ICMP)。
- 添加一条拒绝ICMP的规则:
iptables -A INPUT -p icmp -j DROP
- 再次测试ping,确认被拒绝。
6. 注意事项
- 规则顺序:iptables规则按顺序匹配,第一条匹配的规则生效。
- 默认策略:生产环境建议将默认策略设为DROP,再按需放行。
iptables -P INPUT DROP # 慎用!可能导致SSH断开!
- 配置保存:
- iptables:iptables-save > /etc/iptables/rules.v4
- firewalld:修改后需--reload生效。