Netfilter组件前端
运行在内核空间,集成在linux内核中,扩展各类网络服务的结构化底层框架。linux
在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放。安全
而咱们常说iptables(Centos 6)和firewalld(Centos 7)只是配置Netfilter的前端工具。网络
iptables由四个表和五个链以及一些规则组成并发
四个表框架
表tcp (tables)ide |
链工具 (chains)性能 |
filter |
这是默认表,过滤规则表,根据预约义的规则过滤符合条件的数据包 应用场景:主机防火墙 |
INPUT |
过滤全部目标是本机地址的数据包 |
FORWARD |
转发流经本机的数据包。起到转发的做用 |
OUTPUT |
处理全部源地址是本机地址的数据包,就是处理从主机发出的数据包 |
nat |
负责网络地址转换 应用场景:局域网共享上网 |
FREROUTING |
在数据包到达防火墙时,进行路由判断以前执行的规则, 做用是改变数据包的目的地址、目的端口等 |
OUTPUT |
与主机流出去的数据包有关,改变主机发出数据包的目的地址 |
POSTROUTING |
在数据包离开防火墙时进行路由判断以后执行的规则, 做用改变数据包的源地址,源端口等。 |
mangle |
这个表专门用于改变数据包的结构(通常改变数据包首部格式) 修改数据标记位规则表 |
INPUT |
进入到设备自己的包 |
FORWARD |
对路由后的数据包信息进行修改 |
FREROUTING |
在路由以前更改传入的包 |
OUTPUT |
本地建立的数据包在路由以前改变 |
POSTROUTING |
在数据包即将离开时更改数据包信息 |
raw |
关闭NAT表上启用的链接跟踪机制,加快封包穿越防火墙速度 |
PREROUTING |
for packets arriving via any network interface |
OUTPUT |
for packets generated by local processes |


五个内置链chain
Centos 6
表(tables) |
链(chains) |
INPUT |
FORWARD |
OUTPUT |
PREROUTING |
POSTROUTING |
filter |
O |
O |
O |
× |
× |
nat |
× |
× |
O |
O |
O |
mangle |
O |
O |
O |
O |
O |
raw |
× |
× |
O |
O |
× |
说明:O 表示有,× 表示无。 |
Centos 7
表(tables) |
链(chains) |
INPUT |
FORWARD |
OUTPUT |
PREROUTING |
POSTROUTING |
filter |
O |
O |
O |
× |
× |
nat |
O |
× |
O |
O |
O |
manale |
O |
O |
O |
O |
O |
raw |
× |
× |
O |
O |
× |
说明:O 表示有,× 表示无。 |
iptables工做流程
内核中数据包的传输过程
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否须要转发出去
若是数据包就是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序能够发送数据包,这些数据包通过OUTPUT链,而后到达POSTROUTING链输出
若是数据包是要转发出去的,且内核容许转发(net.ipv4.ip_forward=1),数据包就会向右移动,通过FORWARD链,而后到达POSTROUTING链输出


一、iptables主要工做在OSI七层的2.3.4层。
二、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。全部顺序 很重要。
三、若是匹配上了规则,即明确代表是阻止仍是经过,此时数据包就不在向下匹配新规则了。
四、若是全部规则中没有匹配规则,则向下进行匹配,直到匹配默认规则。通常最后的默认规则是拒绝全部。
五、防火墙的默认规则是对应链的全部的规则执行完之后才会执行的(最后执行的规则)。
六、生产中根据具体状况启用服务。大并发的状况不能开iptables,影响性能,iptables是要消耗CPU的,大并发的状况下,使用硬件防火墙。
七、规则要添加在链chain上,才生效;添加在自定义上不会自动生效。只有Hook钩子调用自定义链时才生效。
iptables添加要点
iptables规则添加时考量点
要实现哪一种功能:判断添加在哪张表上
报文流经的路径:判断添加在哪一个链上
报文的流向:判断源和目的地址
匹配规则:根据业务须要
规则优化
任何不容许的访问,应该在请求到达时给予拒绝
规则在连接上的次序即为其检查时的生效次序
1 安全放行全部入站和出站的状态为ESTABLISHED状态链接
2 谨慎放行入站的新请求
3 有特殊目的限制访问功能,要在放行规则以前加以拒绝
4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
5 不一样类的规则(访问不一样应用),匹配范围大的放在前面
6 应该将那些可由一条规则可以描述的多个规则合并为一条
7 设置默认策略,建议白名单(只放行特定链接)
1) iptables -P 设置默认策略为拒绝,不建议。由于iptables -F 连本身都没法远程了。悲剧。
2) 建议在规则的最后定义规则作为默认策略
在Centos7上,iptables和firewalld只能2选一
iptables工具
iptables v1.4.7 (Centos 6)
iptables v1.4.21 (Centos 7)
参数 |
参数说明 |
保存配置 |
方法一:/etc/init.d/iptables save 或 service iptables save 方法二:iptables-save > /etc/sysconfig/iptables |
载入配置文件 |
方法一:iptables-restore < /etc/sysconfig/iptables 方法二:service iptables reload 或 service iptables restart -n:不清除原有规则 |
显示相关参数 |
-n |
以数字的方式显示地址或端口信息 |
-L |
列出一个链或全部链中的规则信息 |
-S |
以iptables-save 命令格式显示链上规则 |
--line-number |
显示规则的序号 |
-v 或 -vv |
显示详细信息 |
-x |
显示计数器结果的精确值,而非单位转换后的易读值 |
链管理相关参数 |
iptables -X |
删除自定义的空的规则链 |
iptables -Z |
链的计数器清零(数据包计数器与数据包字节计数器) |
iptables -N |
建立新的用户定义链 |
iptables -P |
设置默认策略;对filter表中的链而言,其默认策略有: ACCEPT:接受 DROP:丢弃 |
iptables -E |
重命名自定义链;引用计数不为0的自定义链不可以被重命名,也不能被删除 |
规则管理经常使用参数(在前面加感叹号,表示是取反) |
-t 表名称 |
指定配置哪一个表(4表),指定配置表名称。 |
-A 链名称 |
追加到指定链(链名称必须大写),默认将配置的规则插入到当前规则最后一条。 |
-I 链名称 |
插入相应规则策略,到指定链上,默认将配置的规则插入到第一条 (能够根据规则序号插入到指定位置) |
-D 链名称 |
删除指定的规则(能够根据如下方法删除 (1) 指明规则序号 (2) 指明规则自己) |
-R 链名称 规则编号 |
替换指定链上的指定规则编号 例:iptables -R INPUT 2 |
-C |
检查规则是否存在 |
-F |
清除全部规则,不会处理默认的规则 |
-Z |
置零计数器 iptables的每条规则都有两个计数器 (1) 匹配到的报文的个数 (2) 匹配到的全部报文的大小之和 |
[!] -p 协议名称 |
指定规则的协议名称,可使用协议表明的数字表示 常见值为all ,tcp, udp, icmp, 参看:/etc/protocols |
-j 动做 |
匹配数据包后的动做 |
ACCEPT |
容许 |
DROP |
丢弃(没有响应)推荐使用 |
REJECT |
拒绝(回应请求者明确的拒绝) |
MASQUERADE |
假装上网时使用 |
SNAT |
共享地址上网 |
DNAT |
目的地址改写 |
RETURN |
返回调用链,继续判断其余规则 |
REDIRECT |
端口重定向 |
MARK |
作防火墙标记 |
LOG |
记录日志,dmesg |
[!] -i |
报文流入的接口;只能应用于数据报文流入环节, 只应用于INPUT、FORWARD、PREROUTING链 |
[!] -o |
报文流出的接口;只能应用于数据报文流出的环节, 只应用于FORWARD、OUTPUT、POSTROUTING链 |
[!] -s |
指定源IP地址或源网段信息 address[/mask][,...] |
[!] -d |
指定目标IP地址或目标网段信息 address[/mask][,...] |
扩展参数 须要加载扩展模块(/usr/lib64/xtables/*.so),方可生效 查看帮助 man iptables-extensions |
隐式扩展 在使用 -p 选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制, 不须要手动加载扩展模块 |
TCP/UDP协议的扩展选项 |
--dport |
匹配报文目标端口,可为端口范围 |
--sport |
匹配报文源端口,可为端口范围 |
显式扩展 必须使用-m选项指明要调用的扩展模块的扩展机制 要手动加载扩展模块 |
-m 模块 |
表示加载扩展功能的参数(能够加载扩展参数) |
multiport |
以离散方式定义多端口匹配, 最多指定15个端口 |
iprange |
指明连续的ip地址范围 (但通常不是整个网络) |
icmp |
使用icmp的扩展 |
mac |
指明源MAC地址 |
time |
根据将报文到达的时间与指定的时间范围 进行匹配 |
string |
对报文中的应用层数据作字符串模式匹配检测 |
connlimit |
根据每客户端IP作并发链接数数量匹配 可防止CC(Challenge Collapsar挑战黑洞)*** |
limit |
基于收发报文的速率作匹配 |
state |
根据”链接追踪机制“去检查链接的状态, 较耗资源 |
示例请看iptables (二)
更多说明:
man 8 iptables iptables-extensions(8) (Centos 7才有)