除了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主机的核心转发功能
[email protected]:~# echo 1 >/proc/sys/net/ipv4/ip_forward [email protected]:~# 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:80iptables -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掉。
原文地址:https://www.cnblogs.com/chenxiaomeng/p/12384598.html