Linux防火墙——SNAT、DNAT
目录
NAT
一、SNAT策略及作用
1、概述
SNAT应用环境
SNAT原理
SNAT转换前提条件
1、临时打开
2、永久打开
3、SNAT转换1:固定的公网IP地址
4、SNAT转换2:非固定的公网IP地址(共享动态IP地址)
二、SNAT实验
配置web服务器(192.168.247.99/24)
配置网关服务器(192.168.247.100/12.0.0.1)
配置外网服务器
配置网关服务器的iptables规则
二、DNAT策略与应用
DNAT应用环境
DNAT原理
DNAT转换前提条件
DNAT的转换
DNAT转换2:
在内网上配置
在网关服务器添加iptables规则
测试外网是否能访问内网
tcpdump——linux抓包
NAT
NAT:network address transtation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP
响应报文:修改源/目标IP,根据跟踪机制自动实现
NAT的实现分为下面类型:
- SNAT:source NAT,支持POSTROUTING,INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
- DNAT:destination NAT 支持PREROUTING,OUTING,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
- PNAT:port nat,端口和IP都进行修改
序号 | 源 | 目标 |
---|---|---|
1 | 192.168.247.101:9720 | 12.0.0.1:80 |
2 | 12.0.0.1:80 | 12.0.0.100:80 |
3 | 12.0.0.100 | 192.168.100.101 |
4 | 12.0.0.100 | 12.0.0.1 |
5 | 192.168.100.100 |
一、SNAT策略及作用
1、概述
SNAT应用环境
局域网主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)
SNAT原理
源地址转换
修改数据包的源地址
SNAT转换前提条件
1、局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2、Linux网关开启IP路由转发
2、开启SNAT的命令
linux系统本身是没有转发功能,只有路由发送数据
SNAT选项:
- to-source
- random
MASQUERADE:基于nat表的target,适用于动态的公网IP,如:拨号网络
MASQUERADE选项
- to-ports port
- random
iptables -t nat -A POSTROUTING -s 12.0.0.0/24 ! -d 192.168.247.0/24 -j MASQUERADE
1、临时打开
echo 1>/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1
2、永久打开
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #将次行写入配置文件
1
sysctl -p #读取修改后的配置
3、SNAT转换1:固定的公网IP地址
可换成单独ip 出站外网网卡 外网ip
iptables -t nat -A POSTROUTING -s 192.168.247.0/24 -o ens33 -j SNAT --to 10.0.01
#配置SNAT策略,实现SNAT功能,将所有192.168.247.0这个网段的ip改为10.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.247.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
4、SNAT转换2:非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.247.0/24 -o ens33 -j MASQUERADE
二、SNAT实验
1、环境准备
web服务器ip:192.168.247.99(nat1)关闭防火墙和selinux、开启http服务
网关服务器内网ip地址:192.168.247.100
外网ip地址:12.0.0.1 关闭防火墙和selinux、开启http服务
外网ip地址:12.0.0.10(nat2)
VMware的虚拟网络编辑器中默认nat模式网段:192.168.247.0 nat2模式网段:12.0.0.0
配置web服务器(192.168.247.99/24)
1、选择网卡模式为nat模式
2、修改ens33网卡
3、重启网络服务
systemctl restart network
4、 ping网关测试
5、 关闭防火墙、selinux ,安装http服务
6、开启http服务
配置网关服务器(192.168.247.100/12.0.0.1)
1、添加一块虚拟网卡
2、关闭防火墙,selinux
3、配置ens36网卡
配置ens33网卡
4、重启网络,查看ip
4、关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
5、安装http服务
yum install httpd -y
6、开启http服务
配置外网服务器
1、修改网卡模式
2、配置网卡
3、重启网卡服务,查看ip
4、网络联通测试
开启SNAT
配置网关服务器的iptables规则
iptables -nL #查看规则
iptables -nL -t nat #查看规则
iptables -F #清除iptables的规则
iptables -F -t nat #清除iptables的规则
二、DNAT策略与应用
DNAT应用环境
在internet中发布位于局域网内的服务器
DNAT原理
修改数据包的目的地址
DNAT转换前提条件
- 局域网的服务器能够访问internet
- 网关的外网地址有正确的DNS解析记录
- linux网关开启ip路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysct1 -p
DNAT的转换
发布内网的web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.247.102
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80 -j DNAT --to 192.168.247.102
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80-j DNAT --to-destination 192.168.247.102
入站|外网网卡 | 外网ip 内网服务器ipiptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80-j DNAT --to 192.168.247.11-192.168.247.20
DNAT转换2:
发布时修改目标端口
#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 250-jDNAT --to 192.168.100.102:22
在内网上配置
#在内网上安装httpd并开启服务
[root@localhost yum.repos.d]# yum install -y httpd
[root@localhost yum.repos.d]# systemctl start httpd
#关闭防火墙和selinux
[root@localhost yum.repos.d]# systemctl stop firewalld.service
[root@localhost yum.repos.d]# setenforce 0
在网关服务器添加iptables规则
#先清空规则
[root@localhost yum.repos.d]#iptables -F -t nat
#添加规则
[root@localhost yum.repos.d]#iptables -t nat -A PREROUTING -i ens38 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.102
#查看规则
[root@localhost yum.repos.d]#iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 12.0.0.1 tcp dpt:80 to:192.168.100.102
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
测试外网是否能访问内网
#在外网服务器上
[root@localhost ~]# curl 12.0.0.1
#在内网服务器上
[root@localhost yum.repos.d]# tail /etc/httpd/logs/access_log
127.0.0.1 - - [02/Nov/2021:18:05:31 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
12.0.0.100 - - [02/Nov/2021:18:19:45 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
tcpdump——linux抓包
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
- tcp:ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据包的类型
- -i ens33:只抓经过接口ens33的包
- -t:不显示时间戳
- -s 0:抓取数据包时默认抓取长度为68字节。加上-s 0后可以抓到完整的数据包
- -c 100:只抓取100个数据包
- dst port !22:不抓取目标端口是22的数据包
- src net 192.168.1.0/24:数据包的源网络地址为192.168.1.0/24。net:网段,host:主机
- -w ./target.cap:保存成cap文件,方便用wireshark分析