Spring中的aware接口详情
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~