linux防火墙iptables基础概念

Netfilter/Iptables(简称iptables)防火墙内部组成:过滤表+设置规则,过滤表默认集成在Linux内核中,而过滤表中包含各种设置的规则。其中Netfilter默认工作在内核空间,是Linux内核空间部分模块,其功能通过过滤表,对规则进行限制,而Iptables是Linux用户空间模块,其功能是方便用户去控制Linux内核中Netfilter模块的,添加、删除、配置策略规则。

Iptables防火墙默认有4张表(raw、mangle、nat、filter),5条链(每张表中包含不同的链,每条链上包含不同的规则,总共4张表:5条链):INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。(表中有链,链中有规则,规则中有具体的允许、限制条件)。

1、iptable的表与链功能

(1)、Iptables的规则链分为三种:输入、转发和输出。
输入(INPUT)——这条链用来过滤目的地址是本机的连接。例如,如果一个用户试图使用SSH登陆到你的PC/服务器,iptables会首先匹配其IP地址和端口到iptables的输入链(INPUT)规则。

(2)、转发(FORWARD)——这条链用来过滤目的地址和源地址都不是本机的连接。例如,路由器收到的绝大数数据均需要转发给其它主机。如果你的系统没有开启类似于路由器的功能,如NATing,你就不需要使用这条链。

(3)、输出(OUTPUT)——这条链用来过滤源地址是本机的连接。例如,当你尝试ping jfedu.net时,iptables会检查输出链中与ping和jfedu.net相关的规则,然后决定允许还是拒绝你的连接请求。

注意:当ping一台外部主机时,看上去好像只是输出链在起作用。但是请记住,外部主机返回的数据要经过输入链的过滤。当配置iptables规则时,请牢记许多协议都需要双向通信,所以你需要同时配置输入链和输出链。人们在配置SSH的时候通常会忘记在输入链和输出链都配置它。

2、iptables数据包流程

数据包先经过PREOUTING,由该链确定数据包走向:

  • 目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;
  • 若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥;
  • 主机发送数据包时,流程则是⑤--->⑥;
  • 其中PREROUTING和POSTROUTING指的是数据包的流向,如上图所示POSTROUTING指的是发往公网的数据包,而PREROUTING指的是来自公网的数据包。

3、iptables四张表&五条连

iptables具有Filter, NAT, Mangle, Raw四种内建表。

4、linux下的iptables下的filter表

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

  • INPUT链 – 处理来自外部的数据;
  • OUTPUT链 – 处理向外发送的数据;
  • FORWARD链 – 将数据转发到本机的其他网卡设备上。

5、linux下的iptables下的NAT表

NAT (网络地址转换) 技术在平时是很多见的,如家庭中在使用路由器共享上网时,一般用的就是 NAT 技术,它可以实现众多内网 IP 共享一个公网 IP (路由器外网出口IP)上网。

NAT 的原理,简单的说就是当内网主机访问外网时,当内网主机的数据包要通过路由器时,路由器将数据包中的源内网 IP 地址改为路由器上的公网 IP 地址,同时记录下该数据包的消息;

外网服务器响应这次由内而外发出的请求或数据交换时,当外网服务器发出的数据包经过路由器时,原本是路由器上的公网 IP 地址被路由器改为内网 IP 。

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。NAT表有三种内建链:

  • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT链 – 处理本机产生的数据包。

6、linux下iptables命令图解

发表评论

后才能评论