iptables/netfilter详解
一、前言
1.防火墙(Firewall)是隔离工具;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测,
对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件。
2.防火墙分类:
硬件防火墙:在硬件级别能部分防火墙,另一部分功能基于软件实现;
软件防火墙:应用软件处理逻辑运行通用硬件实现的防火墙;
主机防火墙:服务范围为当前主机;
网络防火墙:服务范围为局域网;
3.iptables/netfilter 包过滤型防火墙:
软件实现的主机或网络防火墙
二、iptables 的历史以及工作原理
1.1 iptables的发展: ip fw --> ip chains --> ip tables
iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。
但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。
当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。
而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter(网络过滤器)
1.2 内核空间中选择了5个位置:
1.内核空间中:从一个网络接口进来,到另一个网络接口去的
2.数据包从内核流入用户空间的
3.数据包从用户空间流出的
4.进入/离开本机的外网接口
5.进入/离开本机的内网接口
2. iptables的工作机制
2.1 iptables/netfilter软件:
是实现主机或网络包过滤防火墙,其中iptables是位于用户空间的命令行程序,用于生成规则送往内核中的netfilter之上。
netfilter位于内核中tcp/ip协议栈上的一个防火墙框架framework;5个钩子函数。
2.2 netfilter:(hook function --> 钩子函数)
1.prerouting (路由前)
2.input (数据包流入口)
3.forward (转发关卡)
4.output (数据包出口)
5.postrouting (路由后)
2.3 iptables:(chain--> 链) 5
1.PREROUTING (路由前)
2.INPUT (数据包入口)
3.FORWARD (数据包转发)
4.OUTPUT (数据包出口)
5.POSTROUTING (路由后)
3.iptables防火墙策略
3.1 tables:功能--> 表 4
1.filter:过滤,防火墙。
2.nat:network address translation(网络地址转发),用于修改报文的源地址或目标地址,甚至是端口。
3.mangle:拆解报文,做出修改,并重新封装起来。
4.raw:关闭nat表上启用的连接追踪机制。
优先级次序(由高而低):
4.raw --> 3.mangle --> 2.nat --> 1.filter
3.2 功能<-->钩子<==>表<-->链 对应关系:
4.raw:PREROUTING-->路由后,OUTPUT-->流出
3.mangle:PREROUTING-->路由前,INPUT-->数据包入口,FORWARD-->转发,OUTPUT-->出口,POSTROUTING-->路由后
2.nat:PREROUTING-->路由前,INPUT--数据包入口,OUTPUT-->出口,POSTRUTING-->路由后
1.filter:INPUT-->数据包入口,FORWARD-->转发,OUTPUT--出口
3.3 报文流向:
1.到本机某进程的报文:PREROUTING --> INPUT
2.由本转发的报文:PREROUTING --> FORWARD --> POSTROUTING
3.由本机某进程发出的:OUTPUT --> POSTROUTING
3.4 规则的组成的部分:
1.匹配条件
2.网络层首部属性值 IP 首部数据包
3.传输层首部属性值 TCP 首部数据包
4.附加的条件
5.处理动作
3.5 TCP/IP协议栈:
1.数据链接层:物理到物理设备之间的通信;(MAC,Media Access Control)
2.网络层:源主机到目标主机之间的通信 IP
3.传输层:进程到进程之间的通信 TCP UDP
注意:
1.CentOS 5/6:iptables命令编写规则;
2.CentOS 7:firewalld; 使用需要关闭firewalld:systemctl disable firewalld.service
3.规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的.
4. iptables规则写法
4.1 规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,就由规则后面指明的处理动作进行处理;
匹配条件:
基本匹配条件:简单检查IP、TCP、UDP等报文的某属性进行匹配的机制;
扩展匹配条件:需要借助于扩展模块进行的匹配条件指定即为扩展匹配;
处理动作:
基本动作:ACCEPT,DROP, ...
扩展动作:需要借助扩展模块进行的动作;
4.2 添加规则之时需要考量的问题:
1.报文的流经路径,判断添加规则至哪个链上。
2.确定要实现的功能,判断添加规则至哪个表上。
3.要指定的匹配条件,以用于匹配目标报文。
三、iptables命令详解
3.1 iptables命令的使用格式:
iptables [-t table] {-A|-C|-D} chain rule-specification
ip6tables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification规则 = [matches...] [target]
match匹配 = -m matchname [per-match-options]
target目标 = -j targetname [per-target-options]
3.2 规则的编写格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
1) -t table:
默认为filter;其它可用的有raw, mangle, nat;
2) COMMAND:
chain链:
-P:policy ['p
转载于:https://blog.51cto.com/yang90/1829984