Bootstrap

Linux防火墙2

一、SNAT和DNAT

SNAT:让内网机器可以访问外网服务器

DNAT:  让外网机器可以访问内网服务器

1.1、SNAT原理与应用

SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由),私转公

SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射

SNAT转换前提条件:
1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2.Linux网关开启IP路由转发 

数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP
当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP

 切记:私网地址永远不会出现在公网地址上

 

私网->公网->公网

公网->公网->私网

P 地址范围子网掩码描述
10.0.0.0 - 10.255.255.255/8 或 255.0.0.0A类私有网络地址
172.16.0.0 - 172.31.255.255/12 或 255.255.0.0B类私有网络地址
192.168.0.0 - 192.168.255.255/16 或 255.255.255.0C类私有网络地址

1.1.1、启用IP转发功能

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

在Linux系统中,命令 echo 1 > /proc/sys/net/ipv4/ip_forward 用于启用IP转发功能。

  • /proc/sys/net/ipv4/ip_forward:这是一个特殊的虚拟文件,用于控制Linux内核的IPv4网络层是否应该转发数据包。当这个文件的值为1时,表示启用IP转发;当值为0时,表示禁用IP转发。

因此,当你执行 echo 1 > /proc/sys/net/ipv4/ip_forward 命令时,你实际上是在告诉Linux内核:“对于IPv4数据包,请允许它们被转发到其他网络接口

或者

sysctl -w net.ipv4.ip_forward=1

上面的命令的效果是临时的,仅在当前会话中有效。一旦系统重启,这个设置将不会保留。要使这个设置永久生效,你需要在系统启动时自动执行这个命令,或者编辑网络配置文件(如/etc/sysctl.conf),在其中添加一行net.ipv4.ip_forward=1,然后运行sysctl -p来应用更改。

永久打开步骤如下:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1    #将此行写入配置文件
   
sysctl -p  #将取修改后的配置

注:还有一种方式静态路由,这个就比较麻烦

1.1.2、SNAT转换

SNAT转换1:固定的公网IP地址:
#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1

-o是出站网卡

iptables  -t  nat  -A  POSTROUTING  -s  192.168.100.0/24  -o ens33 -j  SNAT   --to 10.0.0.1

可换成单独IP                   出站                                                       外网网卡                    外网IP


iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
                                    出站                                                   外网网卡                    外网IP或地址池


                                                
SNAT转换2:非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

                                                                                                             就是masquerade控制类型

小知识扩展:
一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
 

1.2、DNAT原理与应用:

DNAT应用环境

在Internet中发布位于局域网内的服务器,公转私

DNAT原理

目的地址(目标机,就是其他机)转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。


DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录
3. Linux网关开启IP路由转发


vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

2.1.1、DNAT转换

DNAT转换1:发布内网的Web服务
#把从ens37进来的要访问web服务的数据包目的地址转换为192.168.100.13
iptables -t nat -A PREROUTING  -i  ens37  -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.13
或                                入站                                 公网IP                                  

内网服务器IP
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.13
                                   入站                                   公网IP             端口                          

                          内网服务器IP
                           

回包
iptables -t nat -A POSTROUTING  -s 192.168.100.13 -o ens37 -j SNAT --to 10.0.0.1
                                                                      内网IP    出站外网网卡              外网地址


可以现场做个域名解析

1.3、实验

以下实验以snat为例:

示意图

需求:内网客户端可以访问公网网站
思路:需要用防火墙做nat转换

内网用户客户端访问公网服务器

注意:网防火墙网关服务器需要关闭firewalld防火墙,公网服务器的iptables防火墙策略要干净(不能有拒绝,坑),selseinux都要关,内网windows客户端防火墙也要关。

实验环境:
内网客户端(内网pcwin客户机):192.168.100.130
公网服务器(公网linux服务机):  12.0.0.100                 开启httpd服务
网防火墙网关服务器:12.0.0.1和 192.168.100.100

1.编辑的虚拟网络编辑

Vmnet1模式网段:192.168.100.0,Vmnet3模式网段:12.0.0.0

2.现在配置防火墙网关代理机

添加两快网卡(两个网络适配器,cp内容),并设置

a.关闭firewalld防火墙,设为开机不自启

systemctl stop firewalld.service  

systemctl disable firewalld.service            

b.安装iptables,开启服务(可以提前下)
yum -y  install iptables iptables-services     
systemctl start iptables. Service 

c.为了不必要的麻烦,再关一下selinux

setenforce 0        

3.Linux网关开启IP路由转发

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

4.在linux网关服务器上做SNAT转换

iptables -F -t nat

iptables -nvL -t nat  查看

iptables -t nat -A POSTROUTING  -s 192.168.100.0/24 -o ens37 -j SNAT  --to 12.0.0.1

iptables -nvL -t nat  查看

5.配置公网服务器,修改网卡和网络适配器,为vm3,仅主机模式

vim /etc/sysconfig/network-scripts/ifcfg-ens33

a.关闭防火墙firewalld selinux

b.提前下载开启httpd

systemctl restart httpd.service 

c.可以在防火墙网关代理机上curl  12.0.0.100 测试

6.配置内网客户端

访问

总结

其他内容

开启路由转发功能
vim /etc/sysctl.conf  

net.ipv4.ip_forward=1

或配置内核参数开启路由转发,echo 1 > /proc/sys/net/ipv4/ip_forward为临时配置

sysctl -p   从文件加载系统参数

配置防火墙策略(先清空nat表规则)
iptables -t nat -A PREROUTING -d 12.0.0.128 -i ens38 -j DNAT --to-destination 192.168.192.210
iptables -t nat -I POSTROUTING -s 192.168.192.0/24 -o ens38 -j SNAT --to-source 12.0.0.128

验证:内网客户端访问12.0.0.211
           公网客户端访问12.0.0.128
 

DNAT转换1:入站外网网卡外网IP到内网服务器IP
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.100.13-192.168.100.20


                                                                            
DNAT转换2:发布时修改目标端口
发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接


iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.100.13:22
                                                 入站外网网卡    外网IP           外网远程端口                                  内网IP和远程端口号


在外网环境中使用SSH测试
ssh -p 250 [email protected]  

yum -y install net-tools    #若没有ifconfig 命令可提前使用yum 进行安装
ifconfig ens33

iptables -nvL -t nat  查看

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

1.4、防火墙规则备份和还原

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


防火墙规则的备份和还原
导出(备份)所有表的规则.
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

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的包,i是入站
(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)分析

;