Script Python – Phát hiện thiết bị lạ kết nối vào mạng

Chắc hẳn đây là một trong những script “gãi đúng chỗ ngứa” cho các anh em đang làm quản trị mạng cho các công ty. Các system admin luôn luôn phải kiểm soát các thiết bị kết nối tới mạng của công ty nhằm mục đích bảo vệ an toàn cho mạng lưới, tránh cho các thiết bị lạ chứa virus hoặc mã độc. Điều này cũng là cần thiết cho việc quản lý các thiết bị của công ty.

Script dưới đây sẽ là một case study tuyệt vời cho các bạn đã đang và sẽ làm một người quản trị mạng cho các công ty và doanh nghiệp vừa và nhỏ.

Yêu cầu

Mạng access của công ty có các switch nối dây ra các máy tính bàn tại các phòng ban. Khi
người dùng mang laptop hoặc Access Point đến cắm vào các lỗ mạng có thể gây loop hoặc nguy cơ truy
cập trái phép vào các ổ chung chứa dữ liệu của công ty. => Ta sử dụng script python để báo cho network
admin khi có người cắm device lạ vào công ty.

Cách thực hiện

– Tạo 1 file chứa danh sách các MAC của các máy bàn (lấy từ AD hoặc show trên switch hoặc yêu cầu người dùng gửi lại cho network admin)
– Viết script định kì show mac address –table trên switch, nếu thấy có MAC mà không nằm trong file bên trên thì gửi mail báo cho network admin biết => tùy network admin xử lí tiếp

 

Bước 1: Tạo file allmac.txt dạng như dưới


Bước 2: Viết script check_mac.py

#!/usr/bin/env python3
from netmiko import ConnectHandler
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
#Đọc file allmac sau đó lưu các MAC vào mảng totalmac
totalmac=[]
f=open('allmac.txt','r')
lines=f.readlines()
for i in range(0,len(lines)):
 totalmac+=[lines[i].rstrip()]
#khai báo các switch công ty
sw_user1={
 'device_type': 'cisco_ios',
 'ip': '192.168.177.131',
 'username': 'admin',
 'password': 'cisco',
 'secret': 'cisco',
 'verbose': False,
}
sw_user2={
 'device_type': 'cisco_ios',
 'ip': '192.168.177.132',
 'username': 'admin',
 'password': 'cisco',
 'secret': 'cisco',
 'verbose': False,
}

#-------------------Viết hàm gửi mail-------------------#
def sendMail(output,dstMail):
 if(output!=''):
  msg = MIMEMultipart()
  msg['From'] = 'myemail@gmail.com'
  msg['To'] = dstMail
  msg['Subject'] = "NEW DEVICE JOIN NETWORK"
  msg.attach(MIMEText(output, 'plain'))
  text=msg.as_string()
  server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
  server.login('myemail@gmail.com', "yourpass")
  server.sendmail("myemail@gmail.com",dstMail,text)
  server.quit()
#--------------Login vào switch và show mac-------------#
output=''
all_switches=[sw_user1,sw_user2]
for switches in all_switches:
 net_connect=ConnectHandler(**switches)
 net_connect.enable()
 wr=net_connect.send_command_timing("show mac address-table")
 f=open('mactemp.txt','w')
 f.write(wr)
 f=open('mactemp.txt','r')
 linehai=f.readlines()
 for i in range(0,len(linehai)):
  if("Et" in linehai[i]):
   mac=linehai[i].split(" ")[1].replace(" ","") #=> remove dấu cách
   port=linehai[i].split(" ")[3]
   vlan=linehai[i].split(" ")[0]
#----------So sánh với các MAC trong totalmac ban đầu----------------#
#----------Neu khong co trong totalmac thì gửi mail------------------#
   if (mac not in totalmac):
    output+="WARNING: New device found: "+mac+" on switch "+switches['ip']+"port "+port+" vlan "+vlan+"\n\n"
if(output!=''):
 sendMail(output,"yourDestMail@gmail.com")

Kết quả chúng ta nhận được email thông báo Mac lạ như hình.

 

Tạo cronjob cho script

Đặt cronjob 20 phút thực hiện 1 lần: Trên Ubuntu (Các bài có cronjob cần thêm dòng#!/usr/bin/envpython3 ở trên cùng của script).

crontab -e
*/20 * * * * /usr/bin/env python3 /home/hainm/check_mac.py

Các bạn có thể tham khảo thêm cách tạo crontab tại bài viết:
Chạy các tác vụ theo chu kì bằng Cronjob trên Linux

Cảm ơn và chúc các bạn thành công nhé!
Nguồn: motpc.com
hainguyenit.edubit.vn

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x
()
x