为何要明确是linux下的网络防火墙,防火墙按照工作在不同TCP/IP层又可以分为网络层防火墙和应用层网关防火墙[应用层网关防火墙是传统的代理型防火墙],所谓防火墙指的是一个由软件和硬件设备组合而成。我们平时常用iptables,其实他是由两个组件写作完成的。组件为netfilter/iptables。我们经常用的就是用户空间iptables用来增删修,而里边的表链则是netfilter。
组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
netfilter由4表5链组成。
4张表(带优先级)分别为:raw->mangle[包重构]-> nat[地址转换]-> filter[过滤]。
(1)RAW表
只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在 某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
(2)filter表
主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改
(3)nat表
主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包)
(4)mangle表
主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)
3、规则表之间的优先顺序:
Raw——mangle——nat——filter
5条链即为5个hook function(钩子函数),可以理解为数据包传送到该计算机时的5个检查点。分别为:
iptables的原理主要是对数据包的控制
PREROUTING:路由前
INPUT:到达本机内部的报文必经之路
FORWARD:由本机转发的报文必经之路
OUTPUT:由本机发出的报文的必经之路
POSTROUTING:路由后
iptables表和链之间的对应关系。
filter: INPUT, FORWARD, OUTPUT
nat: PREROUTING(DNAT),POSTROUTING(SNAT),OUTPUT
mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw: PREROUTING, OUTPUT
组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
1、iptables命令格式
iptables的命令格式较为复杂,一般的格式如下:
iptables [-t 表] -命令 匹配 操作
说明
(1) -t 表
表选项用于指定命令应用于哪个iptables内置表。
(2)命令
命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,如下表所示
命令 说明
-P --policy <链名> 定义默认策略 -L --list <链名> 查看iptables规则列表 -A --append <链名> 在规则列表的最后增加1条规则 -I --insert <链名> 在指定的位置插入1条规则 -D --delete <链名> 从规则列表中删除1条规则 -R --replace <链名> 替换规则列表中的某条规则 -F --flush <链名> 删除表中所有规则 -Z --zero <链名> 将表中数据包计数器和流量计数器归零 -X --delete-chain <链名> 删除自定义链 -v --verbose <链名> 与-L他命令一起使用显示更多更详细的信息
(3) 匹配规则
匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
匹配 说明
-i --in-interface 网络接口名> 指定数据包从哪个网络接口进入, -o --out-interface 网络接口名> 指定数据包从哪个网络接口输出 -p ---proto 协议类型 指定数据包匹配的协议,如TCP、UDP和ICMP等 -s --source 源地址或子网> 指定数据包匹配的源地址 --sport 源端口号> 指定数据包匹配的源端口号 --dport 目的端口号> 指定数据包匹配的目的端口号 -m --match 匹配的模块 指定数据包规则所使用的过滤模块
具体的命令请参考先关文章,转载请注明出处 快盘下载