Wednesday, November 15, 2006

Nagios + check_by_ssh + public key authentication

Серверрүү логин хийж ороод дотор нь ажиллаж байгаа процессуудыг хянадаг, эсвэл дискний зай дуусаж байгааг хэлдэг тийм хянагч/monitoring програм байдаг болоосой гэж админууд маань бодож явдаг байх, эсвэл өөрөө тийм скрипт бичихийг оролдож байсан ч байх. Тэгвэл та бүхэн Nagios-н "check_by_ssh plugin"-г "public key authentication"-ы хамт туршаад үзээрэй. Хянагч програмуудаас Nagios их зүгээр санагддаг. Тухайн хоструу 5 минутын зайтайгаар PING тест хийхээс гадна HTTP, MYSQL, DNS, POP, SMTP, FTP зэрэг гадаад портон дээр ажиллаж байгаа үйлчилгээнүүдийг хялбарханаар хянах боломжтой. Ямар нэг асуудал гарсан тохиолдолд мэйлээр Alarm message илгээх боломжтой. Админ мэйл хаягаа MailAlert-тай холбочихвол ч жинхэнэ real-time alert-г хүлээн авах боломжтой болно.


Ажиллах үндсэн зарчим - monitor ажиллах машин(A) дээр nagios-г plugin-уудын хамт суулгасан байна. Хяналт хийх гэж байгаа сервер(B) дээр гаднаас ssh-р "public key authentication" хийж орох эрхтэй user account-г үүсгэн, түүний home directory дотор В машины юуг хянах гэж байгаагаас шалтгаалан хэрэгтэй nagios plugin-г байрлуулсан байна. А машин дээрээс check_by_ssh-н тусламжтайгаар В машинруу логин хийж орон харгалзах plugin-г ажиллуулан үр дүнг "OK, Warming, Critical, Unknown" түвшинүүдээр харуулна.

B машин дээр ажиллах боломжтой nagios plugin-ууд:

check_users
check_load
check_disk
check_procs
...

1. Nagios болон plugin-г суулгах - Nagios-г хэрхэн суулгах талаар маш дэлгэрэнгүй танилцуулга http://www.nagios.org/docs/ байгаа тул энэ хэсгийг алгасав. Plugin-г source tarball-с эсвэл rpm-р суулгах аль аль нь амархан сууна.

RPM-р суулгавал:
/etc/rc.d/init.d/nagios - control script
/usr/bin/ - nagios, nagiostat хоёртын файлууд
/usr/include/nagios/ - үндсэн кодын сан/library
/usr/lib/nagios/cgi - cgi cкриптүүд
/usr/lib/nagios/plugins - nagios plugin-ууд
/etc/nagios - үндсэн тохиргооны файлууд

байрлана.

2. Public Key Authetication - Ийм төрлийн authentication-г ихэвчлэн автоматжсан програмаас серверрүү логин хийж ороход хэрэглэдэг. Учир нь автомажсан програмыг ажиллуулах үед "login prompt" дээр програмыг гацаахгүйн тулд нууц үгийн оронд "public key"(сервер дээр урьдчилж хуулж тавина) ашиглан authentication хийнэ.

2.1 шинэ хэрэглэгч нэмэх - В машин дээр шинэ хэрэглэгч үүсгэхдээ:

# useradd testuser

testuser хэрэглэгчийг үүсгэхдээ нууц үг оноохгүйг анхаарай. "public key" ашиглан логин хийх тул нууц үг оруулах шаардлагагүй. Мөн энэ хэрэглэгчийн хувьд "interactive shell" идэвхжсэн байх ёстойг анхаараарай.

2.2 SSH-н хувьд public key authentication-г идэвхжүүлэх - /etc/ssh/sshd_config дотор дараах тохиргоог хийнэ:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AllowUsers testuser xxx

xxx - оронд ssh-р хандах бусад хэрэглэгчдийн нэрсийг зай аван цуьуулж бичнэ.

2.3 Хос түлхүүрийг үүсгэх - хос түлхүүр үүсгэж нэгийг А машин дээр, нөгөөг В машин дээр байрлуулах ёстой. Хос түлхүүрийг дараах байдалтай үүсгэнэ.

# ssh-keygen -t rsa

PS: Энд RSA-н оронд DSA алгоритмаар кодлож болно.

Энэ командыг өгсний дараа passphrase асуух бөгөөд та passphrase оруулах шаардлагагүй.

PS: passphrase оруулж түлхүүр үүсгэж болно. Энэ тохиолдолд public key authentication хийхийн тулд ssh-agent ажиллуулах хэрэгтэй болно. Асуудал цааш хүндрэх тул энэ талаар сонирхож байгаа бол бусад гарын авлагыг ашиглана уу.


Үр дүнд нь id_rsa, id_rsa.pub гэсэн 2 файл үүснэ. id_rsa файлыг А машин дээр, nagios server-г ажиллуулж буй хэрэглэгчийн (ихэнх тохиолдолд nagios) home directory дотор хуулж тавина.

# cp id_rsa /home/nagios/.ssh/
# chmod 600 /home/nagios/.ssh/id_rsa
# chown root.root /home/nagios/.ssh/id_rsa

Харин id_rsa.pub файлыг В машин дээр testuser хэрэглэгчийн home directory /home/testuser/.ssh/ дотор authorized_keys нэртэйгээр байрлуулах хэрэгтэй.

# cp id_rsa.pub /home/testuser/.ssh/authorized_keys
# chmod 400 /home/testuser/.ssh/authorized_keys
# chown root.root /home/testuser/.ssh/authorized_keys

Аюулгүй байдлыг хангах үүднээс authorized_keys файл дотор, мөрийн эхэнд уг түлхүүр үгийг ашиглан хандах эрхтэй IP хаягуудыг жагсаан бичнэ:

from="10.1.5.23"


3. check_by_ssh plugin-г тохируулах
3.1
Эхлээд check_by_ssh plugin-г

ажиллуулах check_remote_procs нэртэй шинэ командыг үүсгэнэ. Үүний тулд "command definition"-г /etc/nagios/checkcommands.cfg дотор дараах байдалтай хийнэ.

define command {
command_name check_remote_procs
command_line $USER1$/check_by_ssh -S 6 -H $HOSTADDRESS$ -u testuser -C '/home/testuser/check_procs -w $ARG1$ -c $ARG2$ -$ARG3$ $ARG4$'
}

Улаанаар бичсэн мөрийг nagios ssh-р login хийж орсны дараа ажиллуулах бөгөөд жишээ болгож check_remote_procs командыг авлаа.

3.2 check_procs хоёртын файлыг В машины /home/testuser дотор хуулж тавих бөгөөд 744 permision тавина.

За ингээд бүх тохиргоог хийж дууслаа. Одоо check_remote_procs командыг ашиглан шинэ service үүсгэн туршиж үзье. Үүний тулд /etc/nagios/services.cfg дотор дараах мөрүүдийг нэмнэ:

define service{
use generic-service
host_name Web_Server_1
service_description ProFTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups linux-admins
notification_interval 240
notification_period 24x7
notification_options c,r
check_command check_remote_procs!1:1!1:1024!C!proftpd
}

3 comments:

Эрхэмээ said...

Нээрээ хэрэгтэй зүйл байна шүү. Ойр Баянаа юм бичихгүй, би гэж хүн хоосон хаалга мөргөөд буцдаг байсан харин энэ их таалагдав, туршиж үзнээ

baynaa said...

Тиймээ, сая 10 хоног эмнэлэгт хэвтээд гарлаа. Тэгээд блог бичсэнгүй. Үүнээс хойш эрчимтэй бичиж эхлэнэ гэж бодож байгаа шүү.

Anonymous said...

Хэрэгтэй зүйлс бичсэн байна. Сүүлийн үед хэдэн серверүүдийнхээ нууц үгийг мартаад болдоггүй Public key ашиглах хэрэгтэй бололтой. Мөнхбаяр бас өмнө нь тэгж зөвлөж байсан.