Netfilter组件

运行在内核空间,集成在linux内核中,扩展各种网络服务的结构化底层框架。

在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放。

而我们常说iptables(Centos 6)和firewalld(Centos 7)只是配置Netfilter的前端工具。


iptables由四个表和五个链以及一些规则组成


四个表

(tables)

(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

iptables (一)_第1张图片

五个内置链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 (一)_第2张图片

1、iptables主要工作在OSI七层的2.3.4层。

2、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。所有顺序 很重要。

3、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。

4、如果所有规则中没有匹配规则,则向下进行匹配,直到匹配默认规则。一般最后的默认规则是拒绝所有。

5、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。

6、生产中根据具体情况启用服务。大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,大并发的情况下,使用硬件防火墙。

7、规则要添加在链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才有)