1.SNAT是什么
SNAT又称源地址转换。源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
真实环境运用中私网可以通过路由转发,将数据包传送给公网IP地址的服务器,而公网地址无法将相应的数据包回还给私网地址的用户。此时二者之间需要一个媒介,就是一个建立在私网和公网之间的网关服务器,对其之间的数据包进行相应的处理。来完成私网IP与公网IP之间的建立联系
2.DNAT是什么
DNAT:目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。通常来说,合法地址的数量比起本地内部的地址数量来要少得多。
私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问
所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问
简单来说:
SNAT是对源地址转换
DNAT是对目的地址转换
SNAT的典型应用场景
SNAT策略的工作原理
SNAT源地址转换过程:
数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。
如何用iptables实现地址转换
准备任务:
1.准备三台虚拟机
2.给网关服务器添加一张虚拟网卡
3.拓扑:
test1:20.0.0.10 内网
test2:ens33: 20.0.0.254
ens36:12.0.0.254
做SNAT的地址转换
test3:12.0.0.100 外网
过程
关闭防火墙
编辑网卡信息
首先ifconfig查看网卡名称(我这里是ens36)
cd /etc/sysconfig/network-scripts
#进入该路径
cp ifcfg-ens33 ifcfg-ens36
#创建新网卡信息
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=8.8.8.8
此处不用设置网关,因为要充当内网网关
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=8.8.8.8
客户机配置
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.10
NETMASK=255.255.255.0
GATEWAY=20.0.0.254
#DNS1=218.2.135.1
web配置
TYPE=Ethernet
DEIVCE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.254
#DNS1=8.8.8.8
网卡配置结束后,要通过iptables命令添加
iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 10.0.0.10
-t:指定表名
nat:地址转换的表名
-A:添加一条规则,在行尾追加
POSTROUTING:在出本机的时候添加一个地址转换的规则
-s:192.168.233.0/24 指定源IP地址
-j SNAT:指定控制类型
--to 10.0.0.10 所有源IP属于233.0这个网段,只要你是从ens36出来,都会把它们IP地址转换为10.0.0.10
完成之后, iptables -t nat -vnL查看
最后,网关服务器要同意转发
vim /etc/sysctl.conf
sysctl -p
立即启动
客户端链接web端(内网链接外网)测试
DNAT地址转换
iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 20.0.0.10:80
web端连接客户端测试
实验结束
Linux抓包技术--tcpdump
tcpdump为Linux自带的抓包工具
wireshark只适用于Windows
抓包方式:
1.指定抓包数量
2.动态抓包,一致会获取包,除非人工停止
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and net 20.0.0.0/24 -w ./target.cap
tcpdump:抓包命令,固定开头
tcp:抓包的协议
-i:经过,只抓经过ens33的数据包
-t:不显示时间戳
-s0:抓完整的数据包
-c:指定抓包的个数
dst port:80 访问的是httpd的80端口
src net:192.168.233.0/24
-w:抓包的数据,保存位置。
firewalld技术
firewalld:centos7自带的,和iptables一样,也是包过滤防火墙
firewalld过滤,通过区域来进行配置
iptables 静态防火墙
firewalld 动态防火墙
firewalld 分为以下几个区域:
-
trusted :信任区,所有流量都可以传入
-
public :公共区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,也是firewalld的默认区域。
-
external:外部区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,默认通过此区域转发的ipv4流量地址,可以进行伪装
-
home 家庭区域:允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝
-
internal:内部区域,默认值与home区域的作用相同
-
work 工作区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝
-
DMZ 隔离区 非军事区:允许ssh,其他的预定义好配置,其他的全部拒绝
-
block:限制区,拒绝所有流量
-
drop:丢弃区域,所有流量都会丢弃
firewalld相关命令
firewall-cmd --list-service
查看区域内允许通过的服务
firewall-cmd --add-service=http --zone=public
添加,浏览器20.0.0.10即可看到是否成功
firewall-cmd --remove-service=http --zone=public
删除
firewall-cmd --add-service=http --add-service=ftp --zone=pubilc
添加多个服务
firewall-cmd --list-services
查看
firewall-cmd --add-service={ftp,http}
添加多个的不同方法
firewall-cmd --add-service={ftp,http} --zone=public --permanent
永久生效
firewall-cmd --remove-service=http --zone=public --permanent
删除永久生效的项
firewall-cmd --zone=public --add-port=80/tcp
根据端口添加
firewall-cmd --zone=public --remove-port=80/tcp
移除
firewall-cmd --zone=指定区域
firewall-cmd --zone=public -add-port={3306,80,21}/tcp
添加多个端口
firewall-cmd --zone=public -add-port=30-35/tcp
添加端口的范围
firewall-cmd --list-all 查看