详述iptables五种链接
一、初识防火墙
Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件;
防火墙类型分为: 主机防火墙 和网络防火墙
实现方法分为:软件防火墙(软件逻辑)和硬件防火墙(硬件和软件逻辑)
二、iptables五种链接
内置规则链逻辑图.pngiptables五种链接分别是prerouting、input 、output 、forward 、postrouting
- prerouting:流入的数据包进入路由表之前。
- input :通过路由表判断后目的地址是本机,然后进入本机内部资源。
- output :由本机产生的数据向外转发
- forward :通过路由表判断目的地址是本机,然后通过路由转发到其他地方。
- postrouting:传出的数据包到达网卡出口前。
iptables的四张表
现在用的比较多的表是前两个:
- 表(功能):
filter:过滤,防火墙;
nat:network address translation;用于修改源IP或目标IP,也可以改端口;
mangle:拆解报文,做出修改,并重新封装起来;
raw:关闭nat表上启用的连接追踪机制;
- 表(功能)和链对应关系:
raw:PREROUTING, OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
- 处理优先级:raw-->mangle-->nat-->filter
- 报文流向:
处理流程.png流入本机:PREROUTING --> INPUT
由本机流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
三、iptables规则
1、添加规则时的考量点:
(1) 要实现哪种功能:判断添加到哪个表上;
(2) 报文流经的路径:判断添加到哪个链上;
2、链的规则
链上的规则次序,即为检查的次序;因此,隐含一定的应用法则:
(1) 同类规则(访问同一应用),匹配范围小的放上面;
(2) 不同类的规则(访问不同应用),匹配到报文频率较大的放在上面;
(3) 将那些可由一条规则描述的多个规则合并起来;
(4) 设置默认策略;
3、匹配规则:
组成部分:根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作作出处理;
匹配条件:
基本匹配条件:内建
扩展匹配条件:由扩展模块定义;
4、处理动作:
基本处理动作:内建
扩展处理动作:由扩展模块定义;
自定义处理机制:自定义链
四、iptables命令:
高度模块化,由诸多扩展模块实现其检查条件或处理动作的定义;
/usr/lib64/xtables/
适用IPv6报文:libip6t_
适用IPv4报文:libipt_, libxt_
规则格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
-t table:raw, mangle, nat, [filter]#表
rule-specification = [matches...] [target] #规则格式,matches匹配条件,target处理动作
match = -m matchname [per-match-options] #指明一个匹配模块 定义它的选项和值
target = -j targetname [per-target-options]#指明一个处理动作的扩展 并定义它的选项
- 查询filter表有三个链
[root@bogon ~]# iptables -t filter -L#查询filter表有三个链
Chain INPUT (policy ACCEPT) #指明那个表(默认法则+黑名单)
target prot opt source destination #(执行动作-端口-选择-原地址-目标地址)
ACCEPT all -- anywhere anywhere #(允许-所有端口-任意地址-任意地址)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
- 查询mangle表有五个链
[root@bogon ~]# iptables -t mangle -L#查询mangle表有五个链
Chain PREROUTING (policy ACCEPT)
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Chain POSTROUTING (policy ACCEPT)
- 查询nat表有四个链
[root@bogon ~]# iptables -t nat -L#查询nat表有四个链
Chain PREROUTING (policy ACCEPT)
Chain INPUT (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Chain POSTROUTING (policy ACCEPT)
- 查询raw表有两个链
[root@bogon ~]# iptables -t raw -L#查询raw表有两个链
Chain PREROUTING (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
五、链管理:
- 1、 -N:new, 自定义一条新的规则链;
[root@bogon ~]# iptables -N in_web_rules#只能调用內建链
- 2、 -X: delete,删除自定义的规则链;
[root@bogon ~]# iptables -X in_web_rules#注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
- 3、 -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受(內建)
DROP:丢弃(內建)
REJECT:拒绝(扩展)
[root@bogon ~]# iptables -P FORWARD DROP或ACCEPT#关闭或打开转发报文
[root@bogon ~]# iptables -vnL#查询状态
- 4、 -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
[root@bogon ~]# iptables -E in_web_rules in_web
六、规则管理:
- 1、-A:append,追加;
- 2、-I:insert, 插入,要指明位置,省略时表示第一条;
- 3、-D:delete,删除;
(1) 指明规则序号;
(2) 指明规则本身;
-
4、-R:replace,替换指定链上的指定规则;
-
5、-F:flush,清空指定的规则链;
[root@bogon ~]# iptables -F IN_public#清空指定的规则
- 6、-Z:zero,置零;
iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
[root@bogon ~]# iptables -Z INPUT_ZONES 1#把这个链第一条规则置零
- 7、查看:
-L:list, 列出指定鏈上的所有规则;
-n:numberic,以数字格式显示地址和端口号;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值;
--line-numbers:显示规则的序号;
[root@bogon ~]# iptables -L -n --line-numbers #显示当前表链并编号
[root@bogon ~]# iptables -L -n --line-numbers -v#显示详细信息
[root@bogon ~]# iptables -vnL INPUT#显示INPUT信息