Linux iptables 防火墙
Linux iptables 防火墙入门教程(一):基础概念与规则配置
在互联网环境中,企业服务器面临着各类网络访问请求,既有正常的用户访问,也有潜在的恶意入侵。Linux 系统自带的 iptables
防火墙,凭借其内核级的高效性能和灵活的规则配置能力,成为保护服务器安全的重要工具。本文将从 iptables
的核心架构入手,详细讲解其表链结构、匹配流程,并通过实操演示规则的添加、查看、删除等基础操作,帮助初学者快速掌握 iptables
的使用方法。
一、iptables 概述:内核与用户态的协作
iptables
并非单一组件,而是由 内核态的 netfilter 和 用户态的 iptables 工具 共同组成的防火墙体系,二者分工明确:
1.1 netfilter:内核空间的“防火墙核心”
netfilter 是 Linux 内核 2.4.x 之后集成的子系统,工作在 内核空间(Kernel Space),是防火墙功能的“执行者”。它具备以下特性:
- 模块化设计:支持通过扩展模块实现过滤、地址转换、流量整形等功能;
- 与 IP 协议栈无缝契合:直接对流经内核的 TCP/IP 数据包进行处理;
- 内置规则表:通过表、链结构组织规则,实现对数据包的精准控制。
netfilter 官网文档:https://netfilter.org/documentation/
1.2 iptables:用户空间的“规则管理器”
iptables 是一款命令行工具,工作在 用户空间(User Space),是运维人员操作防火墙的“入口”。它的核心作用是:
- 向 netfilter 的规则表中添加、修改、删除规则;
- 查看当前规则配置,监控规则匹配情况;
- 无需重启服务,规则配置后立即生效。
1.3 核心表结构:四表五链
为了高效组织规则,iptables 内置了 4 个规则表 和 5 个规则链,形成“表里有链、链里有规则”的分层结构:
- 表:按规则用途分类(如过滤、地址转换),默认包含 4 个表;
- 链:按数据包处理时机分类(如入站、转发、出站),每个表包含不同的链;
- 规则:定义对数据包的处理逻辑(如允许、丢弃),按顺序匹配执行。
二、iptables 核心架构:四表五链详解
2.1 四大规则表(按用途划分)
表名 | 核心作用 | 包含链 | 应用场景 |
---|---|---|---|
raw | 决定是否对数据包进行“状态跟踪”,优先级最高 | OUTPUT、PREROUTING | 极少用,多用于特殊场景 |
mangle | 修改数据包内容(如添加标记),用于流量整形 | INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING | 流量控制、QoS 配置 |
nat | 网络地址转换(修改源/目标 IP/端口) | OUTPUT、PREROUTING、POSTROUTING | 内网访问公网(SNAT)、端口映射(DNAT) |
filter | 核心表,负责数据包过滤(允许/拒绝),默认表 | INPUT、FORWARD、OUTPUT | 日常服务器安全防护 |
注:实际运维中,
filter
表(过滤)和nat
表(地址转换)使用频率最高,raw
和mangle
表多用于复杂场景。
2.2 五大规则链(按处理时机划分)
链名 | 处理时机 | 应用场景 |
---|---|---|
INPUT | 处理入站数据包(目标 IP 为本机) | 控制外部对本机服务的访问(如 SSH、Web) |
OUTPUT | 处理出站数据包(本机向外部发送) | 控制本机对外的访问(极少配置) |
FORWARD | 处理转发数据包(流经本机但目标非本机) | 网络型防火墙(如路由器转发) |
PREROUTING | 数据包路由选择前处理,可修改目标地址 | DNAT(端口映射)、修改目标 IP |
POSTROUTING | 数据包路由选择后处理,可修改源地址 | SNAT(内网访问公网)、IP 伪装 |
2.3 数据包匹配流程:从进入到处理
数据包流经 iptables 时,会按“表优先级”和“链顺序”依次匹配,核心流程如下:
1. 表的优先级顺序
raw
→ mangle
→ nat
→ filter
(优先级从高到低,前一个表处理完后,再进入下一个表)。
2. 不同场景的链匹配顺序
-
主机型防火墙(数据包目标为本机):
PREROUTING
(raw→mangle→nat) → 路由选择 →INPUT
(mangle→filter) → 本机应用程序
(出站时:本机应用程序 →OUTPUT
(raw→mangle→nat→filter) →POSTROUTING
(mangle→nat)) -
网络型防火墙(数据包需转发):
PREROUTING
(raw→mangle→nat) → 路由选择 →FORWARD
(mangle→filter) →POSTROUTING
(mangle→nat)
3. 链内规则匹配原则
- 自上向下按顺序匹配,“匹配即停止”(
LOG
动作除外,仅记录日志,不终止匹配); - 若未找到匹配规则,按链的 默认策略 处理(默认策略为
ACCEPT
,即允许)。
三、iptables 实操:安装与基础规则配置
3.1 环境准备:安装 iptables(CentOS 7 为例)
CentOS 7 默认使用 firewalld
防火墙,需先关闭并安装 iptables
:
# 1. 关闭 firewalld 并禁止开机启动
systemctl stop firewalld.service
systemctl disable firewalld.service# 2. 安装 iptables 及服务管理工具
yum -y install iptables iptables-services# 3. 启动 iptables 并设置开机启动
systemctl start iptables.service
systemctl enable iptables.service
3.2 核心语法:规则配置的通用格式
iptables 命令的语法严格遵循以下结构,缺一不可(部分参数可省略,有默认值):
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
参数说明
参数 | 含义与注意事项 |
---|---|
-t 表名 | 指定操作的表(如 filter 、nat ),默认操作 filter 表 |
管理选项 | 规则操作(如添加、查看、删除),需大写(如 -A 、-L 、-D ) |
链名 | 指定操作的链(如 INPUT 、FORWARD ),默认操作表内所有链 |
匹配条件 | 数据包的特征(如 IP、端口、协议),需小写(如 -s 192.168.1.1 、-p tcp ) |
-j 控制类型 | 匹配后的处理动作,需大写(如 ACCEPT 、DROP 、REJECT ) |
3.3 常用控制类型:数据包的处理动作
控制类型 | 作用 | 适用场景 |
---|---|---|
ACCEPT | 允许数据包通过,终止匹配 | 放行正常访问(如 SSH、Web) |
DROP | 直接丢弃数据包,不返回任何响应(“静默拒绝”) | 防御恶意扫描、攻击 |
REJECT | 拒绝数据包,返回响应(如“端口不可达”) | 需告知客户端“访问被拒绝”的场景 |
LOG | 记录日志到 /var/log/messages ,不终止匹配,需配合其他动作使用 | 审计、排查异常访问 |
SNAT | 修改数据包源 IP(如内网 IP → 公网 IP) | 内网主机通过公网 IP 上网 |
DNAT | 修改数据包目标 IP/端口(如公网端口 → 内网服务器) | 端口映射(如外网访问内网 Web) |
MASQUERADE | 动态伪装源 IP(适用于公网 IP 不固定的场景,如拨号上网) | 家庭路由器、临时网络 |
3.4 基础操作:添加、查看、删除规则
3.4.1 查看规则:了解当前配置
查看规则是运维的第一步,常用命令如下:
规则字段解读(以 -vnL INPUT
输出为例):
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- ens33 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
pkts/bytes
:匹配到的数据包数量/总字节数;target
:处理动作(如ACCEPT
);prot
:匹配的协议(如tcp
);in/out
:入站/出站网卡(*
表示所有网卡);source/destination
:源/目标 IP/网段(0.0.0.0/0
表示所有地址)。
3.4.2 添加规则:允许/拒绝访问
添加规则使用 -A
(追加到链末尾)或 -I
(插入到链指定位置,默认插入到开头):
# 示例 1:允许所有主机访问本机 22 端口(SSH)
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT# 示例 2:拒绝 192.168.80.100 访问本机 80 端口(Web)
iptables -I INPUT 2 -s 192.168.80.100 -p tcp --dport 80 -j DROP
# -I INPUT 2:插入到 INPUT 链第 2 条规则;-s:指定源 IP# 示例 3:禁止所有主机 ping 本机(ICMP 协议)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# --icmp-type 8:ICMP 请求(ping 请求);类型 0 为 ping 响应
3.4.3 删除规则:清理无用配置
删除规则有两种方式:按“规则序号”删除(推荐)、按“规则内容”删除:
# 方式 1:按序号删除(先通过 --line-numbers 查看序号)
iptables -D INPUT 2 # 删除 INPUT 链第 2 条规则# 方式 2:按内容删除(需完整匹配规则)
iptables -t filter -D INPUT -p icmp --icmp-type 8 -j DROP
3.4.4 清空规则与重置默认策略
# 1. 清空 filter 表所有链的规则(-F:flush)
iptables -F# 2. 清空 nat 表所有链的规则
iptables -t nat -F# 3. 重置链的默认策略(-P:policy)
iptables -P INPUT DROP # INPUT 链默认拒绝所有数据包
iptables -P FORWARD DROP # 转发链默认拒绝(网络型防火墙常用)
iptables -P OUTPUT ACCEPT # 出站链默认允许
警告:若远程操作服务器,设置
INPUT
链默认策略为DROP
前,需先添加允许 SSH(22 端口)的规则,否则会断开远程连接!
3.5 常见匹配条件:精准控制数据包
iptables 的匹配条件分为三类:通用匹配、隐含匹配、显式匹配,覆盖大部分场景需求。
1. 通用匹配(无需依赖模块,直接使用)
匹配条件 | 示例 |
---|---|
协议匹配 -p | iptables -A INPUT -p tcp -j ACCEPT (允许 TCP 协议) |
源 IP 匹配 -s | iptables -A INPUT -s 192.168.80.0/24 -j ACCEPT (允许 80 网段) |
目标 IP 匹配 -d | iptables -A FORWARD -d 10.0.0.0/8 -j DROP (拒绝转发到 10 网段) |
入站网卡 -i | iptables -A INPUT -i ens33 -p tcp --dport 80 -j ACCEPT (仅允许 ens33 网卡的 80 端口访问) |
2. 隐含匹配(需依赖特定协议,如 TCP/UDP)
# 端口范围匹配(--dport:目标端口;--sport:源端口)
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT # 允许 FTP 端口(20-21)
iptables -A INPUT -p udp --sport 53 -j ACCEPT # 允许 DNS 响应(UDP 53 端口)# TCP 状态匹配(--state:连接状态)
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# ESTABLISHED:已建立的连接;RELATED:与已建立连接相关的连接(如 FTP 数据连接)
3. 显式匹配(需通过 -m
指定扩展模块)
# 多端口匹配(-m multiport:多端口模块)
iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT # 允许 SSH、Web 端口# IP 范围匹配(-m iprange:IP 范围模块)
iptables -A INPUT -p tcp -m iprange --src-range 192.168.80.100-192.168.80.200 --dport 80 -j DROP
# 拒绝 80.100-200 范围的 IP 访问 80 端口# MAC 地址匹配(-m mac:MAC 模块,仅适用于局域网)
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP # 拒绝特定 MAC 地址访问
四、总结与注意事项
- 规则顺序很重要:链内规则按“自上而下”匹配,优先配置“精确允许”规则,再配置“默认拒绝”;
- 远程操作防断连:设置
INPUT
链默认DROP
前,务必先允许 SSH(22 端口); - 规则生效与保存:iptables 规则默认临时生效,重启后丢失,需通过
iptables-save
保存(后续文章会讲解); - 生产环境建议:默认策略设为
DROP
,仅开放必要端口(如 22、80、443),避免“一刀切”允许所有访问。
通过本文的学习,你已掌握 iptables
的核心架构和基础规则配置。下一篇文章将深入讲解 nat
表的地址转换(SNAT/DNAT)、规则保存与备份、以及常见场景的完整配置案例(如 Web 服务器防护、内网访问公网),敬请关注!