【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制

NAT是Network Address Translation的缩写,意即“网络地址转换”。

从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术。

当然在某种情况下。改动的不仅仅是IP首部的来源或目的地址。还包含其他要素。

随着接入Internet的计算机数量不断猛增。IP地址资源也就愈加显得捉襟见肘。这也是Ipv6出现的一大原因。

我们如今全部的IP地址是32位,意味着其代表的主机数量是有限的(2^32 ~= 42亿)。实际是不够用的(计算机、路由器、网络设备,PDA、无线网络电话等等都要占用IP地址)。

当初划分IP时。各保留一段私有IP区间。

私网IP(私有IP)是指这些IP仅仅能在企业内部使用,而无法应用在因特网上,简而言之,就是私有IP不能直接与Internet进行互相通信。

眼下NAT技术很多其他地被使用在将一个私网IP地址网段。转换为一个或几个公网IP地址,以实现私网与Internet的互相通讯。

Internet上的路由器如果看到这些私有IP的数据包,就会将其丢弃。

我们先来通过一个样例解释下这个问题:

在下图中,我们在192.168.0.0/24这个私有ip与10.0.1.0/24这个公有ip加了个路由器。如果10.0.1.200是公网ip。

首先。192.168.0.1的这台主机尝试訪问Internet上的1.2.3.4这台主机。因此。192.168.0.1主机会发送一个请求数据包给默认网关,这个数据包的源ip和目的ip如图中标记的1所看到的,来源ip是192.168.0.1,目的ip是1.2.3.4,因为是路由器的缘故,这个数据包的源ip和目的ip地址都不会发生改变,接着,路由器会转发这个数据包给1.2.3.4主机,当1.2.3.4主机收到请求数据包后,其源ip和目的ip如3所看到的。然后,1.2.3.4主机响应请求,回送一个数据包给192.168.0.1,可是该数据包中的目的ip是192.168.0.1。是一个私有ip。因此这个数据包不可能被回送给192.168.0.1,也就不能进行正常通信。

为了提高Internet上数据包的传输效率,Internet上的路由器通常不检查数据包中的“来源IP”,而仅仅会看目的端的IP,所以私有IP的主机能够发出请求,可是得不到回应。

这个问题的解决的方法就落到了我们今天要介绍的NAT机制上。仅仅要通过NAT的机制。就能够让成千上万台计算机同一时候通过一个公网IP来连接Internet。

以下我们大致介绍下NAT原理:

与上面路由器的差别在于,我们多个个NAT机制,NAT主机将这个数据包内的“来源IP”改成NAT主机上的公网IP(10.0.1.200)。如标记2所看到的,这样一来,该数据包的源ip和目的ip都变成了公有IP,同一时候。NAT主机会将这个数据包的信息记录起来。接下来。这个数据包发送到了1.2.3.4。该主机响应,发回响应数据报的时候。这个数据包的目的ip成了10.0.1.200这个公网ip。而不是192.168.0.1这个私有ip,这样该数据包就能够顺利的到达NAT主机,然后NAT主机依据之前记录下来的信息中找到当初NAT主机关于这个的转换记录,再转回来,该数据包的目的IP就成了真正的目的主机192.168.0.1这个私有ip。但此时已经不是在Internet上了,所以这个数据包是能够通过NAT主机回送给我们的私有IP主机的。

这样一来,通过NAT机制,就成功实现了私有IP通过NAT主机去訪问Internet上的资源。

除此之外,NAT机制应用在client,能够隐藏client的IP。由此达到保护client主机免于Internet的攻击行为。以及节省公用IP的使用量。应用在server端,则能够保护server端主机在Internet上的安全。

(须要知道,其实。单靠NAT机制并非万能的。)

对于NAT,有两个名字须要了解:那就是SNAT和DNAT,依据上面的分析以及这个名字,我们非常easy得知。SNAT就是变更Source IP的机制。DNAT就是变更 Destination IP的机制。

NAT种类繁多。有一对一、多对多、一对多和NATP等四种。

从以下这张图能够看出,NAT机制出如今PREROUTING、OUTPUT和POSTROUTING这三个chain中

以下以下图NAT的结构为例。介绍NAT的完整结构,并解释每一个链的用途。

1、 PREROUTING

该链的位置在整个NAT机制的最前面,该链的功能在于运行DNAT的任务。因此在运行DNAT时,差点儿是数据包一旦进入NAT机制,数据包内的 “Destination IP” 即被改动,而这个顺序问题在整个防火墙的设置上是非常重要的。

2、POSTROUTING

该链的任务是改动数据包内的“来源端IP”。也就是说。该链的功能用于运行SNAT的任务。该链位于整个NAT机制的最末端,因此当我们运行SNAT操作时,Source IP是在整个NAT机制的最末端才会被改动的。

3、OUTPUT

当本机进程生成数据包并向外发送时,这个数据包会先交给路由表来判决路由,接着数据包进入OUTPUT链,最后进入POSTROUTING链,然后离开本机。这个数据包是不可能经过PREROUTING链,前面说到PREROUTING链的功能是运行DNAT的任务。也就是改动目的端IP,所以由本机进程生成的数据包,须要通过OUTPUT链,而这个OUTPUT链的功能就是运行DNAT的任务

所以对于本机进程生成的数据包的DNAT规则是要放在OUTPUT链之内,而不是PREROUTING中。

关于NAT机制的分类。我们这里就不赘述了。后面我们将深入到Netfilter 源代码内部探索SNAT机制和DNAT机制。

參考资料:

《Linux网络安全技术与实现》

时间: 2024-10-22 16:34:57

【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制的相关文章

Netfilter/iptables防火墙

http://os.51cto.com/art/201107/273443.htm [51CTO独家特稿]Linux系统管理员们都接触过Netfilter/iptables,这是Linux系统自带的免费防火墙,功能十分强大.在接下来的这个<深入浅出Netfilter/iptables防火墙框架>系列中,51CTO安全/Linux专家李洋将对Netfilter/iptables进行详尽的.条理的介绍.本文是基础篇,先介绍Netfilter/iptables框架的原理. 1.Netfilter/i

Linux下使用iptables

关于iptables 什么是iptables? 常见于linux系统下的应用层防火墙工具. 使用iptables的人员 系统管理人员:基于iptables的NAT的包转发,linux主机安全策略 网络工程人员:局域网网络控制或对员工上网行为的控制,机房中用来替换昂贵的网络设备 安全人员:利用iptables内核或策略做安全设置 场景 模拟用iptables控制并发的http访问 机器分配: 机器类型 IP地址 主机名 server [IP2]10.10.163.233 Jeson233 clie

防火墙、Iptables、netfilter/iptables、NAT 概述

防火墙.Iptables.netfilter/iptables.NAT 概述 - 如果你真的想做一件事,你一定会找到方法: 如果你不想做一件事,你一定会找到借口. - ITeye技术网站 一.防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及 允许哪些外部请求可以访问内部服务.它可以根据网络传输的类型决定IP包是否可以传进或传出内部网 防火墙通过审查经过的每一个数据包,判断它是否有相匹配的

Linux 防火墙:Netfilter iptables

一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2) Netfilter 是 Linux CentOS 6 内置的防火墙机制,Firewall 是 Linux CentOS 7 内置的防火墙机制,如果想在 CentOS 7 中使用 netfilter 而不是 firewall,操作如下 [[email protected] ~]# systemct

Linux中级之netfilter/iptables应用及补充

一.iptables介绍 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制.特别是它可以在一台非常低的硬件配置服务器上跑的非常好,提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙. iptables + zebra + squid (企业常用网络开源产品). iptables是linux2.4及2.6内核中集成的

iptables与netfilter基础与示例

该怎么描述防火墙的实现呢?既然说不明白那就不说了,自己领悟吧! 一.防火墙是什么? 通过一些规则在网络数据报文必经的几个钩子上做端口的限制,实现数据过滤的功能. 二.数据报文传输的路径是怎样的? 1. 客户端发出数据报文---->到达服务器的网络接口-----(判断目标是服务器自己)将报文送入内核处理---->将处理好的数据报文转发出去---->通过网络接口发还给客户端 2.客户端发出数据报文---->到达服务器的网络接口-----(判断目标不是服务器)将数据转发出去---->

Centos 6.6上 netfilter/iptables防火墙的基本用法

友情提醒:本文实验环境 vmware 10 + Centos 6.6 X86_64,文件命令请谨慎使用 1 事前必知: 1)什么是防火墙? 防火墙:工作于主机或网络边缘,对于进出的报文根据事先定义的规则做检查,被匹配到的报文作出相应处理的组件. 所以: (1)防火墙不是杀毒软件. (2)既然是根据规则检查报文,存在2个问题:规则定义严格了,使用者觉着别扭:定义松散了形同虚设,还占用内核资源. 2)centos6.6上防火墙的组件: netfilter:过滤器,内核中工作在tcp/ip网络协议栈上

初窥netfilter/iptables

做这个东西太麻烦了,一不小心,就被自己关门外了. ---------------------------------------------- 一.前言 二.环境 三.语法解析 四.配置及测试 1.SNAT案例 2.DNAT案例 3.SSH案例 4.SSH深入案例(自定义规则) 5.web和ftp(自定义规则) 6.web和ftp(系统默认规则) 五.保存 ---------------------------------------------- 一.前言 iptables即Linux 内核集

Netfilter/Iptables入门

Netfilter/Iptables入门 Linux的内核是由www.kernel.org这个组织负责开发维护,下面我们要讨论的Netfilter/iptables是www.netfilter.org组织为Linux开发的防火墙软件.由于Linux是非常模块化的,很多功能都是以模块加载扩充系统功能,Netfilter同样采用这种方式存在于Linux中.如果你理解了Linux模块加载也就能够理解Netfilter的模块加载方式.大家在 /lib/modules/kernel_version/ker