iptables简介(三)
  Qn0V923SdTA7 2023年11月02日 42 0

先简单说一下nat的原理,nat算是防火墙中的一种,它可以保护内网,使它不受来自外网的渗通。

防火墙上的网络地址转换有3类

✧ SNAT 源地址转换

✧ DNAT 目的地址转换

✧ 端口映射

1、SNAT

源地址转换,让本地网络中的主机通过某一特定地址访问外部网络,具体实现一般都在POSTROUTING链上,因为如果数据包是发给本机的。如果在PREROUTING链上做,不就是相当于浪费功夫吗,因为最后也是要发给自己,结果在发给自己之前还做了一层转换,所以有点浪费资源了。综合来说在POSTROUTING上做最合适。

iptables简介(三)_ipad

常用的几个选项

--to-source [ipaddr[-ipaddr]][:port[-port]]  #用这个指定要转换成的IP,可以是多个IP地址
--random                                     #如果上面是多个地址,这个选项可以用来表示随机选一个地址

MASQUERADE 如果要转换成的IP地址是动态变化的(比如通过的dhcp自动获取的IP或者是adsl拨号上网得到的IP都不固定),这里可以使用这个选项。具体

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE


2、DNAT

DNAT 的全称为Destination Network Address Translation目的地址转换,原理和SNAT类似,只是DNAT修改的是目的地址。而SNAT修改的是源地址。 

还有就是DNAT一般在PREROUTING链上修改。为什么呢。我们可以这样想。如果本地主机正好也开启了一个和服务端提供服务相同的端口,这时候,我们再去访问网关,网关将会将请求送到自己的用户空间,这样后端的服务器就没有收到请求。而客户端得到的也不是他想要的东西。所以综合考虑在PREROUTING会比较好。这个刚好与SNAT相反。

iptables简介(三)_ipad_02

常用的几个选项

--to-destination [ipaddr[-ipaddr]][:port[-port]] ##将要进行变换的DST地址。可以是多个
--random ##如果上面的地址有多个,则随机选一个指定。

实践操作:

我们有一个存放数据的网页,地址为172.16.170.50,我们想让WindowsXP来访问它,但是我们出于保密的需要,不想让它知道我们的真实IP,那么我们就找一个内网段的IP,比如192.168.2.1,让它去访问这个IP,我们在linux中设置nat,帮它转为去访问172.16.170.50。

也就是说我们把要访问的目标地址172.16.170.50,冒充成192.168.2.1,它访问这个冒充的地址就可以了,不用知道真正的地址。

刚才的那些转发路由条目已经设置好了 ,我们只需要清空网关的规则,重新写一条规则就可以了

iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j DNAT --to-destination 172.16.170.50

然后我们测试一下,在客户端访问网关192.168.2.1 

可以看出是成功了

3、端口映射

端口映射,顾名思义,就是修改端口。 

实现比较简单直接简单说一下。实验内容:我们访问网关192.168.2.1的8080端口。然后转发到后端172.16.171.60的80端口。 

网关:我们先清空网关的nat表

iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 8080 -j DNAT --to-destination 172.16.171.60:80

然后我们测试一下,在客户端访问网关192.168.2.1:8080

这个端口映射实际上不算是一种新的东西,它只是在nat转换时加入了端口的参数

iptables -nL                                #查看规则

iptables -nL -t nat                         #专门查看nat表

iptables -nL -v --line-numbers -t filter    # 表filter带行号带流量数据
iptables -nL --line-numbers                 # 带行号

## 删除指定表指定链的指定行数据
iptables -t nat -D POSTROUTING 1 
iptables -D FORWARD 7 -t filter

## 清空所有规则【默认是filter表】 
iptables -F 
iptables -X 
iptables -Z 
iptables -t nat -F                           #清空nat表所有规则
iptables -t nat -X                          #删除nat表中所有自定义的空链
iptables -t nat -Z

前面的设置允许转发在重启机器后会失效,如果要永久有效,可以运行下面的程序脚本

grep "net.ipv4.ip_forward"   /etc/sysctl.conf
if  [ $? -eq 0 ] ; then
	sed -i -r -e  "s|.*net.ipv4.ip_forward.*|net.ipv4.ip_forward=1|g" /etc/sysctl.conf
else
	echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
fi
sysctl -p


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ETWZF7L1nsXD   2023年11月02日   31   0   0 主机名linuxipad
Qn0V923SdTA7