Linux防火墙除了提供数据包过滤功能外,还提供了一些基本的网关应用,本篇博客将介绍iptables防火墙的SNAT和DNAT策略:局域网共享一个公网IP地址接入Internet;向Internet发布位于内网的应用服务器。
SNAT策略
SNAT(Source Network Address Translation,源地址转换)是Linux防火墙的一种地址转换操作,也是iptables命令的一种数据包控制类型,其作用是根据指定的条件修改数据包的源IP地址。处理数据包的时机是在选择路由之后(nat表的POSTROUTING链)进行,将局域网外发数据包的源IP地址(私有地址)修改为网关服务器的外网接口IP地址(公网地址)
案例:使用SNAT策略实现局域网共享一个公网IP地址接入Internet
某公司使用双网卡Linux主机作为网关服务器,其中网卡eth0连接局域网,网卡eth1接入Internet。由于公司只注册了一个公网IP地址,要求合理配置网关策略,使局域网内的PC机可以通过共享的方式访问Internet,如下图所示:
在网关服务器上的操作步骤如下:
1. 打开网关的路由转发功能
(1)如果需要永久打开路由转发功能,可修改sysctl.conf配置文件
1
2
3
|
[[email protected] ~] # vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 将0(关闭)改为1(开启)
[[email protected] ~] # sysctl -p //读取修改后的配置
|
(2)如果只希望临时开启路由转发,可执行以下操作
1
|
[[email protected] ~] # echo 1 > /proc/sys/net/ipv4/ip_forward
|
或者
1
2
|
[[email protected] ~] # sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward=1 |
2. 正确的设置SNAT策略
1
2
3
|
[[email protected] ~] # iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 218.29.30.31 //设置SNAT策略,将源地址更改为公网IP地址
[[email protected] ~] # iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT //允许为网段192.168.1.0/24转发http流量
[[email protected] ~] # iptables -I FORWARD -d 192.168.1.0/24 -p tcp --sport 80 -j ACCEPT
|
3. 测试SNAT共享接入结果
上述配置完成后,Internet上的web服务器的防火墙规则必须允许192.168.1.0/24网段流量访问,否则会导致访问失败。并在web服务器上安装httpd服务
(1)在局域网客户机*问Internet上的web服务器
(2)在Internet上的web服务器上查看日志
4. ADSL宽带接入上网
在某些情况下,网关的外网IP地址可能并不是固定的,如使用ADSL宽带接入时。针对这种情况,iptables命令提供了一个特殊的控制类型,名为MASQUERADE(伪装),自动获取外网接口的IP地址,而无需使用“--to-source”指定固定的IP地址。
1
|
[[email protected] ~] # iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
|
DNAT策略
DNAT(Destination Network Address Translation,目标地址转换)是Linux防火墙的另一种地址转换操作,同样也是iptables命令的一种数据包控制类型,其作用是根据指定的条件修改数据包的目标IP地址和目标端口号,只能用在nat的表的PREROUTING链和OUTPUT链中
案例:使用DNAT策略向Internet发布位于内网的web服务器
某公司使用双网卡Linux主机作为网关服务器,其中网卡eth0连接局域网,网卡eth1接入Internet,需要在Internet中发布位于内网的网站服务器,要求在Internet*问公司的网站服务器,并使用SSH协议在Internet远程管理网关服务器和网站服务器。网关服务器SSH端口为2345,网站服务器SSH端口为2346
在网关服务器上的操作步骤如下:
1. 打开网关的路由转发功能
1
2
3
|
[[email protected] ~] # vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 将0(关闭)改为1(开启)
[[email protected] ~] # sysctl -p //读取修改后的配置
|
2. 正确的设置DNAT策略
1
|
[[email protected] ~] # iptables -t nat -I PREROUTING -i eth1 -d 218.29.30.31 -p --dport 80 -j DNAT --to-destination 192.168.1.200 //设置DNAT策略,将目标地址更改为位于内网的网站服务器地址
|
3. 测试DNAT发布结果
在网站服务器上安装httpd服务,并允许http流量访问,在Internet客户机*问网站
4. 修改网关服务器SSH端口
1
2
3
4
5
|
[[email protected] ~] # vim /etc/ssh/sshd_config //添加一个端口2345
#Port 22 Port 2345 [[email protected] ~] # service sshd reload
重新载入 sshd: [确定] |
5. 在网关服务器上设置DNAT策略
1
|
[[email protected] ~] # iptables -t nat -I PREROUTING -i ech1 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.200:22 //将218.29.30.21:2346转换成192.168.1.200:22
|
6. 在Internet客户机上连接网关服务器、网站服务器
需要在Windows上安装SSHXshell、SecureCRT、Putty等图形工具,我用的是Xshell