iptables 详解(11)iptables的扩展动作2与最后总结

Posted chenxiaomeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables 详解(11)iptables的扩展动作2与最后总结相关的知识,希望对你有一定的参考价值。

除了ACCEPT 、DROP  、REJECT 、LOG

认识几个新动作

SNAT 、DNAT 、MASQUERADE、REDIRECT

使用场景可能会是以下的场景:

<场景1>

网络内部有10台主机,有各自的地址,网络内部的主机与其他网络中的主机通讯时,会暴露自己的ip地址,如果我们要隐藏这些地址可以这样做:

当网络内部的主机向网络外部主机发送报文,

报文===>防火墙或者路由器,将报文的源 IP修改为防火墙或者路由器的 IP地址,源端口也映射为某个端口,路由器维护一张NAT表(内部主机+端口)

技术图片

 

 

其他网络中的主机收到这些报文,显示的源地址就变成是防火墙或者路由器的地址,给出回应时,路由器收到后再根据当前的NAT表发给指定主机, 准确地说是用到了NAPT功能。

Network Address Port Translation。

从路由器的角度 这样的 ip转换过程一共发生了2次

SNAT  内部网络报文  出去的时候 报文源 ip 被转换成目标路由器ip,Source Network Address Translation

DNAT  外部网络报文响应时 响应报文的目标路由器ip会再次被修改为之前发出来的源ip,Destinationnetwork address translation 

 

除了 隐藏网络内部主机ip地址,还能让 局域网内的主机共享公网ip,使私网ip也能访问互联网。

公司共用一个公网ip出口,10台电脑都配上各自的私网 ip,并进行端口映射。

 

<场景2>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如果要NAT功能能够正常使用需要开启linux主机的核心转发功能

root@ubuntu:~# echo 1 >/proc/sys/net/ipv4/ip_forward
root@ubuntu:~# cat /proc/sys/net/ipv4/ip_forward
1

 

SNAT相关操作

配置SNAT 可以隐藏往内主机的 ip 地址,也可以共享公网ip,如果只是共享ip的话,只配置如下的SNAT规则即可 

 iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source + 公网ip

  

如果公网ip是动态获取的 不是固定的,则可以使用MASQUERADE进行动态的SNAT操作,如下命令表示将10.1网段的报文的源IP修改为eth0网卡中可用的地址

iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE

 

DNAT相关操作

配置DNAT 可以通过公网 IP 访问局域网内的服务,理论上来说,只要配置DNAT规则,不需要对应的SNAT规则即可以达到DNAT的效果

但是在测试DNAT的时候,SNAT也要配置才能正常DNAT,可以先尝试添加DNAT规则 如果无法正常DNAT 则尝试SNAT,SNAT规则配置一条即可,

DNAT规则则需要根据实际情况配置不同的DNAT规则。

iptables -t nat -I PREROUTING -d 公网ip -p tcp --dport 公网端口 -j DNAT  --to-destination 私网ip:端口号
iptables -t nat -I PREROUTING -d 公网ip -p tcp --dport 8080 -j DNAT --to-destination 10.1.0.1:80
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网ip

 

在本机进行目标端口映射时 可使用REDIRECT动作

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 

  配置完上述规则后,其他机器访问本机的80的端口时,才会被映射到8080端口

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

================================================最后总结===============================================

1、规则的顺序非常重要

如果报文已经被前面的规则匹配到 则iptables会对报文执行对应动作(如ACCEPT 或者 REJECT)

 

2、规则中多个匹配条件,条件之间默认存在“与”关系。

一条规则如果包含多个匹配条件,那么报文必须同时满足这个规则中的所有匹配条件,报文才能被这条规则匹配到。

 

3、不考虑1的情况下,将匹配次数更多,频率更高的规则放置在前面

比如你写了两条规则,一条是针对sshd服务,一条是针对web服务,假设一天之内有20000个请求访问web服务,200个请求访问sshd服务

那么针对web服务的规则应该放在前面,针对sshd的规则放在后面,因为web的请求频率更高

否则就会造成每次访问都要经过sshd的规则,耗费更多资源。

 

4、iptables所在主机作为网络防火墙时,在配置规则时,要着重考虑方向性,双向的都要考虑,从外到内,从内到外

 

5、在配置iptables白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP 则当链中规则被清空时,管理员的请求也会被DROP掉。

以上是关于iptables 详解(11)iptables的扩展动作2与最后总结的主要内容,如果未能解决你的问题,请参考以下文章

防火墙iptables详解

iptables详解

Docker iptables 详解

iptables详解之filter

iptables详解:iptables规则管理

Linux防火墙iptables详解