iptables的表、 链结构
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它
四表五链
-
链就是位置:共有五个
- 进路由(PREROUTING)
- 进系统(INPUT)
- 转发(FORWARN)
- 出系统(OUTPUT)
- 出路由(POSTROUTING)
-
表就是存储的规则
- 数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行,丢弃,转发还是修改等操作
四表
- 规则表
- 表的作用:容纳各种规则链
- 表的划分依据:防火墙规则的作用相似
- 默认包括4个规则表
- raw表:确定是否对该数据包进行状态跟踪
- mangle表:为数据包设置标记
- nat表:修改数据包中的源、目标IP地址或端口
- filter表:确定是否放行该数据包(过滤)
五链
- 规则链
- 规则的作用:对数据包进行过滤或处理
- 链的作用:容纳各种防火墙规则
- 链的分类依据:处理数据包的不同时机
- 默认包括5种规则链
- INPUT:处理入站数据包
- OUTPUT:处理出站数据包
- FORWARD:处理转发数据包
- POSTROUTING链:在进行路由选择后处理数据包
- PREROUTING链:在进行路由选择前处理数据包
四表五链之间的关系
表包含链
链包含规则
数据包控制的匹配流程
- 规则表之间的顺序
- raw > mangle >nat > filter
- 规则链之间的顺序
- 入站: PREROUTING >INPUT
- 出站: OUTPUT> POSTROUTING
- 转发: PREROUTING>FORWARD→POSTROUTING
- 规则链内的匹配顺序
- 按顺序依次检查,匹配即停止(LOG策略例外)
- 若找不到相匹配的规则,则按该链的默认策略处理
iptables语法格式与常用参数
iptables安装
CentOS 7默认使用firewalld防火墙,若想使用iptables防火墙,必须先关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
安装iptables防火墙
[root@localhost ~]# yum -y install iptables iptables-services
设置iptables开机启动
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
iptables语法格式
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
如果不指定表名,则会默认指定filter表
iptables常用参数
-P 设置默认策略:iptables
-P INPUT(DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加感叹号“!”表示除了这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号
查看规则列表
[root@localhost ~]# iptables -n -L INPUT #-n -L可合写为nL
删除、清空规则
[root@localhost ~]# iptables -D INPUT 3
设置默认策略
[root@localhost ~]# iptables -t filter -P FORWARD DROP
[root@localhost ~]# iptables -P OutPUT ACCEPT #清空所有默认策略要么是ACCEPT、要么是DROP表的所有链
iptables命令使用总结
所有链名必须大写
INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
所有表名必须小写
filter/nat/mangle
所有动作必须大写
ACCEPT/DROP/SNAT/DNAT/MASQUERADE
所有匹配必须小写
-s/-d/-m <module_name>/-p
规则的匹配条件
-
通用匹配
- 可直接使用,不依赖于其他条件或扩展
- 包括网络协议、IP地址、 网络接口等条件
-
隐含匹配
- 要求以特定的协议匹配作为前提
- 包括端口、TCP标记、ICMP类型等条件
-
显式匹配
- 要求以"-m扩展模块"的形式明确指出类型
- 包括多端口、MAC地址、IP范围、数据包状态等条件
-
常见的通用匹配条件
- 协议匹配: -p 协议名
- 地址匹配: -s 源地址、-d 目的地址
- 接口匹配: -i入站网卡、-0 出站网卡
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT #叹号!表示条件取反
[root@localhost ~]# iptables -A FORWARD -S 192.168.1.11 -j REJECT
[root@localhost ~]# iptables I INPUT -S 10.20.30.0/24 -j DROP
[root@localhost ~]# iptables -A INPUT -i ens33 -S 192.168.0.0/16 -j DROP
[root@localhost ~]# iptables -A INPUT -i ens33 -S 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i ens33 -S 172.16.0.0/12 -j DROP
- 常用的隐含匹配条件
- 端口匹配: --sport源端口、–dport目的端口
- ICMP类型匹配: --icmp-type ICMP类型
[root@localhost ~]# iptables -A FORWARD -S 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -P tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -P icmp --icmp-type 0- j ACCEPT
[root@localhost ~]# iptables -A INPUT -P icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP
8请求,0回显,3不可达
- 常用的显式匹配条件
- 多端口匹配: -m multiport --sports源端口列表
-m multiport --dports目的端口列表 - IP范围匹配: -m iprange --src-range IP范围
- MAC地址匹配: -m mac --mac -source MAC地址
- 状态匹配: -m state --state连接状态
- 多端口匹配: -m multiport --sports源端口列表
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport -port 25,80,110,143 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -P tcp -m iprange --r-range 192.168.4.21-192.168.4.28 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables 4 INPUT -P tcp -m multiport --dport 80 -j ACCEPT
[root@localhost ~]# iptables | INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
常用管理选项汇总
类别 | 条件类型 | 用法 |
---|---|---|
通用匹配 | 协议匹配 | -p协议名 |
地址匹配 | -S源地址、-d目的地址 | |
接口匹配 | -i入站网卡、-0出站网卡 | |
隐含匹配 | 端口匹配 | –sport源端口、–dport 目的端口 |
ICMP类型匹配 | –icmp-type ICMP类型 | |
显式匹配 | 多端口匹配 | -m multiport --sports |
IP范围匹配 | -m iprange --src-range IP范围 | |
MAC地址匹配 | -m mac --mac-source MAC地址 | |
状态匹配 | -m state --state连接状态 |