zoukankan      html  css  js  c++  java
  • 内网扫描监测 v1 tcpdump版

    内网扫描监测 v1 tcpdump版

    环境准备

    1、centos7操作系统
    2、配置多个ip,两种用途:

    服务器添加多块网卡,可以同时监测多个网络
    单网卡配置多个ip,增加被黑客扫描的几率
    我这里配置了一块网卡 ens160,上面配置了四个IP地址 10.12.28.99、10.12.29.99、10.12.30.99、10.12.31.99

    3、加固sshd服务,防止服务器被黑客黑掉

    配置完监控后,直接关闭sshd服务。后续维护的时候,可以临时开启sshd服务,或者在服务器本地进行操作
    N种方法:禁用root登录、设置强密码、强制使用密钥登录、修改sshd监听端口号,限制访问IP等
    我这里使用的方法是:强制使用密钥登录+修改sshd监控端口为22774

    4、关闭防火墙运行黑客扫描本机的端口;关闭除sshd以外的其他所有可以监听tcp端口的服务,防止黑客扫描成功黑掉服务器;最后执行命令检查服务器对外监听的端口只有sshd,方便我们连上来进行管理
    [root@net-monitor ~]# systemctl stop firewalld.service
    [root@net-monitor ~]# systemctl disable firewalld.service
    [root@net-monitor ~]# systemctl stop iptables.service
    [root@net-monitor ~]# systemctl disable iptables.service
    [root@net-monitor ~]# systemctl stop rpcbind.service
    [root@net-monitor ~]# systemctl stop rpcbind.socket
    [root@net-monitor ~]# systemctl disable rpcbind.socket
    [root@net-monitor ~]# systemctl disable rpcbind.service
    [root@net-monitor ~]# ss -tunl | grep '^tcp' | awk '{print$5}' | grep * 
    *:22774
    

    操作步骤

    1、创建存放抓包文件的目录,这里在/tmp目录下创建一个专门的目录,系统会自动清理较早的文件
    [root@net-monitor ~]# mkdir -p /tmp/tcpdump
    
    2、设置开机自动抓包,tcpdump只抓到四个监控IP的tcp-syn包,每分钟在/tmp目录下保存一个文件
    [root@net-monitor ~]# echo 'nohup tcpdump -i any (tcp[tcpflags] = tcp-syn) and dst host (10.12.28.99 or 10.12.29.99 or 10.12.30.99 or 10.12.31.99) -s 0 -U -G 60  -w /tmp/tcpdump/%Y_%m%d_%H%M.cap &>/dev/null &' >> /etc/rc.local
    
    3、手工执行一下上面的命令,就不用重启系统了
    [root@net-monitor ~]# nohup tcpdump -i any (tcp[tcpflags] = tcp-syn) and dst host (10.12.28.99 or 10.12.29.99 or 10.12.30.99 or 10.12.31.99) -s 0 -U -G 60  -w /tmp/tcpdump/%Y_%m%d_%H%M.cap &>/dev/null &
    

    在后台执行命令xxxx,即使退出登录也不会影响xxxx命令的运行,并且记录nohup日志
    nuhop xxxx &>/dev/null &

    在服务器的所有接口上抓包,不包括lo(127.0.0.1)接口
    -i any

    只抓tcp协议的syn包
    (tcp[tcpflags] = tcp-syn)

    抓取目标地址是本机四个IP地址的包
    dst host (10.12.28.99 or 10.12.29.99 or 10.12.30.99 or 10.12.31.99)

    抓取完成的数据包,默认只抓取68字节
    -s 0

    将抓到的包直接写入文件
    -U

    每60s生成一个文件,注意文件名要用变量,否则最多只能保存最近一分钟的数据包
    -G 60

    设置保存抓包文件的位置,配合 -G命令,这里使用了时间变量:/tmp/tcpdump/2021_0201_1745.cap
    -w /tmp/tcpdump/%Y_%m%d_%H%M.cap

    4、为rc.local文件添加执行权限
    [root@net-monitor ~]# chmod +x /etc/rc.d/rc.local
    
    5、创建脚本目录,存放分析扫描的脚本文件
    [root@net-monitor ~]# mkdir -p /opt/shells
    
    6、编辑脚本文件 /opt/shells/net-monitor.sh
    #!/bin/bash
    
    #  设置IP白名单,多个IP使用 | 隔开
    WHITE_LIST='10.12.28.253|172.22.140.44'
    
    #  设置报警阈值
    WARN_NUM=4
    
    #  计划任务每分钟自动读取两分钟前的那个抓包文件,分析异常IP,触发阈值自动邮件报警,并提供证据
    /usr/sbin/tcpdump 
        -r /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap 
        -nn 
        2>/dev/null 
            | grep -Ev "$WHITE_LIST" 
            | awk '{print $3}' 
            | awk -F . '{print $1"."$2"."$3"."$4}' 
            | sort -n | uniq -c | sort -nr 
            | while read COUNT IP
              do
                if [ $COUNT -ge $WARN_NUM ] 
                then        
                    /usr/sbin/tcpdump 
                        -r /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap 
                        -nn                
                        2>/dev/null        
                            | grep $IP             
                            | head -10             
                            | mail -r net-monitor@mail.com 
                                   -s "异常IP: $IP 一分钟内扫描监控服务器 $COUNT 次" 
                                   -a /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap 
                                   -c CC@mail.com 
                                   network-manager@mail.com  
                else        
                    exit            
                fi          
              done 
    

    因为 后面加 #注释 会影响脚本运行,所以单独写了一份注释版的

    #!/bin/bash
    
    #  设置IP白名单,多个IP使用 | 隔开
    WHITE_LIST='10.12.28.253|172.22.140.44'
    
    #  设置报警阈值
    WARN_NUM=4
    
    #  计划任务每分钟自动读取两分钟前的那个抓包文件,分析异常IP,触发阈值自动邮件报警,并提供证据
    
    /usr/sbin/tcpdump                                # tcpdump命令的绝对位置,使用相对路径计划任务会找不到该命令
        -r /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap  # 分析两分钟前的那个抓包文件,上一分钟的不行,原因留个悬念
        -nn                                          # 直接显示IP和端口号
        2>/dev/null                                  # 不打印错误信息
            | grep -Ev "$WHITE_LIST"                 # 过滤白名单中的IP
            | awk '{print $3}'                       # 取源IP
            | awk -F . '{print $1"."$2"."$3"."$4}'  # 去掉源端口,方便后面去重统计次数
            | sort -n | uniq -c | sort -nr           # IP去重后,按出现次数降序排列,第一列是出现次数,第二列是IP地址
            | while read COUNT IP                     # while循环读取每个IP及出现次数
              do
                if [ $COUNT -ge $WARN_NUM ]           # 如果IP出现次数大于等于报警阈值,进行邮件报警
                then        
                    /usr/sbin/tcpdump                # 重新分析两分钟前的那个抓包文件
                        -r /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap 
                        -nn                
                        2>/dev/null        
                            | grep $IP                                                           # 只看该异常IP的信息
                            | head -10                                                           # 节选前10行证据,放到邮件正文
                            | mail -r net-monitor@mail.com                                       # 设置邮件的发件人
                                   -s "异常IP: $IP 一分钟内扫描监控服务器 $COUNT 次"                 # 设置邮件主题
                                   -a /tmp/tcpdump/$(date -d '2 mins ago' "+%Y_%m%d_%H%M").cap   # 将本次分析的抓包文件,作为完成的证据添加到邮件的附件中
                                   -c CC@mail.com                                                # 设置抄送邮箱
                                   network-manager@mail.com                                       # 设置主送邮箱
                else        
                    exit                              # 如果IP出现的次数小于报警阈值,直接退出脚本,不在对后面出现次数更少的IP进行处理
                fi          
              done 
    
    7、添加计划任务,每分钟执行一次脚本
    [root@net-monitor ~]# crontab -e
    * * * * * sh /opt/shells/net-monitor.sh
    
    8、完成后的效果,如图

    9、附1:实时抓包命令
    [root@net-monitor ~]# tcpdump -i any (tcp[tcpflags] = tcp-syn) and dst host (10.12.28.99 or 10.12.29.99 or 10.12.30.99 or 10.12.31.99) -nn
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
    23:29:39.150287 IP 10.12.28.8.46905 > 10.12.28.99.22: Flags [S], seq 1789993435, win 14600, options [mss 1460,sackOK,TS val 4251068229 ecr 0,nop,wscale 7], length 0
    
    10、附2:手工分析历史抓包文件
    [root@net-monitor ~]# for i in `ls /tmp/tcpdump/*.cap` ; do echo "------ $i -----" ; tcpdump -r $i -nn 2>/dev/null| awk '{print $3}' | awk -F . '{print $1"."$2"."$3"."$4}' | sort -n | uniq -c | sort -n ; done
    ------ /tmp/tcpdump/2021_0201_2212.cap -----
    ------ /tmp/tcpdump/2021_0201_2218.cap -----
          1 10.12.28.253
    ------ /tmp/tcpdump/2021_0201_2219.cap -----
          1 10.12.28.253
    ------ /tmp/tcpdump/2021_0201_2220.cap -----
          1 10.12.28.253
    ------ /tmp/tcpdump/2021_0201_2241.cap -----
         19 10.12.28.8
    ------ /tmp/tcpdump/2021_0201_2329.cap -----
          1 10.12.28.8
    
  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/www1707/p/14359838.html
Copyright © 2011-2022 走看看