Netfilter是什么?
Netfilter是Linux的第三代防火墙,因其比之前的两种防火墙ipfwadm及ipchains出色而被Linux组织作为默认的防火墙。Netfilter是自由软件,但在各方面均不逊于商业版的防火墙。
Netfilter与Linux的关系
Netfilter与Linux是两个相互独立的组织,在Linux 2.4早期的版本,并没有包含Netfilter的功能,到后期的版本,才收录了Netfilter的功能。
Netfilter工作的位置
Netfilter以模块的形式存在于linux中,当网卡有数据包传入传出时,出入的数据包都会经由Netfilter穿过。所以Netfilter作为防火墙,能够起到数据包拦截的作用
Netfilter的命令结构
Netfilter要针对数据包进行过滤,就必须要人为制定一些规则,这些规则指示什么样的数据包可以放行,什么样的数据包是危险的,应该丢弃掉,这些规则越来越多之后,就会对其进行分类存储在内存块中,内存就被分为四个表(Table),分别是filter、nat、mangle及raw表,这也是目前Netfilter机制所提供的四大功能。
表
链
描述
filter
INPUT
FORWARD
OUTPUT
filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用
nat
PREROUTING
POSTROUTING
OUTPUT
nat(Network Address Translation, NAT)也是防火墙上一个不可或缺的重要机制,比较通俗的方式来说,其功能就是IP分享器
mangle
PREROUTING
INPUT
FORWARD
POSTROUTING
通过mangle机制来修改经过防火墙内数据包的内容
raw
PREROUTING
OUTPUT
负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能
netfilter的filter机制
filter对数据包的分类如下:
INPUT类型:网络上其他主机发送给本机进程的数据包就是INPUT类型的数据包
OUTPUT类型:本机进程所生成的数据包即为OUTPUT类型数据包
FORWARD类型:数据包对本机而言只是路过而已,那么这就属于FORWARD类型
filter表结构图如下
filter机制的结构图如下:
规则的匹配方式
每条链上都有N条被制定的规则,这些规则该如何匹配呢?first match即优先匹配采用的方式为从INPUT链中的rule-1逐一向下匹配,如果rule-1指明要丢弃数据包,则数据包马上被丢弃,不再执行后面的规则,相反,如果rule-1指明允许数据包进来,则数据包立即进入到本机程序的位置,当前,不管后面的规则内容是什么也都不再重要,这就是优先匹配
不过万一该数据包的特征从INPUT链的rule-1匹配到rule-6均没有匹配成功,该数据包是丢弃还是放行?这就涉及到默认策略(Default Policy)的问题了,请注意,不管链中有多少条规则,默认策略永远在每个链的最底端,而且每个链的默认策略各自独立。linux的默认策略的默认状态是ACCEPT
Netfilter与iptables的关系
Netfilter所需要的规则是存放在内存中的,但是我们如何对这些规则进行添加、删除、修改及查询等操作呢,这个时候必须要有一个针对规则的编辑工具提供给网络管理人员,这个工具就是iptables
iptables工具使用方法
iptables命令可以划分为两个部分,一个是“iptables命令参数”,另一个则是“规则语法”
iptables命令参数
iptables的命令结构
iptables -t TABLE -操作方式 规则条件
语法
说明
-t TABLE
内置filter、nat、mangle及raw四个表,即Netfilter的四大功能。-t参数的含义是选择我们要操作的功能,如果没有输入,默认则是filter表
-操作方式
当我们选择好所要使用的表之后,接下来要决定如何操作这个表,在iptables工具中有很多不同的操作方式,在此仅列出必须了解的操作方式,如下:
-L: 将所选择的表内容列出
-A: 在指定的链中添加新规则
-F: 将所选择的表内容清除掉
-P: 设置某个链的默认策略
规则条件
实例规则:
-p tcp -j ACCEPT
-p udp -j ACCEPT
-p icmp -j ACCEPT
iptables规则语法
接口的匹配参数
上层协议(upper layer protocol)的匹配参数
匹配来源/目的的IP地址
匹配来源/目的的端口
处理方式
Netfilter的NAT机制
NAT的结构
PREROUTING
NAT有很多不同的种类,但不管是哪一种NAT,都是由SNAT及DNAT搭配组合而成的,因此,当我们下发“规则”要去修改数据包的Destinaion IP时,请将规则放入PREROUTING链中
POSTROUTING
POSTROUTING链的任务是修改数据包内的Source IP
OUTPUT
对本机进程产生并要外送的这些数据包进行DNAT操作
总结
数据入口只能修改目的IP,数据出口只能修改源IP,本机程序往外吐包时,只能在OUTPUT链修改目的IP
NAT的分类
一对多NAT
语法实例
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
多对多NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200-10.0.1.205
一对一NAT
iptables -t nat -A PREROUTING -i eth0 -d 10.0.1.201 -j DNAT --to 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1 -j SNAT --to 10.0.1.201
NAPT
iptables -t nat -A PREROUTING -i eth0 -p tcp ---dport 80 -j DNAT --to 192.168.0.1:80
iptables -t nat -A PREROUTING -i eth0 -p tcp ---dport 443 -j DNAT --to 192.168.0.1:443
未完待续
参考文献:
《Linux安全技术与实现第2版》—陈勇勋著
本帖子中包含资源
您需要 登录 才可以下载,没有帐号?立即注册