#yyds干货盘点# web安全day35:Linux防火墙进阶

网友投稿 239 2022-10-04


#yyds干货盘点# web安全day35:Linux防火墙进阶

前面一篇文章,我们主要学习了iptables中filter表的基本内容,今天这一篇文,主要会讲nat表的内容。

nat表用于网络地址转换。网络地址转换的目的是为了使用一个或者少量的ip地址去解决多个或者大量的内部设备访问外部网络的问题。

我们延用上一篇文里面的网络拓扑结构来理解。redhat1作为linux的网关服务器,而redhat2作为web服务器,注意不要给他设置网关。windowsxp作为内部网络的一台pc,需求是访问redhat2的web服务。

我们的设想是:

windowsxp去访问redhat2的web服务,它封装的请求包是

srcip 192.168.1.1 dstip 192.168.189.1 protocol tcp dstport 80

这个包可以经过Redhat1的转发到达redhat2,redhat2收到后会进行回应,回应包的封装是

srcip 192.168.189.1dstip 192.168.1.1protocol tcpdstport 80

但是这个回应包需要发给谁呢?在有网关的情况下,如果目的ip地址和源ip地址不在同一网段,就会发送给网关,但是我们并没有设置网关,因此就会丢弃掉这个数据包。

如何解决这个问题呢?

需求一:内网设备访问外网服务

使用SNAT选项

在redhat1上做nat,改变windowsxp发送给redhat2的数据包的源ip地址,这样当包发送给redhat2的时候,redhat2认为是redhat1发给自己的,它们处于同一网段,就会将回应包发送给redhat1,而Redhat1再将其改变目的ip地址后发送给windowsxp。

具体的实现方式还是在redhat1上对iptables进行操作,只不过这一次我们是对nat表进行操作。

查看nat表内容

nat表有3个链,分别是PREROUTING、POSTROUTING、OUTPUT

PREROUTING表示路由前规则

POSTROUTING表示路由后规则

OUTPUT表示输出规则

[root@bogon ~]# iptables -t nat -nvLChain PREROUTING (policy ACCEPT 691 packets, 69738 bytes) pkts bytes target prot opt in out source destination 691 69738 PREROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0 691 69738 PREROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 691 69738 PREROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 Chain POSTROUTING (policy ACCEPT 171 packets, 12832 bytes) pkts bytes target prot opt in out source destination 171 12832 POSTROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0 171 12832 POSTROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0 171 12832 POSTROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 167 packets, 12640 bytes) pkts bytes target prot opt in out source destination 167 12640 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0

如果需要做网络地址转换,要在POSTROUTING链中进行配置。

iptables -t nat -A POSTROUTING -p tcp -o ens33 -s 192.168.1.0/24 -j SNAT --to-source 192.168.189.101

当我们再次在windowsxp上访问redhat2的web服务的时候,是可以访问成功的。

如果我们使用

watch -n1 iptables -t nat -nvL

观察POSTROUTING链的数据变化,会发现每刷新一次,就会新增数据包数量,这就是我们之前的配置生效了。

需求二:出口地址不固定

使用MASQUERADE选项

如果我们的redhat2的ens38网卡的ip地址是不固定的,比如小公司使用了easy-ip的方式动态获取出口地址,那么我们之前配置中--to-source x.x.x.x部分就不能解决问题了。

使用

iptables -t nat -I POSTROUTING -p tcp -o ens33 -s 192.168.1.0/24 -j MASQUERADE

MASQUERADE 是伪装的意思。我们将-j SNAT --to-source 192.168.189.101整个替换成了-j MASQUERADE

注意这条规则即使使用-I也是会插入到最下面,所以要保证删除了刚刚那一条-j SNAT的规则。

需求三:外网设备访问内网服务

使用DNAT选项

如果我们的web服务在内网,而公司外的设备想要访问内网的web服务,即windowsxp没有设置网关地址,而redhat2拥有网关地址的情况。它封装的请求包是

srcip 192.168.1.1 dstip 192.168.1.254protocol tcp dstport 80

这个数据包到达redhat1后,因为目的地址是本机(192.168.1.254),所以会被INPUT链处理,不会进行转发。但是我们的需求是将其转发到redhat2,所以不能让INPUT链来处理,而是要用PREROUTING链处理。

iptables -t nat -I PREROUTING -i ens38 -d 192.168.1.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.189.1:80

访问成功(注意访问地址是192.168.1.254)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何发动DDoS 攻击(如何发动群众参与创城工作)
下一篇:MyBatis逆向工程生成dao层增删改查的操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~