内网扫描监测 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