nmap +shell腳本實現內網端口巡檢

  • 2019 年 10 月 5 日
  • 筆記

nmap的命令很多,這裡就不介紹了,想了解的話,網上很多的文章可以參考。

#############################################################

通過nmap端口掃描獲取開放的端口,以達到內網體檢的目的

#############################################################

1、通過salt獲得主機列表

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參數,但是發現掃描特別慢,慎重考慮。

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、每天執行一次下面的這個腳本,獲取最新的開放的端口,並比對舊的數據,發現端口異動就自動報警。

#!/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." [email protected] < /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、如果確定當前端口是正常流程修改的,可以更新端口列表模板

cp /tmp/list_$(date +%F) /tmp/list

基本上完成這幾步驟,就差不多了,還有很多不完善的地方,等想到了在補充進來。