nmap的命令很多,这里就不介绍了,想了解的话,网上很多的文章可以参考。
#############################################################
通过nmap端口扫描获取开放的端口,以达到内网体检的目的
#############################################################
1、通过salt获得主机列表
1
|
salt
'*'
cmd.run
'ifconfig|grep addr|sed -n "4p"|cut -d ":" -f 2|cut -d " " -f 1'
>
/root/hosts_list
|
获得的文件内容大致如下:
node1:
192.168.2.11
node2:
192.168.2.12
node3:
192.168.2.13
注意:
主机地址一定要是上面这种结构的,不然下面的sed后的结果不是纯IP列表,发给nmap扫描会报错的。
2、nmap对这个主机列表进行端口扫描
# 注意:刚开始没显式指定端口范围,发现例如27017这些端口都没扫描出来,后来就加了-p 1-65535参数,但是发现扫描特别慢,慎重考虑。
1
|
sed
-n
'n;p'
/root/hosts_list
|
xargs
-p 1-65535 nmap -sS >
/tmp/port_list
&&
egrep
"Nmap scan report|open"
/tmp/port_list
>
/tmp/list
&&
rm
-f
/tmp/port_list
|
获得的文件内容大致如下:
Nmap scan report for node1 (192.168.2.11)
22/tcp open ssh
Nmap scan report for node2 (192.168.2.12)
22/tcp open ssh
Nmap scan report for node3 (192.168.2.13)
22/tcp open ssh
3、每天执行一次下面的这个脚本,获取最新的开放的端口,并比对旧的数据,发现端口异动就自动报警。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/bash
# Description: nmap扫描线上服务器的开放端口
# Author: lirl
# Date: 2016/10/02
sed
-n
'n;p'
/root/hosts_list
|
xargs
nmap -p 1-65535 -sS >
/tmp/port_list
&&
egrep
"Nmap scan report|open"
/tmp/port_list
>
/tmp/list_
$(
date
+%F)
if
[ $? -
eq
0 ];
then
if
!
diff
/tmp/list
/tmp/list_
"$(date +%F)"
-y -W 100 >
/tmp/port_change_list
2>
/dev/null
;
then
echo
-e
"[+] some port changed $(date +%F) , Please check file /tmp/port_change_list.\n"
>>
/tmp/openports_stats
# mail -s "Port stats Changed,Please login salt to check." xxxx@126.com < /tmp/port_change_list
else
echo
-e
"[-] none port changed $(date +%F).\n"
>>
/tmp/openports_stats
fi
fi
|
获得的/tmp/port_change_list 文件内容大致如下:
Nmap scan report for node1 (192.168.2.11)Nmap scan report for node1 (192.168.2.11)
22/tcp open ssh22/tcp open ssh
Nmap scan report for node2 (192.168.2.12)Nmap scan report for node2 (192.168.2.12)
22/tcp open ssh22/tcp open ssh
Nmap scan report for node3 (192.168.2.13)Nmap scan report for node3 (192.168.2.13)
22/tcp open ssh22/tcp open ssh
80/tcp open http <
3306/tcp open mysql <
很明显,我们能看出哪些端口是增加的或者减少的。
4、如果确定当前端口是正常流程修改的,可以更新端口列表模板
1
|
cp
/tmp/list_
$(
date
+%F)
/tmp/list
|
基本上完成这几步骤,就差不多了,还有很多不完善的地方,等想到了在补充进来。