Linux防火墙——iptables(SNAT与DNAT详细)

目录

一.SNAT

1.原理

2.转换前提条件

二.DNAT

1.原理

2.转换前提条件

3.查看本机主机访问公网时使用的IP

三.防火墙规则的备份和还原

四.通过命令保存文件,使用抓包工具进行分析

五.实验

1.SNAT

2.DNAT


一.SNAT

1.原理

原理:源地址转换,修改数据包中的源IP地址

作用:可以实现局域网共享上网

配置的表及链:nat表中的POSTROUTING

2.转换前提条件

局域网各主机已正确设置IP地址、子网掩码、默认网关地址

Linux网关开启IP路由转发

linxu想系统本身是没有转发功能 只有路由发送数据 

tips:一个IP地址做SNAT转换,一般可以让内网100到200 台主机实现上网

临时打开:
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -W net.ipv4.ip_forward=1
永久打开:
vim /etc/sysct1.conf
net.ipv4.ip_forward = 1    #将此行写入配置文件   
sysctl -p  #将取修改后的配置

二.DNAT

1.原理

原理:目的地址转换,修改数据包中的目标IP地址

作用:将位于企业局域网中的服务器进行发布

配置在nat表中的PREROUTING链上

应用环境:在Internet中发布位于局域网内的服务器

2.转换前提条件

局域网的服务器能够访问Internet

网关的外网地址有正确的DNS解析记录

Linux网关开启IP路由转发

tips:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机之间端口,但不支持目标,即不支持多目标,即不支持负载均衡功能

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
DNAT转换1:发布内网的Web服务
#把从ens37进来的要访问web服务的数据包目的地址转换为192.168.100.101
iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.101
或    
iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.101
内网服务器IP
iptables -t nat -A POSTROUTING  -s 192.168.100.13 -o ens37 -j SNAT --to 10.0.0.1

3.查看本机主机访问公网时使用的IP

三.防火墙规则的备份和还原

将iptables规则保存到文件中进行备份:
iptables-save > /路径/名称

重新加载备份文件中的iptables规则:
iptables-restore < 备份文件的完整路径

四.通过命令保存文件,使用抓包工具进行分析

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字节。加上-s0后可以抓到完整的数据包
(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)分析

五.实验

1.SNAT

192.168.100.100 12.0.0.1
[root@localhost ~]# yum install -y iptables*
[root@localhost ~]# systemctl start iptables.service 
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=16b97a56-58e7-48db-a088-e6b557225481
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.100

添加网卡 

192.168.68.101

12.0.0.100

 192.168.100.100  12.0.0.1

Linux网关开启IP路由转发,不是默认打开的需要手动开启

[root@localhost ~]# vim /etc/sysctl.conf  

此时12.0.0.100ping192.168.100.101就能ping通了

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens37 -j SNAT --to-source 12.0.0.1 

12.0.0.100

192.168.100.101

12.0.0.100

 此时转发已完成

192.168.100.100 12.0.0.1 

清空nat

192.168.100.101

12.0.0.100

192.168.100.101

主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一般要详细的指定到端口

网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可

2.DNAT

192.168.100.100 12.0.0.1

[root@localhost ~]# iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.101

 12.0.0.100

192.168.100.101

猜你喜欢

转载自blog.csdn.net/oyyy3/article/details/121099277