内网扫描监测 v2 iptables版

内网扫描监测 v2 iptables版

环境准备

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、设置iptables,将所有SYN包的请求记录到/var/log/message文件中
[root@net-monitor ~]# iptables -I INPUT -p tcp -m state --state NEW -j LOG --log-prefix "IPTABLES-TCP-SYN: "
[root@net-monitor ~]# iptables-save 
# Generated by iptables-save v1.4.21 on Tue Feb  2 00:36:25 2021
*filter
:INPUT ACCEPT [7:520]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:656]
-A INPUT -p tcp -m state --state NEW -j LOG --log-prefix "IPTABLES-TCP-SYN: "
COMMIT
# Completed on Tue Feb  2 00:36:25 2021
[root@net-monitor ~]# cat /var/log/messages | grep IPTABLES-TCP-SYN
Feb  1 22:41:36 net-monitor kernel: IPTABLES-TCP-SYN: IN=ens160 OUT= MAC=00:0c:29:4e:7e:b7:00:0c:29:8a:e5:20:08:00 SRC=10.12.28.8 DST=10.12.28.99 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63730 DF

iptables在INPUT中匹配TCP-SYN包
iptables -I INPUT -p tcp -m state --state NEW

将匹配到的包信息记录到/var/log/message日志中,日志前缀自定义为IPTABLES-TCP-SYN:,方便后面分析日志
-j LOG --log-prefix "IPTABLES-TCP-SYN: "

在/var/log/messages日志中可以找到发起SYN请求的源IP地址,后面我们将对这一项做详细分析
SRC=10.12.28.8

2、将第一步中执行的内容设置成开机自动运行
[root@net-monitor ~]# echo 'iptables -I INPUT -p tcp -m state --state NEW -j LOG --log-prefix "IPTABLES-TCP-SYN: "' >> /etc/rc.local 
[root@net-monitor ~]# chmod +x /etc/rc.d/rc.local
3、编辑脚本文件 /opt/shells/net-monitor-iptables.sh(详细的注释请参考“内网扫描监测 v1 tcpdump版”)
#!/bin/bash

#  设置IP白名单,多个IP使用 | 隔开
WHITE_LIST='10.12.28.253|172.22.140.44'

#  设置报警阈值
WARN_NUM=4

#  自动分析异常IP,触发阈值自动邮件报警,并提供证据
cat /var/log/messages \
    | grep "$(date -d '1 min ago' "+%b %e %H:%M")" \
    | grep IPTABLES-TCP-SYN \
    | grep -Ev "$WHITE_LIST" \
    | awk -F ' |=' '{print $15}' \
    | sort -n | uniq -c | sort -nr \
    | while read COUNT IP
      do
        if [ $COUNT -ge $WARN_NUM ]
        then    
            # 收集上一分钟异常IP扫描证据到证据文件
            cat /var/log/messages \
                | grep "$(date -d '1 min ago' "+%b %e %H:%M")" \
                | grep $IP \    
                > /tmp/$IP.log  
            # 取证据文件前10行作为邮件正文
            head /tmp/$IP.log \
                | mail -r net-monitor@mail.com \
                    -s "异常IP: $IP 一分钟内扫描监控服务器 $COUNT 次" \
                    -a /tmp/$IP.log \   
                    CC@mail.com \
                    network-manager@mail.com
            # 删掉服务器上的证据文件
            rm -rf /tmp/$IP.log
        else    
            exit        
        fi      
      done
4、添加计划任务,每分钟执行一次脚本
[root@net-monitor ~]# crontab -e
* * * * * sh /opt/shells/net-monitor-iptables.sh
5、完成后的效果,如图

6、附1:手工分析上一分钟扫描情况
[root@net-monitor ~]# cat /var/log/messages | grep "$(date -d '1 min ago' "+%b %e %H:%M")" | grep IPTABLES-TCP-SYN | awk -F ' |=' '{print $15}' | sort -n | uniq -c | sort -n
     21 10.12.28.8
7、手工分析上一小时扫描情况
[root@net-monitor ~]# cat /var/log/messages | grep "$(date -d '1 hour ago' "+%b %e %H")" | grep IPTABLES-TCP-SYN | awk -F ' |=' '{print $15}' | sort -n | uniq -c | sort -n
posted @ 2021-02-02 01:24  三角形  阅读(207)  评论(0编辑  收藏  举报