五链
“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中。
四表
四表”是指 iptables 的功能,默认的 iptable s规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):
filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。
优先级
数据包经过一个”链”的时候,会将当前链的所有规则都匹配一遍,
但是匹配时总归要有顺序,我们应该一条一条的去匹配,
而且相同功能类型的规则会汇聚在一张”表”中,哪些”表”中的规则会放在”链”的最前面执行呢?这时候就需要有一个优先级的问题
优先级次序(由高而低):
raw –> mangle –> nat –> filter
规则
规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;
规则由匹配条件和处理动作组成。
匹配条件
匹配条件分为基本匹配条件与扩展匹配条件
基本匹配条件: 源地址 Source IP,目标地址 Destination IP 上述内容都可以作为基本匹配条件。
扩展匹配条件: 除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是 netfilter 中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。 源端口 Source Port, 目标端口 Destination Port 可以作为扩展匹配条件
处理动作
处理动作
处理动作在 iptables 中被称为 target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。 此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
DROP 和 REJECT 的区别:DROP 是直接把匹配到的报文丢弃,REJECT 除了把报文丢弃还会给该报文中的源 IP 发一个 ICMP 报文说明目的不可达(直接回复不可达,更强硬)。前者报文发送方只能等超时,而后者发送方因为收到了 ICMP 不可达所以马上就给出了提示。
iptables-save命令
iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:
保存在默认文件夹中(保存防火墙规则): [root@liangxu ~]# iptables-save > /etc/sysconfig/iptables
保存在其他位置(备份防火墙规则): [root@liangxu ~]# iptables-save > 文件名称
直接执行 iptables-save 命令:显示出当前启用的所有规则,按照 raw、mangle、nat、filter 表的顺序依次列出