防火墙系列(四)—–iptables防火墙规则
关于iptables
iptables是集成在linux下的包过滤防火墙,这个防火墙是免费的,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。iptables仅仅是linux下防火墙的管理工具,防火墙功能的具体实现是netfilter ,它是Linux内核中实现包过滤的内部结构。
通过之前的文章何为防火墙 我们可以知道防火墙最重要的点就是安全策略,也就是安全规则,下面将介绍iptables的各项安全规则。
iptables宏观构成
iptablles中规则的概念
防火墙的规则可以告诉防火墙哪些类型的通信量可以进出防火墙。所有防火墙都有一个规则文件,其中最重要就是配置文件。iptables根据这些规则处理数据包,配置防火墙的主要工作就是添加,修改,删除安全规则。
具体到iptables中:
匹配(match):符合预先设定好的条件,如源ip or 端口
丢弃(drop):当一个包到达时,直接丢弃,不做其它任何处理。
接受(accept):字面意思,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。(具体什么是链后面会涉及)
规则(rule):一个或多个匹配及其对应的目标
iptables的规则表和链
表(tables):为防火墙提供了特定的功能,在iptables中存在四个表filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换,包修改和数据跟踪处理.
链(chains):可以理解为规则的一些排序,换句话说,链中包含一个或者多个规则。当某个数据包到达防火墙时,将与选定的链的各个规则进行比对,之后再进行相应的操作。如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
如下图,规则1,2,3构成一条链
p.s.:
1、防火墙是层层过滤的,实际是按照配置规则的顺序从上到下进行过滤的。
2、如果匹配上规则,即明确表明是阻止还是通过,数据包就不在向下进行匹配新规则了。
3、如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4、防火墙默认规则是所有的规则执行完才会执行的。
Linux中的四表五链
(注意:表这块的内容简单理解,真正设置安全策略时基本用不到)
- filter表——作用:过滤数据包
- Nat表——作用:用于网络地址转换(IP、端口)
- Mangle表——作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- Raw表——作用:决定数据包是否被状态跟踪机制处理
- INPUT链——进来的数据包应用此规则链中的策略
- OUTPUT链——外出的数据包应用此规则链中的策略
- FORWARD链——转发数据包时应用此规则链中的策略
- PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
- POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
由于四表中我们常用的就只有filter和nat,这里放一张鸟哥版精简图:
关于图中流向的简单解释:
- 当一个数据包进入网卡时,它首先进入PREROUTING链,之后进行路由判断,判断下一步是进行转发还是进入本机。
- 当数据包经过路由判断进入本机后,进入filter表中的INPUT链,依据该链的规则决定是否可以访问本机的资源
- 本机的数据包想要发出,将经过OUTPUT链,最后到达POSTROUTING链实现封包传出
- 一开始路由判断是进行转发的数据包,将经过FORWARD链,到达POSTROUTING链实现封包传出
iptables规则设置
1.基本语法
1 | iptables (选项)(参数) |
2.选项
1 | -t<表>:指定要操纵的表 |
3.命令选项输入顺序
1 | iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 |
关于动作
1 | accept:接收数据包。 |
一些实例
查看已添加的iptables规则
1 | iptables -L -n -v |
删除已添加的iptables规则
1 | iptables -L -n --line-numbers //将所有的规则以序号标记显示 |
清除已有iptables规则1
2iptables -F
iptables -Z
开放指定端口
1 | iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT //允许本地还回网卡测试 |
屏蔽IP
1 | iptables -I INPUT -s 1.2.3.4 -j DROP //屏蔽单个IP的命令 |
根据上面的简单指令可以拼凑出能针对复杂攻击的过滤规则,未来几天我将针对不同攻击形式所对应的安全规则再写一篇博文.