Iptables原理

  sre

Iptables原理
现在防火墙主要分以下三种类型:包过滤、应用代理、状态检测
包过滤防火墙:现在静态包过滤防火墙市面上已经看不到了,取而代之的是动态包过滤技术
的防火墙
代理防火墙:因一些特殊的报文攻击可以轻松突破包过滤防火墙的保护,比如大家知道的
SYN 攻击、ICMP 洪水攻击,所以以代理服务器作为专门为用户保密或者突破访问限制的数
据转发通道的应用代理防火墙出现了哈~其使用了一种应用协议分析的新技术。
状态检测防火墙:其基于动态包过滤技术发展而来,加入了一种状态检测的模块,进一点发
展了会话过滤功能,会话状态的保留是有时间限制的,此防火墙还可以对包的内容进行分析,
从而避免开放过多的端口。
netfilter/iptables IP 数据包过滤系统实际上由netfilter 和iptables 两个组件构成。netfilter 是集
成在内核中的一部分,其作用是定义、保存相应的规则,而iptables 是一种工具,用来修改
信息的过滤规则及其他配置,我们可以通过iptables 来设置一些适合我们企业需求环境的规
则,而这些规则会保存在内核空间之中。
netfilter 是Linux 核心中的一个通用架构,其提供了一系列的表(tables),每个表由若干个链
(chains)组成,而每条链可以由一条或若干条规则(rules)组成。实际上netfilter 是表的
容器,表是链的容器,而链又是规则的容器。

filter:主要跟 Linux 本机有关,这个是预设的 table !
INPUT:主要与封包想要进入我们Linux 本机有关,过路由表后目的地为本机
OUTPUT:主要与我们Linux 本机所要送出的封包有关;
FORWARD:这个咚咚与Linux 本机比较没有关系,他可以封包『转递』到后端的计算
机中,与nat 这个table 相关性很高。
nat:这个表格主要在用作来源与目的之 IP 或 port 的转换, 与 Linux 本机较无关,主
要与 Linux 主机后的局域网络内的计算机较有相关。
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT),就是数据包进
入路由表之前
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE),发送到
出口网卡接口之前
OUTPUT:与发送出去的封包有关,:由本机产生,向外转发

mangle:这个表格主要是与特殊的封包的路由旗标有关
早期仅有PREROUTING 及OUTPUT 链,不过从kernel 2.4.18 之后加入了INPUT 及
FORWARD 链。由于这个表格与特殊旗标相关性较高,所以单纯的环境当中,
较少使用mangle 这个表格。

SNAT, DNAT 的封包传送解析
SNAT 主要是应付内部LAN 连接到Internet 的使用方式,至于DNAT 则主要用在内部主机
想要架设可以让Internet 存取的服务器,实际上就是发布内网的服务器到公网上。

如图,1. 客户端所发出的封包表头中,来源会是 192.168.1.100 ,然后传送到 NAT 这部主机;
2. NAT 这部主机的内部接口 (192.168.1.2) 接收到这个封包后,会主动分析表头资料,因
为表头
数据显示目的并非 Linux 本机,所以开始经过路由, 将此封包转到可以连接到 Internet

Public IP 处;
3. 由于 private IP 与 public IP 不能互通,所以 Linux 主机透过 iptables 的 NAT table
内的
Postrouting 链将封包表头的来源伪装成为 Linux 的 Public IP ,并且将两个不同来源
(192.168.1.100 及 public IP) 的封包对应写入暂存内存当中, 然后将此封包传送出去了。
4. 在 Internet 上面的主机接到这个封包时,会将响应数据传送给那个 Public IP 的主机;
5. 当 Linux NAT 主机收到来自 Internet 的响应封包后,会分析该封包的序号,并比对
刚刚记录到
内存当中的数据,由于发现该封包为后端主机之前传送出去的,因此在 NAT Prerouting 链
中,
会将目标 IP 修改成为后端主机,亦即那部 192.168.1.100,然后发现目标已经不是本机
(public
IP), 所以开始透过路由分析封包流向;
6. 封包会传送到 192.168.1.2 这个内部接口,然后再传送到最终目标 192.168.1.100 机器
上去!

DNAT
假设我的内部主机192.168.1.210 启动了WWW 服务,这个服务的port 开启在port
80 , 那么Internet 上面的主机(61.xx.xx.xx) 要如何连接到我的内部服务器呢?当然
啦, 还是得要透过Linux NAT 主机!所以这部Internet 上面的机器必须要连接到我们的
NAT 的public IP 才行。
1.外部主机想要连接到目的端的WWW 服务,则必须要连接到我们的NAT 主机上头;
2.我们的NAT 主机已经设定好要分析出port 80 的封包,所以当NAT 主机接到这个封包
后, 会将目标IP 由public IP 改成192.168.1.210 ,且将该封包相关信息记录下来,
等待内部服务器的响应;
3.上述的封包在经过路由后,来到private 接口处,然后透过内部的LAN 传送到
192.168.1.210 上头!
4. 192.186.1.210 会响应数据给61.xx.xx.xx ,这个回应当然会传送到192.168.1.2 上
头去;
5. 经过路由判断后,来到NAT Postrouting 的链,然后透过刚刚第二步骤的记录,将来
源IP 由192.168.1.210 改为public IP 后,就可以传送出去了!

LEAVE A COMMENT

Captcha Code