目录
前言
通过上一章的学习,我们认识了防火墙的表、链结构,并学会了简单的编写防火墙的规则。Linux 防火墙在很多的时候承担着连接企业内、外网的重任,除了提供数据包过滤以外,还提供一些基本的网关应用。下面我们将了解防火墙中的SNAT 和DNAT策略。
一、SNAT策略
1.1 SNAT应用环境
局域网主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)
1.2 SNAT原理
源地址转换(Source Network Address Translation),根据指定的条件修改数据包的源IP地址,通常被叫做源映射。
客户端往网关服务器发数据包,通过网关服务器不进行转发,发送至需要访问的服务器,访问后,数据包回来的时候还是私网IP,原来的源IP作为目的IP进行传送,私网IP作为目的地址在互联网中会被丢弃,所以我们需要将IP进行转换,这样就能以公网IP的身份返回
1.3 SNAT转换前提条件
1. 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2. Linux网关开启IP路由转发
1.4 SNAT转换流程
注:SNAT的转换流程是从私网到公网,源IP地址改变,目标IP地址不变。
1.4 SNAT 应用
Linux 系统本身没有转发功能,只有路由发送数据
1.4.1 临时打开
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1
1.4.2 永久打开
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件 (注意要有空格)
sysctl -p #读取修改后的配置
1.4.3 SNAT转换方法
SNAT转换1: 固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10
SNAT转换2: 非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192. 168.80.0/24 -o ens36 -j MASQUERADE
扩展: 一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
案例:
网关服务器内网网卡(VMnet1) 192.168.100.100
网关服务器外网网卡 (VMnet2) 10.0.0.2
Linux Web服务器 (VMnet2) 10.0.0.12
局域网(windows)(VMnet1) 192.168.100.120
1. 修改网关服务器的网卡
修改内网网卡
修改外网网卡
重启网卡,查看是否设置成功
2. 修改web服务器的网卡
修改web服务器的网络配饰器,设置为主机模式
3.修改局域网的网卡
4.在web服务器安装httpd服务
关闭防火墙,并查看它的状态
5. 网关服务器,清空nat规则,设置SNAT
6. 在windows上面验证
在 Linux Web服务器 查看登录日志
二、DNAT 策略
2.1 应用场景
在Internet中发布位于企业局域网内的服务器
2.2 DNAT的原理
目标地址转换,Destination Network Address Translation
根据指定条件修改数据包的目标IP地址,保证了内网服务器的安全,通常被叫做目的映射。
2.3 DNAT转换前提条件
局域网的web服务器能够访问Internet
网关的外网IP地址有正确的DNS解析记录
Linux网关支持IP路由转换
2.4 DNAT 转换流程
2.5 DNAT 应用
2.5.1 Linux网关开启IP路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -P
2.5.2 DNAT转换1:发布内网的Web服务
把从ens37进来的要访问web服务的数据包目的地址转换为192.168.100.100
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.2 -p tcp --dport 80 -j DNAT --to 192.168.100.100
或
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100 ##80 是端口,
- i:入站外网网卡
10.0.0.2: 外网IP
192.168.100.100: 内网服务器IP
回包:
iptables -t nat -A POSTROUTING -s 192.168.100.100 -o ens33 -j SNAT --to 10.0.0.2
2.5.3 DNAT转换2:发布时修改目标端口
发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.12 -p tcp --dport 250 -j DNAT --to 192.168.100.100:22
在外网环境中使用SSH测试
ssh -p 250 root@12.0.0.1
yum -y install net-tools #####若没有ifconfig 命令可提前使用yum 进行安装
ifconfig ens33
注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回
案例:
网关服务器内网网卡(VMnet1) 192.168.100.100
网关服务器外网网卡 (VMnet2) 10.0.0.2
Linux Web服务器 (VMnet1) 192.168.100.120
客户端(windows)(VMnet12) 10.0.0.12
1. 修改网关服务器双网卡
2. 修改Linux Web服务器的网卡
重启网卡,查看是否修改成功
安装httpd服务,并开启服务
关闭防火墙
3. 修改客户端(windows)的网卡
4. 在网关服务 器上添加DNAT规则
5. 在客户端 windows上面验证
三、 防火墙规则的备份和还原
导出(备份)所有表的规则
iptables-save > /opt/ipt.txt
导入(还原)规则
iptables-restore < /opt/ipt.txt
将iptables规则文件保存在/etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则
iptables-save > /etc/sysconfig/iptables
systemctl stop iptables 停止iptables服务会清空掉所有表的规则
systemctl start iptables 启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则
四、抓包
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
1. tcp: ip icmp arp rarp和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据包的类型
2. -i ens33:只抓经过接口ens33的包
3. -t:不显示时间戳
4. -s 0:抓取数据包时默认抓取长度为68字节。加上-s 0后可以抓到完整的数据包
5. -c 100:只抓取100个数据包
6. dst port ! 22:不抓取目标端口是22的数据包
7. src net 192.168.1.0/24:数据包的源网络地址为192.168.1.0/24
8. -w ./target.cap:保存成cap文件,方住用ethereal (即wireshark)分析
五、总结
PREROUTING: 位于 nat 表,用于修改目的地址(DNAT)(上一节说的是数据包作路由选择前应用此链中的规则 记住!所有的数据包进来的时侯都先由这个链处理)
POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)(上一节说的是对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理)
SNAT(针对客户端) | 源地址转换数据包从内网发送至公网时,SNAT会把数据包的源IP由私网IP转换成公网IP。当响应的数据包从公网发送内容时,会把数据包的目的IP由公网IP转为私网IP |
DNAT(针对服务器端) | 将公网IP映射为局域网内对应的私网IP的服务器 |