Lập trình các module mới

Một phần của tài liệu Quản trị mạng hướng người sử dụng mô hình sử dụng tác tử người sử dụng (Trang 33 - 44)

CHƯƠNG 3: XÂY DỰNG HỆ THỐNG QUẢN TRỊ, GIÁM SÁT DỊCH VỤ THƢ ĐIỆN TỬ (EMAIL)

3.3 Cài đặt các thành phần của hệ thống

3.3.1. Lập trình các module mới

Zabbix hiện tại đã cung cấp các chức năng nhƣ sau:

- Giám sát, theo dõi các thông số nhƣ CPU, RAM, băng thông mạng

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

34

- Zabbix Agent có thể đƣợc cài đặt trên Linux hoặc Windows

- Hỗ trợ phát triển thêm các thành phần giám sát mới bằng các ngôn ngữ lập trình khác nhau. Ta chỉ cần phát triển các script thu thập thông tin, cấu hình các Userparameter, việc truyền thông tin giám sát, lưu trữ và cảnh báo được thực hiện nhƣ với các thống số CPU, RAM mặc định.

Nhƣ vậy, cần lập trình thêm các thành phần sau:

- module cài đặt và thu thập thông tin tác tử. Module này đƣợc thực hiện bởi một file cài đặt, yêu cầu người dùng nhập thông tin, lưu lại thông tin này, và tự động cài đặt, cấu hình Zabbix agent cho phù hợp.

- các module mô phỏng quá trình sử dụng dịch vụ. Các module này đƣợc thực hiện bởi các script viết bằng ngôn ngữ python, mô phỏng quá trình sử dụng dịch vụ của người dùng. Đối với hệ thống thư điện tử, cần các script theo dõi các dịch vụ sau:

+ POP3 + POP3SSL + IMAP + IMAPSSL + SMTP + SMTPSSL

+ SMTPSTARTTLS

mỗi script phải thực hiện được đầy đủ các hành động người dùng gồm: kết nối đến máy chủ dịch vụ, đăng nhập, truy cập hòm thƣ hoặc gửi thƣ mới, kết quả trả về là thông tin lỗi hoặc một thông số cuối cùng nào đó cho thấy việc mô phỏng đã thành công.

Dưới đây lần lượt trình bày chi tiết tính năng, tham số đầu vào, đầu ra và phương pháp xây dựng các module này.

a, Bảng danh sách các script mã nguồn

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

35

Chức năng Thông số đầu vào Kết quả đầu ra Tên script thực hiện Tự động tải về bộ cài Zabbix

agent, các script mô phỏng, hỏi thông tin người dùng, cài đặt và cấu hình Zabbix agent để sử dụng các script mô phỏng này

Các thông tin về tác tử người sử dụng (địa chỉ MAC, tên người quản lý, số điện thoại, email liên hệ)

- Cài đặt Zabbix Agent vào máy cá nhân

- Tạo file AgentInfo.txt chứa thông tin tác tử.

- Tải, sao chép các script mô phỏng vào thƣ mục /home/zabbix

- Cấu hình Zabbix Agent để sử dụng các script mô phỏng, script đọc thông tin tác tử.

install_zabbix_ag entd.sh

Đọc thông tin tác tử từ file AgentInfo.txt

Tên trường thông tin cần đọc (Ví dụ: mac_addr, Owner, Phone,..)

Giá trị của trường thông tin getInfo.py

Kết nối tới IMAP server, đăng nhập và kiểm tra tổng số Email hoặc dung lƣợng sử

- IP IMAP server - Cổng dịch vụ IMAP - Username

- Nếu IMAP hoạt động bình thường, kết quả là tổng số thư có trong hòm thƣ, nếu không trả về

imapCheck.py

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

36 dụng/tối đa của tài khoản - Mật khẩu

- Giao thức kết nối. Gán cho giá trị 1 để dùng IMAP thông thường, 2 cho IMAPSSL

- Có chạy chế độ kiểm tra dung lƣợng hay không, gán cho giá trị 0 để không kiểm tra, khác không để kiểm tra

thông tin lỗi.

- Nếu hoạt động ở chế độ kiểm tra dung lƣợng, kết quả là dung lƣợng đã sử dụng/dung lƣợng cho phép, hoặc “unlimited” nếu không giới hạn

Kết nối tới POP3 server, đăng nhập và lấy về tổng số Email

- IP POP3 server - Cổng dịch vụ POP3 - Username

- Mật khẩu

Nếu POP3 hoạt động bình thường, trả về tổng số thƣ có trong hòm thƣ, nếu không trả về thông tin lỗi

pop3check.py

Kết nối tới POP3SSL server, đăng nhập và lấy về tổng số Email

- IP POP3 server - Cổng dịch vụ POP3 - Username

- Mật khẩu

Nếu POP3SSL hoạt động bình thường, trả về tổng số thư có trong hòm thƣ, nếu không trả về thông tin lỗi

pop3_SSLcheck.p y

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

37 Kết nối tới máy chủ SMTP,

đăng nhập và gửi thƣ, gửi xong đợi 10 giây, đăng nhập vào hòm thƣ đích bằng

IMAPnonSSL hoặc

IMAPSSL, kiểm tra xem có nhận đƣợc thƣ mới không

- IP máy chủ SMTP - Cổng dịch vụ SMTP - Username tài khoản gửi - Mật khẩu tài khoản gửi - Giao thức kết nối

SMTP, gán cho 0 nếu chạy SMTP thường, 1 nếu SMTPSSL, giá trị bất kỳ khác 0, 1 nếu chạy SMTPSTARTTLS - IP máy chủ IMAP - Cổng dịch vụ IMAP - Username tài khoản

nhận

- Mật khẩu tài khoản nhận

Nếu SMTP hoạt động bình thường, thư gửi thành công thì kết quả trả về là số thứ tự của thƣ đó trong hòm thƣ.

Nếu SMTP có lỗi, trả về thông tin lỗi của SMTP

Nếu SMTP hoạt động bình thường, IMAP lỗi, trả về lỗi khi truy cập IMAP

Nếu SMTP hoạt động bình thường, IMAP hoạt động bình thường nhưng vì lý do nào đó không nhận đƣợc thƣ, trả về

“Failed!”

smtp_IMAPnonS SL_check.py smtp_IMAPSSL_

check.py

Kết nối tới máy chủ SMTP, - IP máy chủ SMTP Nếu SMTP hoạt động bình smtp_POP3nonS

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

38 đăng nhập và gửi thƣ, gửi

xong đợi 10 giây, đăng nhập vào hòm thƣ đích bằng POP3nonSSL hoặc POP3SSL, kiểm tra xem có nhận đƣợc thƣ mới không

- Cổng dịch vụ SMTP - Username tài khoản gửi - Mật khẩu tài khoản gửi - Chế độ chạy SMTP, gán

cho 0 nếu chạy SMTP

thường, 1 nếu

SMTPSSL, giá trị bất kỳ khác 0, 1 nếu chạy SMTPSTARTTLS - IP POP3 server - Cổng dịch vụ POP3 - Username tài khoản

nhận

- Mật khẩu tài khoản nhận

thường, thư gửi thành công thì kết quả trả về là số thứ tự của thƣ đó trong hòm thƣ.

Nếu SMTP có lỗi, trả về thông tin lỗi của SMTP

Nếu SMTP hoạt động bình thường, POP3 lỗi, trả về lỗi khi truy cập POP3

Nếu SMTP hoạt động bình thường, POP3 hoạt động bình thường nhưng vì lý do nào đó không nhận đƣợc thƣ, trả về

“Failed!”

SL_check.py smtp_POP3SSL_

check.py

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

39

b, Xây dựng module cài đặt và thu thập thông tin tác tử

Module này gồm 2 thành phần: một chương trình cài đặt tự động tác tử, hỏi và lưu lại thông tin người dùng ra một file dữ liệu riêng, và một script đọc file dữ liệu này gửi về cho máy chủ Zabbix.

- Lập trình chương trình cài đặt tự động tác tử (install_zabbix_agentd.sh):

Sử dụng bash shell, thực hiện lần lƣợt các câu lệnh phù hợp để tự động tải, cài đặt và cấu hình Zabbix agent.

Để cấu hình Zabbix agent, ta sử dụng một file cấu hình mẫu, danh sách các Userparameter và các thông số đƣợc tinh chỉnh trong file cấu hình này nhƣ sau:

+ Tăng thời gian trễ khi thu thập thông tin lên 30 giây:

Timeout=30

+ Thêm các Userparameter để thu thập thông tin agent (Userparameter là một khái niệm trong Zabbix, dùng để chỉ những tham số mà người dùng tự phát triển. Cấu trúc khai báo một Userparameter là: UserParameter=<key>,<shell command>; trong đó:

“UserParameter” là từ khóa khai báo, <key> là tên tham số mới, <shell command> là câu lệnh để thu thập thông tin). Các UserParameter đƣợc thêm mới là:

## UserParameter dung cho kiem tra dich vu ##

UserParameter=imapCheck[*],/home/zabbix/imapCheck.py $1 $2 $3 $4 $5 $6 UserParameter=smtp_IMAPnonSSL_check[*],/home/zabbix/smtp_IMAPnonSSL_c heck.py $1 $2 $3 $4 $5 $6 $7 $8 $9

UserParameter=smtp_IMAPSSL_check[*],/home/zabbix/smtp_IMAPSSL_check.py

$1 $2 $3 $4 $5 $6 $7 $8 $9

UserParameter=pop3check[*],/home/zabbix/pop3check.py $1 $2 $3 $4

UserParameter=pop3_SSLcheck[*],/home/zabbix/pop3_SSLcheck.py $1 $2 $3 $4 UserParameter=smtp_POP3nonSSL_check[*],/home/zabbix/smtp_POP3nonSSL_c heck.py $1 $2 $3 $4 $5 $6 $7 $8 $9

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

40

UserParameter=smtp_POP3SSL_check[*],/home/zabbix/smtp_POP3SSL_check.py

$1 $2 $3 $4 $5 $6 $7 $8 $9

## UserParameter dung cho thu thap thong tin tac tu ##

UserParameter=getInfo[*],/home/zabbix/getInfo.py $1

Sau khi cài đặt và cấu hình Zabbix agent, lần lượt hỏi người dùng thông tin và ghi lại vào file /home/zabbix/AgentInfo.txt. Nội dung file này có định dạng nhƣ sau:

owner:Luong Minh Tuan - System Administrator Phone:0915130933

Email:luongminhtuan208@gmail.com MAC_addr:00:50:56:91:88:04

Position:VNPT-Vinaphone Lab Cloud Other:11th Floor, rack 1

trong đó: mỗi dòng là một cặp từ_khóa:giá_trị, dựa vào các từ khóa này để đọc thông tin tìm kiếm và ghi nhận dữ liệu để chuyển về máy chủ.

- Lập trình script đọc thông tin tác tử (getInfo.py):

+ Đầu vào: từ khóa tìm kiếm thông tin, phải là một trong các từ khóa sau: owner, Phone, Email, MAC_addr, Position, Other.

+ Đầu ra: thông tin tác tử ứng với các từ khóa khác nhau

+ Lập trình đọc lần lƣợt từng dòng file /home/zabbix/AgentInfo.txt, dừng lại khi thấy từ khóa đƣợc cung cấp, đọc và trả về giá trị sau từ khóa. Đoạn mã thực hiện công việc trên:

with open("/home/zabbix/AgentInfo.txt") as f:

for line in f:

name, var = line.partition(":")[::2]

if name == param:

print var.replace('\n', '')

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

41

c, Lập trình các module mô phỏng hành động người dùng

Các module này đều đƣợc lập trình bằng ngôn ngữ python, ở đây chỉ trình bày ví dụ về module smtp_POP3nonSSL_check, các module khác xây dựng tương tự.

Module kiểm tra dịch vụ SMTP bằng cách kết nối đến máy chủ SMTP, gửi một thƣ có nội dung đặc biệt, sau đó kết nối đến máy chủ POP3 của hòm thƣ đích, tìm kiếm xem thƣ kiểm tra đã nhận đƣợc hay chƣa.

Module thực hiện 2 bước:

- Kết nối đến máy chủ SMTP, giao thức có thể là SMTP non SSL, SMTP SSL hoặc SMTP STARTTLS, đăng nhập và gửi thƣ đến địa chỉ đích.

- Kết nối đến máy chủ hòm thƣ đích, giao thức là POP3, truy vấn thông tin hòm thƣ và kiểm tra xem đã nhận đƣợc thƣ vừa gửi chƣa, để việc tìm kiếm đƣợc chính xác, ở bước trên ta đã đặt chủ đề (subject) thư kiểm tra theo một dạng đặc biệt, cụ thể là: tên_agent + “ ” + ngày_giờ_gửi (ví dụ: thƣ gửi từ agent1, vào lúc 11:07, ngày 4/20/2015 sẽ có subject là: “zabbix-client1 04/10/2015 11:07”).

Đầu vào của module là các tham số:

- Thông tin kết nối SMTP gồm: IP máy chủ SMTP, cổng dịch vụ, username/password đăng nhập hòm thƣ gửi, giao thức kết nối.

- Thông tin kết nối POP3 của hòm thƣ đích gồm: IP máy chủ POP3, cổng dịch vụ, username/password đăng nhập hòm thƣ đích.

Sử dụng thƣ viên smtplib của python, kết nối tới máy chủ và đăng nhập bằng các hàm:

smtp = smtplib.SMTP(smtp_host, smtp_port) smtp.ehlo()

smtp.login(smtp_user, smtp_pass)

hoặc:

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

42

smtp = smtplib.SMTP_SSL(smtp_host, smtp_port) smtp.ehlo()

smtp.login(smtp_user, smtp_pass)

Nếu sử dụng SMTPSTARTTLS, cần có thêm phần kích hoạt mã hóa TLS:

smtp = smtplib.SMTP(smtp_host, smtp_port) smtp.ehlo()

smtp.starttls() smtp.ehlo()

smtp.login(smtp_user, smtp_pass)

Sau khi đăng nhập, tạo nội dung cho thƣ gửi, và gửi đi bằng các hàm sau:

header = 'To:' + pop3_user + '\n' + 'From: ' + smtp_user + '\n' + 'Subject:' + title + '\n'

msg = header + '\n this is test msg from soledad \n\n' smtp.sendmail(smtp_user, pop3_user, msg)

Sau khi gửi thành công, tạm dừng chương trình trong 10 giây để thư gửi đến đích, sau đó kết nối đến máy chủ POP3 nhƣ sau:

pop3_mail = poplib.POP3(pop3_host, pop3_port)

Đăng nhập tài khoản POP3, riêng với Gmail, ta phải thêm từ khóa recent trước username để duyệt thƣ mới nhất.

if "gmail.com" in pop3_user:

pop3_mail.user("recent:" + pop3_user) else:

pop3_mail.user(pop3_user)

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

43 pop3_mail.pass_(pop3_pass)

Tìm kiếm thƣ vừa gửi, nếu không thấy trả về “Failed!”:

for mList in range(numMessages - 4, numMessages) : for msg in pop3_mail.retr(mList + 1)[1]:

if title in msg:

found = True

print 'OK! message found: %s' % mList break

if found:

break if not found:

print 'Failed!'

Bắt tất cả các ngoại lệ (exception), đây là các thông tin lỗi, và trả về để quản trị viên phân tích. Ngoại lệ khi thực hiện gửi thƣ bắt bằng khối “try-except” sau:

try:

except Exception as e:

print "SMTP ERROR:"

print e sys.exit() với POP3 là khối:

try:

except Exception as e:

Quản trị mạng hướng người sử dụng: mô hình sử dụng tác tử người sử dụng

44 print "POP3 ERROR:"

print e

Sau khi xây dựng mã nguồn các module, ta thực hiện triển khai hệ thống thử nghiệm

Một phần của tài liệu Quản trị mạng hướng người sử dụng mô hình sử dụng tác tử người sử dụng (Trang 33 - 44)

Tải bản đầy đủ (PDF)

(78 trang)