1.Linux包过滤防火墙概述
netfilter
位于linux内核中的包过滤功能体系
称为linux防火墙的"内核态”
iptables
位于/sbin/iptables,用来管理防火墙规则的工具
称为lilnux防火墙的“用户态”
————上述2种称呼都可以表示Linux防火墙
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对包内的IP地址,端口等信息的处理上

2.iptables的表、链结构
规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出战数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
规则链之间的顺序(重要)
入站:prerouting-->input
出站 :output->postrouting
转发:prerouting->forward->postrouting
规则链内部各防火墙规则之间的顺序
按顺序依次检查,匹配即停止(log策略例外)
若找不到相匹配的规则,则按该链的默认策略处理

规则表
作用及划分依据
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确认是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
规则表之间的顺序(重要)
raw--->mangle-->nat--->filter
| 表名称 | 功能 |
|---|---|
| filter表 | 用来对数据包过滤,根据具体的规则要求决定如何处理一个数据包filter表对应的内核模块为iptable_filter,表内包含一个连,即INPUT,FORWARD,OUTPUT |
| nat表 | nat(网络地址转换)表主要用来修改数据包的ip地址,端口信息,nat表对应的内核模块为iptable_nat,表内包包含三个链,即PREROUTING,postrouting,output |
| mangle表 | 用来修改数据包的TOS(服务类型)TTL(生存周期),或者为数据包设置Mark标记,已实现流量整形,策略路由等高级应用,mangle表对应的内核模块为iptable_mangle,表内包含五个链,即prerouting,postrouting,input,output,forward |
| raw表 | 是自1.2.9以后版本的iptables新增的表,主要用来决定是否对数据包进行状态跟踪,raw表对应的内核模块为iptable_raw,表内包含两个链,即output,prerouting |

其中,input ,output链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而forward, prerouting.postrouting链 多用在“网络型防火墙”中,如使用linux防火墙作为网关服务器,在公司内网与internet之间进行安全控制。
如图所示:

数据包过滤的匹配流程
数据包过滤的匹配流程示意图

3.iptables安装
centos 7默认安装的是firewalld防火墙,若想要使用iptables防火墙,必须先关闭firewalld防火墙
关闭firewalld防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
安装iptables防火墙
yum -y install iptables-services
设置iptables开机自启动
systemctl start iptables.service
systemctl enable iptables.services
永久关闭核心防护
vi /etc/selinux/conf
SELINUX=disabled
4.iptables的基本语法
1.语法构成
iptables [-t 表名] 选项 [链名] [条件] [-i 控制类型]
例如:iptables -t filter -I INPUT -p(阻止ping测试) icmp -j REJECT
注意事项
不指定表名时,默认指filter表
不指定链接=名时,默认指定表内所有链
除非设置链的默认策略,否则必须指定匹配条件
选项,链名,控制类型使用大写字母,其余均为小写
数据包的常见的控制类型
ACCEPT:允许通过
DROP: 直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG: 记录日志信息,然后传给下一条规则继续匹配
2.添加,查看,删除规则等基本操作
iptables命令的常用管理选项
| 选项名 | 功能及特点 |
|---|---|
| -A | 在指定的末尾添加(append)一条新的规则 |
| -D | 删除(delete)指定链中的某一条过着,可指定规则序号或具体内容 |
| -I | 在指定链中插入(insert)一条新的规则。未指定序号时默认作为第一条规则 |
| -R | 修改,替换(replace)指定链中的某一条规则,可指定规则序号或具体内容 |
| -L | 列出(list)指定链中的所有规则,若未指定链名,则列出表中的所有链 |
| -F | 清空(flush)指定链中所有规则,若未指定链名,则清空表中所有链 |
| -P | 设置链的默认则略(policy) |
| -n | 使用数字形式(numeric)显示输出结果,如显示ip地址而不是主机名 |
添加新的规则
-A: 在链的末尾追加一条规则
-I :在链的开头(或指定序号)插入一条规则
例如:
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT 2 -p icmp -j ACCEPT // -p 用来指定协议 ,2用来指定行数
查看规则
| 选项 | 功能 |
|---|---|
| -L | 列出所有的规则条目 |
| -n | 以数字形式显示地址,端口等信息 |
| -v | 以更详细的方式显示规则信息 |
| –line-numbers | 查看规则时,显示规则的序号 |
例如:查看filter表input链里面的所有语句
删除,清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有规则
删除一条规则使用管理选项 -D
例如:若要删除filter表input链中的第三条规则,可以执行以下操作
iptables -D INPUT 3
iptables -n -L INPUT //确认删除效果
清空指定链或表中的所有防火墙规则,使用管理选项 -F
例如 :要清空filter表INPUT
iptables -t filter -n -L INPUT
清空所有表的所有链
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
表的优先级:raw > mangle > nat > filter
设置默认策略
-P:为指定的链设置默认规则
例如:清空所有默认策略要么是ACCEPT,要么是DROP表的所有链
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT
注意:不指定表默认跟的是前面一个表
注意:当使用管理选项-f清空链时,默认策略不受影响,因此若要修改默认策略,必须通过管理选项-P重新进行设置,另外,默认策略不参与链内规则德顺序编排,因此其他规则之前或之后设置并无区别。
5.规则的匹配条件
在编写防火墙规则时,匹配条件设设置骑着决定性的作用,只有清晰,准确的设置好匹配条件,防火墙才知道要对符合什么条件的数据包进行处理,避免误杀,对于同一条防火墙规则,可以指定多个匹配条件,表示这些条件必须都满足规则才会生效,根据数据包的各种特征,结合iptables的模块结构,匹配条件的设置包括三大类:通用匹配,隐含匹配,显式匹配。
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议,ip地址,网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口,tcp标记,icmp类型条件等
显式匹配
要求以“-m扩展模块”的形式明确指出类型
包括多端口,mac地址,ip范围,数据包状态等条件
常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址(入站),-d目的地址(出站)
接口匹配:-i入站网卡,-o出站网卡
例如:在input末尾插入一条规则入站ens33源地址为 私有网址段都不允许通过
iptables -AINPUT -i ens33 -s 192.168.1.1/16 -j DROP
iptables -A INPUT -i ens33 -s 10.0.0./8 -j DROP
iptables -A INPUT -i ens33 -s 192.168.0.0/12 -j DROP
以上是不允许私有网段访问
iptables -I INPUT -p icmp -j DROP //在input开头插入一条规则允许icmp可访问
iptables -A FORWORD !-p icmp -j ACCEPT //在input末尾插入一条规则 ,取反,只要不是icmp就允许通过
常用的隐含匹配条件
端口匹配:--sport 源端口,--dport目的端口
icmp类型匹配:--icmp-typeICMP类型
例如:
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT //允许4.0访问内网的
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
ICMP类型匹配
编写iptables规则时使用“--icmp-type ICMP 类型”的形式,针对的协议为icmp,用来
检查icmp数据包类型(--icmp-type),ICMP类型使用字符串或数字代码表示,如“E”
常用的显式
匹配条件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
ip范围匹配: -m iprange --src-range ip范围
MAC地址匹配:-m mac --mac-souece mac地址
状态匹配: -m state --state 连接状态
例如:连接状态
iptables -A INPUT -p tcp -m multiport -dport 25.90.110.143 -j ACCEPT
iiptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-
192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source 00:0c;29:c0:55:3f -j DROP
常用管理选项汇总
| 类别 | 条件类型 | 用法 |
|---|---|---|
| 通用匹配 | 协议匹配 | -p协议名 |
| 通用匹配 | 地址匹配 | -s 源地址,-d 目的地址 |
| 通用匹配 | 接口匹配 | -i 入站网卡 , -o 出站网卡 |
| 隐含匹配 | 端口匹配 | –sport源端口,–dport 目的端口 |
| 隐含匹配 | ICMP类型匹配 | –icmp-type ICMP类型 |
| 显式匹配 | 多端口匹配 | -m multiport --sport l --dports端口列表 |
| 显式匹配 | ip范围匹配 | -m iprange --src-range IP范围 |
| 显式匹配 | mac地址匹配 | -m mac --mac-source MAC地址 |
| 显式匹配 | 状态匹配 | -m state --state 连接状态 |
| 类别 | 选项 | 用途 |
|---|---|---|
| 添加新的规则 | -A | 在链的末尾追加一条规则 |
| 添加新的规则 | -I | 在链的开头(或指定序号)插入一条规则 |
| 查看规则列表 | -L | 列出所有的规则条目 |
| 查看规则列表 | -n | 以数字形式显示地址,端口等信息 |
| 查看规则列表 | -v | 以更详细的方式显示规则信息 |
| 查看规则列表 | –line-numbers | 查看规则时,显示规则序号 |
| 删除,清空规则 | -D | 删除链内指定序号(或内容)的一条规则 |
| 删除,清空规则 | -F | 清空所有规则 |
| 设置默认策略 | -P | 为指定的链设置默认规则 |
1528



被折叠的 条评论
为什么被折叠?



