《Linux系统安全:纵深防御、安全扫描与入侵检测 》 —2.2.3 使用iptables进行网络地址转换

举报
华章计算机 发表于 2019/11/14 11:19:16 2019/11/14
【摘要】 本节书摘来自华章计算机《Linux系统安全:纵深防御、安全扫描与入侵检测》一书中第2章,第2.2.3节,作者是胥峰。

2.2.3 使用iptables进行网络地址转换

在实践中,iptables还经常用于网络地址转换(NAT)的环境中。通过网络地址转换技术,可以有效减少直接部署公网IP地址的服务器数量,增强网络环境的安全性。

网络地址转换分为源地址转换和目的地址转换。

1. 源地址转换

源地址转换,主要用于无外网IP的服务器(Server B)需要主动向外发起连接访问互联网的场景下,如图2-2所示。

 image.png

图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在进行通信

网络地址转换是运维人员在工作中经常用到的技术,因此我们需要非常熟悉源地址转换和目的地址转换这两种方案。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。