[email protected] mysql ~ / vim /etc/resolv.conf 存放dns服务器ip地址的,真正我们进行域名查询...">

当前位置:网站首页>信息安全-威胁检测-NAT日志接入威胁检测平台详细设计

信息安全-威胁检测-NAT日志接入威胁检测平台详细设计

2022-07-06 09:26:00 一一空

我们先看下NAT的几种模型,nat包括nat、snat、dnat三种,三者是一种抽象继承关系,如下先看下这些基础;

一、linux里存放dns服务器ip地址的配置文件


[[email protected] ~]# vim /etc/resolv.conf -->存放dns服务器ip地址的,真正我们进行域名查询的时候,就到这个文件里找dns服务器地址
# Generated by NetworkManager
nameserver 114.114.114.114


二、NAT


公有ip:互联网上
私有ip:局域网里使用

NAT的概念:Network Address Translation,网络地址转换


NAT解决的问题

解决了ip地址不够用的问题

保证了用户能够上网

也起到了安全作用

NAT实现方法的工作过程:


NAT 的优点

节省公有合法 IP 地址
处理地址 重叠
增强灵活性
安全性
NAT 的缺点
延迟增大
配置和维护的复杂性
不支持某些应用 , 可以通过静态 NAT 映射来避免


linux里的NAT

SNAT  -----------修改源ip

 

DNAT  -----------修改目的ip

三、SNAT


SNAT策略的典型应用环境


    局域网主机共享单个公网IP地址接入Internet

SNAT策略的原理


    源地址转换,Source Network Address Translation
    修改数据包的源IP地址


linux网关服务器: 理解为就是一台路由器
NAT功能的实现是通过netfilter模块来实现的,iptables给netfilter传递参数

SANT策略的原理

 vmware虚拟机的网卡的3个模式

VMware Network Adapter VMnet1 --》hostonly模式--仅主机模式:虚拟机只能和我们的真实机器通信

VMware Network Adapter VMnet8 --》NAT模式

桥接模式: 虚拟机可以和本地通信,也可以和局域网里的其他的真实机器或者也是桥接模式的虚拟机通信
    桥接模式里虚拟机和真实机器的地位是一样的,都是通过外面的路由器上网,而且和真实机器在相同网段

配置SNAT策略,开启snat功能(iptables)解析

iptables  -t nat  -A POSTROUTING -s 192.168.66.0/24  -o ens33  -j SNAT --to-source 192.168.0.133


-t nat 指定在nat表里操作
-A POSTROUTING 在POSTROUTING位置追加一条规则 append 
-s 192.168.66.0/24  指定从防火墙过的数据包里的源ip地址来自 192.168.66.0/24 网段
-o ens33 重ens33接口出去  out-interface
 -j SNAT  采取SNAT策略,进行源ip地址的转换
 --to-source 192.168.0.133 将ip包里的源ip地址修改为192.168.0.133

iptables 是一个防火墙工具

iptables -F  清除防火墙规则

 iptables -L  查看防火墙规则

nmcli命令的使用(nmcli命令详解_桂安俊@KylinOS-CSDN博客_nmcli命令详解)

[[email protected] ~]# nmcli  n  查看网络是否启用
enabled
[[email protected] ~]# nmcli  n off  关闭网络
 
[[email protected] ~]# nmcli  n on  打开网络
[[email protected] ~]# nmcli  c  查看所有的网络的连接情况
NAME        UUID                                  TYPE      DEVICE 
ens33       c96bc909-188e-ec64-3a96-6a90982b08ad  ethernet  ens33  
ens37       4a5516a4-dfa4-24af-b1c4-e843e312e2fd  ethernet  ens37  
有线连接 1  a0953d48-3a24-36d3-b388-fe27b3f12b93  ethernet  --     
[[email protected] ~]# 
[[email protected] ~]# nmcli d show
GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:79:61:8A
GENERAL.MTU:                            1500
GENERAL.STATE:                          100(已连接)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         192.168.0.127/24
IP4.GATEWAY:                            192.168.0.1
IP4.ROUTE[1]:                           dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 104
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 104
IP4.DNS[1]:                             114.114.114.114


三、DNAT


DNAT策略的典型应用环境
    在Internet中发布位于企业局域网内的服务器
    在Internet中发布内网的服务器
    发布: 公开出去

    将一个网络里的服务器发布出来让另外的网络能够访问

    发布: 背后是对内部资源的管控


DNAT策略的原理
    目标地址转换,Destination Network Address Translation
    修改数据包的目标IP地址

SNAT:局域网 --> 外网 --> 出去的问题

DNAT:外网 --> 局域网 --> 进来的问题

跳板机(堡垒机):外面的机器先登录到跳板机,然后再在跳板机上登陆里面的服务器

过程如下图所示:  

DANT策略的原理

 配置DNAT策略,开启dnat功能(iptables)解析

 iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6

-t nat  指定nat表里操作
 -A PREROUTING  在 PREROUTING位置追加一条规则  append

 -i eth0 从eth0接口进入系统  in-interface

 -d 218.29.30.31 目的ip地址是218.29.30.31
 -p tcp --dport 80  传输层采用tcp协议,同时目的端口是80  Destination port

-j DNAT  采取DNAT策略
--to-destination 192.168.1.6 修改目的ip为192.168.1.6

DNAT如何发布内网不同的服务器呢?

使用不同的端口号来对应内网不同的ip地址服务器
    iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 80  -i ens33 -j DNAT  --to-destination 192.168.88.27
    iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 80  -i ens33 -j DNAT  --to-destination 192.168.88.27:80

    iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 8080  -i ens33 -j DNAT  --to-destination 192.168.88.88:8080
    iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 3306  -i ens33 -j DNAT  --to-destination 192.168.88.136:3306

    dnat修改ip包的目的ip地址,还可以修改tcp或者udp里的目的端口号 

好,到这里我们对nat的模型有了一些初步认识,那我们开始看下nat解析日志如何接入到威胁检测平台;

这里可以看到nat日志服务器整体的处理流程如下:

  1. 我们有很多nat服务器用户SNAT和DNAT的解析;
  2. 每台nat服务器会记录自己的解析日志到本地文件;
  3. 通过在nat服务器上部署rsync客户端,将nat解析日志文件上传到nat日志的文件服务器;
  4. 在nat日志文件服务器上部署我们自己java编写的agent;
  5. java的agent将nat文件服务器上所有的解析日志读取出来,并写入MQ;
  6. MQ的消费者将nat解析日志写入ES集群、Hadoop集群;

在处理nat日志文件服务器上的日志文件有以下几个难点:

1.nat服务器的机房增加;

2.nat机房下用于nat解析的机器增加;

3.机器下nat服务器的解析日志文件的增加;

4.高并发:随流量不断上涨nat日志文件不断增加、单个文件日志行数不断上涨;

应对方案;

1.在nat日志文件服务器上构建文件目录结构:~/机房/机器名/日期/文件名+时间戳.txt

2.单独一个线程监控机房和机器,发现新的机房或者机器开启新线程监控文件;

3.每个机器开启一个线程监控文件增长;

4.采用线程池处理文件内容,每个文件采用一个独立线程进行读取和发送到MQ;

5.发送至MQ的生产者采用kafka批量发送,批量大小设置到0.5m,减少发送次数;

单个文件的处理模型如下

在一个线程下的处理逻辑:

private void run() {
        String timeDescription = file.getName().substring(8, 22);//获取时间戳,返回为20201516_193047
        AtomicReference<Integer> sendCount = new AtomicReference<>(0);
        if (noExist()) {
            long start = System.currentTimeMillis();//当前文件处理的开始时间
            try (Stream<String> stream = Files.lines(Paths.get(file.getPath()))) {

                stream.forEach((s) ->
                {
                    recordContentCount();
                    log.debug("orimsg" + s);
                    String[] splits = s.split("\\s+");
                    if (splits.length > 6) {
                        try {
                            Natlog nat = new Natlog(splits, timeDescription, jifang);
                            String res = nat.toString();
                            kafkaProducerService.write(res);//kafka通过修改客户端批量发送的大小batch.size来实现批量发送
                            sendCount.getAndSet(sendCount.get() + 1);
                        } catch (Exception e) {
                            log.error("record err: {}", file.getPath() + "," + s);
                        }

                    } else {
                        log.error("record err: {}", file.getPath() + "," + s);
                    }
                });
            } catch (Exception e) {
                log.error("record err: {}", file.getPath() + "," + e.toString());
            }
            setFileExist();//设置文件已经读取,缓存7天,很重要的一点【日志文件保留天数是5天,7天后再次检索就检索不到这个文件了】
            long cost = System.currentTimeMillis() - start;
            log.info("处理统计 当前机房:{}, 当前文件:{},文件记录处理数量:{},耗时:{},文件最后修改时间:{} "
                    , jifang
                    , file.getPath()
                    , sendCount.get()
                    , cost
                    , new DateTime(file.lastModified()).toString("yyyy-MM-dd HH:mm:ss"));//文件最后的修改时间
        }
    }

参考:NAT、SNAT、DNAT_怿琴殇的博客-CSDN博客_nat和snat

原网站

版权声明
本文为[一一空]所创,转载请带上原文链接,感谢
https://blog.csdn.net/philip502/article/details/125124662