《Linux系统安全:纵深防御、安全扫描与入侵检测 》 —2.2.3 使用iptables进行网络地址转换
2.2.3 使用iptables进行网络地址转换
在实践中,iptables还经常用于网络地址转换(NAT)的环境中。通过网络地址转换技术,可以有效减少直接部署公网IP地址的服务器数量,增强网络环境的安全性。
网络地址转换分为源地址转换和目的地址转换。
1. 源地址转换
源地址转换,主要用于无外网IP的服务器(Server B)需要主动向外发起连接访问互联网的场景下,如图2-2所示。
图2-2 网络地址转换的网络示意图
在图2-2中,Server B没有外网IP,如其需要访问互联网,则需要进行如下的设置:
1)在服务器Server B上,指定其网络的默认网关是10.128.70.112(即Server A的内网地址)。
2)在服务器Server A上,启用路由功能。启用的方法是执行以下命令。
sysctl -w net.ipv4.ip_forward=1
3)在Server A上,设置iptables规则如下。
iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to x.y.z.173 #eth0是Server A的外网网卡,x.y.z.173是Server A的外网IP
经过以上3步骤设置后,Server B将会通过Server A访问互联网。此时,在互联网上看到的源地址是Server A的外网IP。
以Server B访问8.8.8.8的DNS服务为例,数据流程如下。
1)在Server B上,网络层数据包格式为:目的地址IP 8.8.8.8,源地址IP10.128.70.111。
2)在Server A上经过源地址转换后的网络层数据包格式为:目的地址IP 8.8.8.8,源地址IP x.y.z.173。该转换条目被记录在/proc/net/nf_conntrack中。
3)8.8.8.8的响应(源地址IP 8.8.8.8,目的地址IP x.y.z.173)到达Server A后,Server A改写网络层数据包为源地址IP 8.8.8.8,目的地址IP 10.128.70.111。
这就是源地址转换的工作过程。
在源地址转换的场景中,提供网络地址转换功能的服务器(如图2-2中的Server A)的内网IP和使用网络地址转换服务的服务器(如图2-2中的Server B)的内网IP需要处于同一个网段中。如果不符合这个条件,则需要使用SOCKS代理服务器实现无外网IP的服务器访问互联网。Linux系统中常用的开源免费的SOCKS代理服务器是Dantd,该项目的官方网站是http://www.inet.no/dante。
2. 目的地址转换
目的地址转换用于外部用户直接访问无外网IP的服务器(Server B)提供的服务时,如图2-2所示。例如,外部用户希望通过互联网访问到Server B上的Oracle数据库(监听端口是TCP 1521)时,可以使用如下的命令在Server A上进行目的地址转换设置:
iptables -t nat -A PREROUTING -d x.y.z.173 -p tcp -m tcp --dport 1521 -j DNAT --to-destination 10.128.70.111:1521 #改写目的地址为10.128.70.111,目的端口为1521
iptables -t nat -A POSTROUTING -d 10.128.70.111 -p tcp -m tcp --dport 1521 -j SNAT --to-source 10.128.70.112 #改写源地址IP为Server A的内网IP,此时在Server B上相当于是与Server A在进行通信
网络地址转换是运维人员在工作中经常用到的技术,因此我们需要非常熟悉源地址转换和目的地址转换这两种方案。
- 点赞
- 收藏
- 关注作者
评论(0)