Simple Network Management Protocol (SNMP) dùng để lấy thông tin trạng thái hiện tại của máy chủ, thiết bị mạng, máy in hoặc thiết bị IP khác. Bạn có thể lấy các metric khác nhau qua SNMP: sử dụng CPU, số tiến trình, trạng thái dịch vụ, v.v. Lợi thế chính của SNMP là được hỗ trợ bởi hầu hết thiết bị và không yêu cầu cài agent hệ thống giám sát riêng. Trong bài này, chúng tôi sẽ chỉ cách cài đặt và cấu hình SNMP agent (và SNMP v3) trên máy chủ Linux chạy CentOS, RHEL, hoặc Fedora.
Cài đặt SNMP Agent và công cụ chẩn đoán trên Linux
Trước khi cài gói SNMP, cài bản cập nhật mới nhất trên máy chủ dùng dnf (yum):
# dnf update -y
Sau đó cài SNMP agent và công cụ bổ sung từ kho cơ bản:
# dnf install net-snmp net-snmp-utils -y

Cách bật và cấu hình SNMP Agent trên Linux?
Trước cấu hình SNMP, tạo bản sao file config gốc:
# mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
Sau đó chỉnh sửa cài đặt SNMP agent:
# nano /etc/snmp/snmpd.conf
Thêm các dòng sau:
rocommunity public syslocation GE-DC2 syscontact gedc2-admins@woshub.com
Đây là ba tham số SNMP cơ bản. Có nhiều tùy chọn khác cho cấu hình Net-SNMP agent, nhưng chúng ta không thể bao quát tất cả trong một bài.
Lưu file (khuyến nghị nhập vị trí chính xác và email hợp lệ). Sau đó bật dịch vụ snmpd và khởi động:
# systemctl enable snmpd.service
# systemctl start snmpd
Đảm bảo dịch vụ đang chạy:
# systemctl status snmpd

Nếu bạn dùng tường lửa trên máy chủ, cho phép kết nối đến cổng TCP/UDP 161 và 162. Dùng lệnh sau mở cổng SNMP trong firewalld:
# firewall-cmd --zone=public --add-port=161/udp --permanent
# firewall-cmd --zone=public --add-port=161/tcp --permanent
# firewall-cmd --zone=public --add-port=162/udp --permanent
# firewall-cmd --zone=public --add-port=162/tcp --permanent
# firewall-cmd --reload
Truy vấn SNMP Agent bằng Snmpwalk
Bạn có thể truy vấn SNMP agent dùng công cụ snmpwalk. Để kiểm tra dịch vụ cục bộ bằng giao thức SNMPv2, dùng lệnh:
# snmpwalk -v 2c -c public -O e 127.0.0.1
Nếu SNMP cấu hình đúng, bạn sẽ nhận tập dữ liệu SNMP từ agent.
Sau khi đặt file cấu hình và chạy lệnh test, tôi nhận lỗi:
Timeout: No Response from localhost
Tôi khắc phục bằng cách xóa file cấu hình và chỉ thêm các dòng tôi chỉ định. Nếu cần cài đặt cụ thể, kiểm tra kỹ, vì dịch vụ khởi động không vấn đề, nhưng không hoạt động.
Bạn cũng có thể truy vấn máy chủ cục bộ bằng lệnh:
# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux server1.test.com 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (106564) 0:17:45.64 SNMPv2-MIB::sysContact.0 = STRING: gedc2-admins@woshub.com SNMPv2-MIB::sysName.0 = STRING: server1.test.com SNMPv2-MIB::sysLocation.0 = STRING: GE-DC2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::sysORUpTime.9 = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::sysORUpTime.10 = Timeticks: (0) 0:00:00.00
Sau đó đảm bảo SNMP agent khả dụng từ xa. Chạy lệnh trên máy khác (cài snmp tools trước):
# snmpwalk -v2c -c public 192.168.21.205 system

Như bạn thấy, máy chủ từ xa nhận thông tin từ server qua SNMP. Bây giờ bạn có thể thêm máy chủ vào bất kỳ hệ thống giám sát SNMP nào (như Zabbix hoặc Cacti).
Xem bài "How to configure SNMP on a VMWare ESXi host?".
Cấu hình SNMPv3 trên Linux CentOS/RHEL/Fedora
Đầu bài chúng ta đã chỉ cách cấu hình SNMP agent dùng SNMP v1 và v2. SNMPv3 là phiên bản mới và an toàn hơn với hỗ trợ xác thực và mã hóa. Để cấu hình SNMPv3, tạo user với mật khẩu, đặt mật khẩu mã hóa, quyền truy cập và thuật toán mã hóa (MD5 hoặc SHA).
Để tạo user cho SNMPv3, dừng daemon snmpd:
# systemctl stop snmpd
Sau đó tạo user:
# net-snmp-create-v3-user -ro -A o2ps2w0dD -a SHA -X r30svV33 -x AES snmpuser
Cú pháp net-snmp-create-v3-user:
net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username]
- -ro — nghĩa là user chỉ có quyền đọc
- Authpass — mật khẩu xác thực
- Privpass — khóa riêng
Sau chạy lệnh, user với mật khẩu và khóa chỉ định sẽ tạo:

Khởi động dịch vụ:
# systemctl start snmpd
Thử truy vấn SNMP agent bằng snmpwalk. Lưu ý để truy vấn qua SNMPv3, phải chỉ định tên user, mật khẩu và khóa.
# snmpwalk -v3 -a SHA -A o2ps2w0dD -x AES -X r30svV33 -l authPriv -u snmpuser 192.168.21.205 | head