Thứ hai, 18/08/2014 | 00:00 GMT+7

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à MD5 hoặc SHA . Đ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à DES hoặc AES . Đ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ó priv sau 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ó priv sau 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.conf dị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.


Tags:

Các tin liên quan

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 cấu hình Lãnh sự trong Môi trường Sản xuất trên Ubuntu 14.04
2014-08-15
Cách bảo mật lãnh sự bằng mã hóa TLS 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