Cách cài đặt và cấu hình một Daemon và Ứng dụng khách SNMP trên Ubuntu 14.04
Một phần lớn của việc trở thành administrator hệ thống là thu thập thông tin chính xác về server và cơ sở hạ tầng của bạn. Có một số công cụ và tùy chọn để thu thập và xử lý loại thông tin này. Nhiều người trong số họ được xây dựng dựa trên một công nghệ gọi là SNMP .SNMP là viết tắt của giao thức quản lý mạng đơn giản. Đây là một cách mà các server có thể chia sẻ thông tin về trạng thái hiện tại của chúng và cũng là một kênh mà qua đó administrator có thể sửa đổi các giá trị được định nghĩa . Mặc dù bản thân giao thức rất đơn giản, nhưng cấu trúc của các chương trình thực hiện SNMP có thể rất phức tạp.
Trong hướng dẫn cuối cùng của ta , ta đã tìm hiểu về những điều cơ bản của giao thức SNMP . Trong hướng dẫn này, ta sẽ bắt đầu trình bày cách cài đặt các công cụ để giao tiếp bằng SNMP. Ta sẽ sử dụng hai server Ubuntu 14.04 để chứng minh, nhưng hầu hết các hệ thống khác sẽ có thể làm theo cùng với một số sửa đổi.
Cài đặt SNMP Daemon và Tiện ích
Ta có thể bắt đầu khám phá cách SNMP có thể được triển khai trên hệ thống bằng cách cài đặt daemon và các công cụ trên một số hệ thống Ubuntu.
Ta sẽ sử dụng hai server , một server sẽ chứa phần quản lý, trong khi server kia sẽ có tác nhân. Ta cũng có thể chọn cài đặt tác nhân trên máy người quản lý, nhưng việc giữ chúng riêng biệt giúp dễ dàng chứng minh chức năng nào được cung cấp bởi mỗi thành phần.
 Trên  server  đầu tiên, cập nhật database  apt và cài đặt thành phần trình quản lý. Cùng với điều này,  ta  cũng sẽ  download  một gói khác có tên snmp-mibs-downloader chứa một số thông tin độc quyền về MIB tiêu chuẩn cho phép  ta  truy cập hầu hết cây MIB theo tên:
sudo apt-get update sudo apt-get install snmp snmp-mibs-downloader Trên server thứ hai của ta , server mà ta sẽ tương tác sẽ chạy daemon, ta có thể cài đặt các thành phần cần thiết bằng lệnh :
sudo apt-get update sudo apt-get install snmpd Đến đây bạn đã cài đặt các thành phần này, ta cần cấu hình cài đặt của bạn .
Cấu hình Trình quản lý SNMP
Như ta đã đề cập ở trên, phần lớn công việc xảy ra trong thành phần tác nhân, vì vậy cấu hình của ta thực sự khá dễ dàng trên máy này. Ta chỉ cần sửa đổi một file đảm bảo rằng khách hàng của ta có thể sử dụng dữ liệu MIB bổ sung mà ta đã cài đặt.
 Mở file  /etc/snmp/snmp.conf trong editor  của bạn với các  quyền  sudo:
sudo nano /etc/snmp/snmp.conf Trong file  này, có một vài  comment  và một dòng chưa  comment . Để cho phép người quản lý nhập các file  MIB,  ta  chỉ cần  comment  về mibs : line:
#mibs : Lưu file khi bạn hoàn tất.
Bây giờ ta đã hoàn tất cấu hình phần trình quản lý, nhưng ta vẫn cần sử dụng server này để giúp ta cấu hình máy tính tác nhân của bạn .
Cấu hình Máy tác nhân SNMP
Là một hệ thống client - server thực sự, máy tính tác nhân không có bất kỳ công cụ bên ngoài nào cần thiết để cấu hình cài đặt SNMP của riêng nó. Ta có thể sửa đổi một số file cấu hình để thực hiện một số thay đổi, nhưng hầu hết các thay đổi ta cần thực hiện sẽ được thực hiện bằng cách kết nối với server đại lý từ server quản lý của ta .
Để bắt đầu, trên máy tính đại lý của ta , ta cần mở file cấu hình của daemon với các quyền sudo:
sudo nano /etc/snmp/snmpd.conf Bên trong, ta sẽ phải thực hiện một vài thay đổi. Chúng chủ yếu sẽ được sử dụng để khởi động cấu hình của ta để ta có thể quản lý nó từ server khác của ta .
 Đầu tiên,  ta  cần thay đổi chỉ thị agentAddress . Hiện tại, nó được  cài đặt  để chỉ cho phép các kết nối bắt nguồn từ máy tính local .  Ta  cần  comment  dòng hiện tại và bỏ  comment  bên dưới, cho phép tất cả các kết nối ( ta  sẽ sớm khóa dòng này):
#  Listen for connections from the local system only #agentAddress  udp:127.0.0.1:161 #  Listen for connections on all interfaces (both IPv4 *and* IPv6) agentAddress udp:161,udp6:[::1]:161 Tiếp theo,  ta   cần  chèn tạm thời một dòng createUser . Các chỉ thị này thường không được lưu trong file  này, nhưng  ta  sẽ xóa lại trong giây lát, vì vậy nó không quá quan trọng.
  User  mà  ta  đang tạo sẽ được gọi là bootstrap và sẽ được sử dụng làm mẫu để tạo  user  “thực” đầu tiên của  ta . Các gói SNMP thực hiện điều này thông qua một quá trình sao chép các thuộc tính của  user .
Khi xác định user mới, bạn phải chỉ định loại xác thực (MD5 hoặc SHA) cũng như cung cấp passphrase (password bảo vệ) phải có ít nhất 8 ký tự. Nếu bạn dự định sử dụng mã hóa để truyền, giống như ta , bạn cũng phải chỉ định giao thức bảo mật (DES hoặc AES) và tùy chọn là passphrase (password bảo vệ) giao thức bảo mật. Nếu không có passphrase (password bảo vệ) giao thức bảo mật nào được cung cấp, thì passphrase (password bảo vệ) xác thực cũng sẽ được sử dụng cho giao thức bảo mật.
Dòng tạo user của ta sẽ giống như sau:
createUser bootstrap MD5 temp_password DES Bây giờ  ta  đã chỉ định một  user  mới,  ta  cần  cài đặt  cấp độ truy cập mà  user  này sẽ có.  Ta  sẽ  cài đặt  điều này cho  user  bootstrap của  ta  và cũng cho  user  mới mà  ta  sẽ tạo, được gọi là demo .  Ta  sẽ cho phép họ truy cập đọc và ghi bằng cách sử dụng lệnh rwuser (giải pháp thay thế là rouser cho quyền truy cập chỉ đọc).
  Ta  sẽ thực thi việc sử dụng mã hóa bằng cách chỉ định priv sau  user  của  ta . Nếu  ta  muốn giới hạn  user  ở một phần cụ thể của MIB,  ta  có thể chỉ định OID cấp cao nhất mà  user  phải có quyền truy cập ở cuối dòng.
Đối với mục đích của ta , cả hai dòng của ta sẽ khá đơn giản:
rwuser bootstrap priv rwuser demo priv Khi bạn thực hiện xong những thay đổi này, hãy lưu file .
 Để thực hiện những thay đổi này, hãy khởi động lại dịch vụ snmpd :
sudo service snmpd restart Bây giờ, từ máy bạn đã cài đặt phần mềm quản lý, ta có thể kết nối với server đại lý của ta để tạo regular user của ta .
  Ta  sẽ thực hiện việc này bằng cách sử dụng công cụ snmpusm , được sử dụng để quản lý  user . Bạn  cần  biết địa chỉ IP của  server  đại lý  của bạn  để nó hoạt động chính xác.
Trước khi bắt đầu, ta sẽ nói một chút về cấu trúc chung của việc gửi lệnh SNMP.
Cấu trúc chung của các lệnh SNMP
 Khi sử dụng bộ công cụ có trong gói snmp (bộ phần mềm net-snmp ), bạn sẽ nhận thấy một vài mẫu trong cách bạn phải gọi các lệnh.
Điều đầu tiên bạn phải làm là xác thực với daemon SNMP mà bạn muốn giao tiếp. Điều này thường liên quan đến việc cung cấp khá nhiều thông tin. Những cái phổ biến dưới đây:
- -v PHIÊN BẢN : Cờ này được sử dụng để chỉ định version của giao thức SNMP mà bạn muốn sử dụng. Ta sẽ sử dụng v3 trong hướng dẫn này.
- -c CỘNG ĐỒNG : Cờ này được sử dụng nếu bạn đang sử dụng chuỗi cộng đồng kiểu SNMP v1 hoặc v2 để xác thực. Vì ta đang sử dụng xác thực dựa trên user kiểu v3, ta sẽ không cần điều này.
- -u USER-NAME : Tham số này được sử dụng để chỉ định tên user mà bạn muốn xác thực. Để đọc hoặc sửa đổi bất kỳ thứ gì bằng SNMP, bạn phải xác thực bằng tên user đã biết.
-  -l LEVEL : Điều này được sử dụng để chỉ định mức độ bảo mật mà bạn đang kết nối. Các giá trị có thể có là noAuthNoPrivđể không xác thực và không mã hóa,authNoPrivđể xác thực nhưng không mã hóa vàauthPrivđể xác thực và mã hóa. Tên user mà bạn đang sử dụng phải được cấu hình để hoạt động ở level độ bảo mật mà bạn chỉ định, nếu không việc xác thực sẽ không thành công.
-  -a PROTOCOL : Tham số này được sử dụng để chỉ định giao thức xác thực được sử dụng. Các giá trị có thể là MD5hoặcSHA. Điều này phải trùng với thông tin đã được chỉ định khi user được tạo.
-  -x PROTOCOL : Tham số này được sử dụng để chỉ định giao thức mã hóa được sử dụng. Các giá trị có thể là DEShoặcAES. Điều này phải trùng với thông tin đã được chỉ định khi user được tạo. Điều này là cần thiết khi nào đặc tả quyền của user cóprivsau nó, làm cho mã hóa bắt buộc.
- -A PASSPHRASE : Cái này được sử dụng để cung cấp cho passphrase (password bảo vệ) xác thực được chỉ định khi user được tạo.
-  -X PASSPHRASE : Đây là  passphrase (password bảo vệ)   mã hóa được chỉ định khi  user  được tạo. Nếu không có gì được chỉ định nhưng một thuật toán mã hóa đã được đưa ra, thì  passphrase (password bảo vệ)   xác thực sẽ được sử dụng. Điều này là bắt buộc khi tham số -xđược cung cấp hoặc khi nào đặc tả quyền của user cóprivsau nó, yêu cầu mã hóa.
Sử dụng thông tin này, ta có thể bắt đầu xây dựng các lệnh của bạn . Với cách ta cài đặt user bootstrap của bạn , các lệnh ta sẽ sử dụng với account đó sẽ giống như sau:
snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options Ví dụ: từ server quản lý của bạn , bạn có thể kiểm tra đảm bảo rằng account bootstrap của bạn có sẵn bằng lệnh :
snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host 1.3.6.1.2.1.1.1.0 SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 Chuỗi 1.3.6.1.2.1.1.1.0 là OID chịu trách nhiệm hiển thị thông tin hệ thống. Về cơ bản, nó sẽ trả về kết quả  kết quả  của uname -a trên hệ thống từ xa.
Bây giờ ta đã xác minh ta có thể xác thực chính xác server chạy daemon SNMP, ta có thể tiếp tục tạo account regular user của bạn .
Cài đặt account regular user
 Mặc dù  ta  đã chỉ định các  quyền  cho account   user  demo trong file  snmpd.conf của snmpd.conf , nhưng  ta  thực sự chưa tạo  user  này.  Ta  sẽ sử dụng  user  bootstrap làm mẫu cho  user  mới của  ta .
 Trên  server  quản lý,  ta  có thể tạo  user  từ mẫu bằng công cụ snmpusm và cú pháp chung sau:
snmpusm authentication_info remote_host create new_user existing_user Vì vậy, bằng cách sử dụng những gì  ta  biết về cờ xác thực mà  ta  cần chuyển và tận dụng account   user  mà  ta  đã có ( bootstrap ),  ta  có thể tạo  user  phù hợp với  quyền   user  mà  ta  đã xác định ( demo ).
Lệnh sẽ giống như sau:
snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host create demo bootstrap Bạn sẽ nhận được thông báo sau:
User successfully created. Bây giờ  ta  có một  user  hoạt động đầy đủ được gọi là demo trên  server  từ xa của  ta . Tuy nhiên, nó vẫn đang sử dụng thông tin xác thực giống như account  bootstrap .  Ta  nên thay đổi password  thành một thứ khác. Lần này,  ta  sẽ sử dụng account  demo để xác thực.  Lưu ý  password  phải dài ít nhất 8 ký tự:
snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host passwd temp_password my_new_password Bạn sẽ nhận được thông báo sau:
SNMPv3 Key(s) successfully changed.  Ta  có thể kiểm tra thông tin đăng nhập và password  mới  của bạn  bằng cách hỏi  server  từ xa của  ta  dịch vụ SNMP đã chạy trong bao lâu.  Ta  sẽ sử dụng lệnh snmpget để lấy một giá trị duy nhất từ máy khác.
Lần này, ta sẽ tận dụng các định nghĩa MIB bổ sung mà ta đã download . Ta có thể sử dụng những thứ này để yêu cầu giá trị theo tên thay vì ID số OID.
snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0 Bạn sẽ nhận lại một giá trị đại diện cho lần cuối cùng khởi động lại daemon SNMP từ xa:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18 Tạo file cấu hình client
Bạn có thể nhận thấy rằng chi tiết xác thực cho tất cả các lệnh SNMP của bạn sẽ khá tĩnh với mỗi yêu cầu. Thay vì nhập chúng mỗi lần, ta có thể tạo file cấu hình phía client chứa thông tin đăng nhập mà ta đang kết nối.
Tệp cấu hình client có thể được đặt ở hai vị trí khác nhau tùy thuộc vào mức độ phổ biến rộng rãi mà bạn muốn chia sẻ.
 Nếu bạn muốn chia sẻ thông tin đăng nhập  của bạn  với bất kỳ  user  hợp lệ nào trên máy quản lý  của bạn , bạn có thể đặt chi tiết cấu hình  của bạn  vào file  snmp.conf . Bạn  cần  mở file  đó với các  quyền  sudo:
sudo nano /etc/snmp/snmp.conf Tuy nhiên, nếu bạn muốn xác định thông tin xác thực cho riêng  user   của bạn , bạn có thể tạo một folder  .snmp ẩn trong folder  chính của  user  và tạo file  ở đó:
mkdir ~/.snmp cd ~/.snmp nano snmp.conf Dù quyết định của bạn về vị trí đặt cấu hình, nội dung sẽ giống nhau.
 Các lệnh mà  ta  đang sử dụng để xác thực có trong bảng dưới đây. Trong cột bên phải, bạn có thể thấy tên chỉ thị sẽ được sử dụng để đặt các chi tiết cấu hình đó trong file  snmp.conf :
| Cờ lệnh | Sự miêu tả | Chỉ thị snmp.confdịch | 
|---|---|---|
| -u USERNAME | Tên user SNMPv3 để xác thực là. | defSecurityName USERNAME | 
| -l authPriv | Mức độ bảo mật để xác thực. | defSecurityLevel authPriv | 
| -a MD5 | Giao thức xác thực để sử dụng. | defAuthType MD5 | 
| -x DES | Giao thức bảo mật (mã hóa) để sử dụng. | defPrivType DES | 
| -A PASSPHRASE | Passphrase (password bảo vệ) xác thực cho tên user được cung cấp. | defAuthPassphrase PASSPHRASE | 
| -X PASSPHRASE | Passphrase (password bảo vệ) bảo mật cho tên user được cung cấp. | defPrivPassphrase PASSPHRASE | 
 Sử dụng thông tin này, bạn có thể tạo một file  snmp.conf thích hợp. Đối với hướng dẫn của  ta , nó sẽ giống như sau:
defSecurityName demo defSecurityLevel authPriv defAuthType MD5 defPrivType DES defAuthPassphrase my_new_password defPrivPassphrase my_new_password Khi bạn hoàn tất, hãy lưu file .
Bây giờ, bạn có thể ra lệnh mà không cần cung cấp chi tiết xác thực. Bạn sẽ chỉ cần lệnh SNMP, server lưu trữ và các đối số lệnh.
Thay vì gõ:
snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0 Ta chỉ cần gõ:
snmpget remote_host sysUpTime.0 Như bạn thấy , điều này làm giảm đáng kể lượng thông tin ta cần cung cấp trong mỗi yêu cầu.
Xóa account Bootstrap
 Bây giờ account  thông thường của bạn đã được  cấu hình  chính xác,  ta  có thể xóa account  bootstrap , vì nó khá không an toàn.
 Trên  server  tác nhân của bạn, hãy mở lại file  /etc/snmp/snmpd.conf với các  quyền  sudo.
 Tìm và  comment  (hoặc loại bỏ) cả hai dòng mà  ta  đã thêm trước đó tham chiếu đến  user  bootstrap :
#createUser bootstrap MD5 temp_password DES #rwuser bootstrap priv Lưu và đóng file .
Bây giờ, khởi động lại daemon SNMP:
sudo service snmpd restart Điều này sẽ đáp ứng khuyến nghị không có chỉ thị createUser trong file  snmpd.conf bình thường. Nó cũng sẽ xóa các  quyền  khỏi  user  tạm thời đó.
 Nếu bạn muốn xóa hoàn toàn  user  bootstrap khỏi usmUserTable, bạn có thể thực hiện bằng cách đưa ra lệnh này từ  server  quản lý:
snmpusm remote_host delete bootstrap Bạn sẽ nhận được phản hồi sau:
User successfully deleted. Kết luận
Đến đây, bạn nên có một cài đặt client - server được cấu hình đầy đủ để có thể giao tiếp an toàn bằng giao thức SNMP. Bạn có thể dễ dàng thêm các daemon bổ sung trên các server khác và cấu hình quyền truy cập account trên toàn bộ cơ sở hạ tầng của bạn .
Trong hướng dẫn tiếp theo, ta sẽ xem xét một số cách sử dụng cơ bản của các công cụ net-snmp mà ta đang làm việc. Ta sẽ trình bày cách truy xuất từng giá trị một hoặc hàng loạt và cách sửa đổi dữ liệu.
Các tin liên quan
Cách bảo mật lãnh sự bằng mã hóa TLS trên Ubuntu 14.042014-08-15
Cách cấu hình Lãnh sự trong Môi trường Sản xuất trên Ubuntu 14.04
2014-08-15
Giới thiệu về cách sử dụng Consul, Hệ thống khám phá dịch vụ, trên Ubuntu 14.04
2014-08-15
Cách tạo một cụm RethinkDB được chia nhỏ trên Ubuntu 14.04
2014-08-08
Cách cấu hình Varnish Cache 4.0 với SSL Termination trên Ubuntu 14.04
2014-08-07
Giới thiệu về Ganglia trên Ubuntu 14.04
2014-08-05
Cách thực hiện chấm dứt SSL với HAProxy trên Ubuntu 14.04
2014-07-10
Cách sử dụng WP Super Cache và Jetpack Photon để tối ưu hóa hiệu suất WordPress trên Ubuntu 14.04
2014-06-27
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 14.04
2014-06-18
Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
2014-06-17
 

