网站安全扫描(信息安全)

威胁检测-NAT日志接入威胁检测平台详细设计我们先看下NAT的几种模型,nat包括nat、snat、dnat三种,三者是一种抽象继承关系,如下先看下这些基础;一、linux里存放dns服务器ip地址的配置文件[root@slave-mysql ~]# vim /etc/resolv.conf –>存放DNS服务器ip地址的,真正我们进行域名查询的时候,就到这个文件里找dns服务器地址# Generated by NetworkManagernameserver 114.114.114.114二、NAT公有ip:互联网上私有ip:局域网里使用NAT的概念:Network Address Translation,网络地址转换NAT解决的问题解决了ip地址不够用的问题

保证了用户能够上网

也起到了安全作用NAT实现方法的工作过程:​编辑NAT 的优点节省公有合法 IP 地址
处理地址 重叠
增强灵活性
安全性
NAT 的缺点
延迟增大
配置和维护的复杂性
不支持某些应用 , 可以通过静态 NAT 映射来避免linux里的NATSNAT ———–修改源ip

DNAT ———–修改目的ip三、SNATSNAT策略的典型应用环境局域网主机共享单个公网IP地址接入InternetSNAT策略的原理源地址转换,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.133iptables 是一个防火墙工具iptables -F 清除防火墙的规则iptables -L 查看防火墙规则nmcli命令的使用(nmcli命令详解_桂安俊@KylinOS-CSDN博客_nmcli命令详解)[root@slave-mysql ~]# nmcli n 查看网络是否启用
enabled
[root@slave-mysql ~]# nmcli n off 关闭网络

[root@slave-mysql ~]# nmcli n on 打开网络
[root@slave-mysql ~]# 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 —
[root@slave-mysql ~]#
[root@slave-mysql ~]# 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三、DNATDNAT策略的典型应用环境在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.6DNAT如何发布内网不同的服务器呢?使用不同的端口号来对应内网不同的ip地址服务器iptables -t nat -A PREROUTING -d 192.168.0.127 -p tcp –dport 80 -i ens33 -j DNAT –to-destination 192.168.88.27iptables -t nat -A PREROUTING -d 192.168.0.127 -p tcp –dport 80 -i ens33 -j DNAT –to-destination 192.168.88.27:80iptables -t nat -A PREROUTING -d 192.168.0.127 -p tcp –dport 8080 -i ens33 -j DNAT –to-destination 192.168.88.88:8080iptables -t nat -A PREROUTING -d 192.168.0.127 -p tcp –dport 3306 -i ens33 -j DNAT –to-destination 192.168.88.136:3306dnat修改ip包的目的ip地址,还可以修改tcp或者udp里的目的端口号好,到这里我们对nat的模型有了一些初步认识,那我们开始看下nat解析日志如何接入到威胁检测平台;NAT日志采集核心流程这里可以看到nat日志服务器整体的处理流程如下:我们有很多nat服务器用户SNAT和DNAT的解析;每台nat服务器会记录自己的解析日志到本地文件;通过在nat服务器上部署rsync客户端,将nat解析日志文件上传到nat日志的文件服务器;在nat日志文件服务器上部署我们自己java编写的agent;java的agent将nat文件服务器上所有的解析日志读取出来,并写入MQ;MQ的消费者将nat解析日志写入ES集群、Hadoop集群;处理nat日志的难点在处理nat日志文件服务器上的日志文件有以下几个难点:1.nat服务器的机房增加;2.nat机房下用于nat解析的机器增加;3.机器下nat服务器的解析日志文件的增加;4.高并发:随流量不断上涨nat日志文件不断增加、单个文件日志行数不断上涨;难点应对方案1.在nat日志文件服务器上构建文件目录结构:~/机房/机器名/日期/文件名+时间戳.txt2.单独一个线程监控机房和机器,发现新的机房或者机器开启新线程监控文件;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://www.xiaosb.com/beian/44583/