Thursday, November 16, 2006

Datacom-н монгол дахь DNS серверvvд орж гараад байнуудаа гэж...

За ингээд хэлчихээр Датакомынхон болоод бусад хүмүүс сандралд орох вий дээ. Эхлээд энэ нийтлэлийг дуустал нь уншаарай.

Өнгөрсөн 10 сарын 03-ны өглөө 08:10-д манай оператороос манай DNS болохгүй байна, зарим домэйн олдоод зарим нь олдохгүй байна гэж дуудав. Би ч өөрийнхөө DNS серверийн логыг, дараа нь мэйл серверийнхээ логыг үзэв. Хараад байсан .mn домэйнууд олдохгүй байна. Манай DNS cache server-т л байна даа гэж бодсон. cache server-ээ үзээд байдаг үзээд байдаг... зүгээр л байх юм. Бусад газрууд яасийн бол гэж бодоод Magicnet-н админаас асуусан "Датакомоос асуухгүй юу, манайх лав зүгээр" гэнэ... танихгүй болоод ч тэр юмуу ёстой наашгүй хариу өглөө... хм... Дараа нь сая сургалтанд хамт сууснаараа Мicom-н Тэгшээгээс асууя гэж бодоод g0mb0 ахаас yahoo id-г авлаа. За нэг танилын нүүр халуун гэдэг шиг ёстой шалгааж авлаа. Танай DNS дээр ямар нэг сонин юм ажиглагдаагүй юу? гэлээ. Тэгшээ ч зүгээр л гээд байна... .mn домэйн болохгүй байгаа биз дээ, гэж нилээд шаллаа, тэгсэн харин сүүлд нь .mn домэйн харин өглөөнөөс болохгүй байх шиг байна гэлээ... ёстой нэг санаа амрах шиг болсон, хэхэ... За тэгээд удалгүй Датакомын нэг DNS дээр асуудал гарсан нь тодорхой болж удалгүй зүгээр болсон... 2 хоногын дараа mobicom.mn-г олохгүй хэдэн мэйл яваагүй харагдсан. Тэгэхээр нь Nagios дээрээ Datacom-н монголд байгаа 2 DNS сервер-г нэмээд байнга ажигладаг боллоо.

Уржигдар мөн MIX дээр асуудал гарснаас 07:56-10:48 хооронд Datacom DNS дээр critical alarm гарсан харагдана. Эдний сервер дээр аларм гарч харагддаг,харин манай DNS Cache дээр аларм гарахгүй болохоор ажиглаад л суугаад байсан. Сая нэг санаа авч Датакомын Мөнхдөлтэй ярилцлаа. Танайх орж гараад байна гээд... Тэгсэн тэдний сервертээ ч биш Magicnet-н холболтондоо байгаа бололтой... Гадаад гарц дүүрэх, эсвэл ачаалал ихтэй үед DNS хамгийн мэдрэмхий байдаг, DNS дээр хамгийн түрүүнд alarm гарч харагддаг л даа. Энэ нь bandwidth дүүрэх үед сүлжээний төхөөрөмжүүд prioroty багатай service-үүд (жишээлбэл DNS-г) хаадаг гэж ярьдаг юм байна лээ. Гэхдээ л бодох л асуудал... Датаком чинь үндэсний хэмжээний үйлчилгээ үзүүлдэг газар шүү дээ!

Тэгээд надад хэлэх гэсэн нэг л зүйл байна. Манай админууд яагаад хамтарч ажилладаггvй юм бэ? Надад тохиолдож байгаа асуудал бусад бүх ISP-н админуудад тохиолдож л байгаа. Datacom болохгүй байна, MIX дээр асуудал гарлаа гэхэд гэмтэлийн шинж тэмдэг, нөлөөлөх байдал, гэмтэл гарсан цаг, засагдсан цаг хугацааг мэдээлдэг самбар маягын юм байвал баахан бие биенээ гайхаж харж суухгүй байх. Бид бизнесээрээ өрсөлднүү гэхээс мэдлэгээ хуваалцаж, техникийн тал дээр хамтарч ажиллах учиртай шүү дээ.

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
}