• Linux防火墙之--SNAT和DNAT


    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)

    1. cd /etc/sysconfig/network-scripts
    2. #进入该路径
    3. cp ifcfg-ens33 ifcfg-ens36
    4. #创建新网卡信息

    1. TYPE=Ethernet
    2. DEVICE=ens36
    3. ONBOOT=yes
    4. BOOTPROTO=static
    5. IPADDR=12.0.0.254
    6. NETMASK=255.255.255.0
    7. #GATEWAY=20.0.0.2
    8. #DNS1=8.8.8.8

    此处不用设置网关,因为要充当内网网关

    1. TYPE=Ethernet
    2. DEVICE=ens33
    3. ONBOOT=yes
    4. BOOTPROTO=static
    5. IPADDR=20.0.0.254
    6. NETMASK=255.255.255.0
    7. #GATEWAY=20.0.0.2
    8. #DNS1=8.8.8.8

    客户机配置

    1. TYPE=Ethernet
    2. DEVICE=ens33
    3. ONBOOT=yes
    4. BOOTPROTO=static
    5. IPADDR=20.0.0.10
    6. NETMASK=255.255.255.0
    7. GATEWAY=20.0.0.254
    8. #DNS1=218.2.135.1

    web配置

    1. TYPE=Ethernet
    2. DEIVCE=ens33
    3. ONBOOT=yes
    4. BOOTPROTO=static
    5. IPADDR=12.0.0.100
    6. NETMASK=255.255.255.0
    7. GATEWAY=12.0.0.254
    8. #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 分为以下几个区域:

    1. trusted :信任区,所有流量都可以传入

    2. public :公共区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,也是firewalld的默认区域。

    3. external:外部区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,默认通过此区域转发的ipv4流量地址,可以进行伪装

    4. home 家庭区域:允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝

    5. internal:内部区域,默认值与home区域的作用相同

    6. work 工作区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝

    7. DMZ 隔离区 非军事区:允许ssh,其他的预定义好配置,其他的全部拒绝

    8. block:限制区,拒绝所有流量

    9. 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 查看

  • 相关阅读:
    安全配置错误规避指南
    前端html实现带行号的文本编辑器
    蓝桥等考C++组别六级004
    周二补丁日(Patch Tuesday)
    系统学习SpringFramework:SpringBean的注入方式
    数据中台体系化建设核心方法论
    【项目经验】:elementui表格中数字汉字排序问题及字符串方法localeCompare()
    【SA8295P 源码分析】111 - 使用 Infineon 工具升级DHU 的MCU 固件过程指导
    Trapezoidal Rule Integral
    python IP 端口 socket tcp 介绍
  • 原文地址:https://blog.csdn.net/qq_51506982/article/details/133640179