Рассылка уведомлений с помощью sendxmpp


Mark Silinio <silinio(at)mail.ru>
последнее обновление 18/05/06



Установка необходимого ПО

Использовал дистрибутив Gentoo Linux, и были установлены следующие программы(вместе с зависимостями разумеется): Вообще можно использовать какой душе угодно jabber-клиент, просто я предпочитаю psi... Итак,-
От рута!
Устанасливаем нужные нам переменные USE:

# export USE="ssl -icq -ldap -ipv6 -oscar -msn -yahoo"

Пояснения:
ssl - нужно для поддержки клиентом и сервером защищённого соединения
-ldap - на jabber-сервере будет заведено небольшое кол-во пользователей, так что LDAP нам врятли понадобится
-ipv6 - отключаем поддержку IPV6 протокола
-icq -oscar -msn -yahoo - отключаем gate'ы для разных протоколов на jabber-сервере

Ставим:

# emerge psi =net-im/jabberd-1.4.3-r4 sendxmpp

Усё должно откомпилироваться без проблем, потому переходим к настройке.

Настройка сервера

Так, первым на очереди идёт Jabber-сервер. Начинаем редактировать конфиг (предпочитаю vim):

# vim /etc/jabber/multiple.xml

Правим там следующие строки:

<host><jabberd:cmdline flag="h">DNS имя Jabber-сервера</jabberd:cmdline></host>

<ip port="5222">IP Jabber-сервера</ip>
<ssl port='5223'>IP Jabber-сервера</ssl>

<ssl>
 <key ip='IP Jabber-сервера'>/etc/jabber/gentoo.pem</key>
</ssl>

т.е. туто указываеся ip-адрес нашего сервера и путь к ssl-сертификату.
Расскоментируем следующие штуковины:

<register notify="yes">
 <instructions>Choose a username and password to register with this server.</instructions>
 <name/>
 <email/>
</register>

<mod_register>/usr/lib/jabberd/jsm.so</mod_register>

а здесь включаем уведомления при регистрации и вообще разрешаем пользователем регистрироваться(последняя строка).
создаём ssl-сертификат:

# cd /etc/jabber
# ./self-cert.sh

пускаем сервер:

# /etc/init.d/jabberd start

чтобы jabber-сервер запускался при загрузке системы, выполним:

# rc-update add jabberd default

Ну-с, сервер запущен, переходим к добавлению пользователей.

Регистрация пользователей


Нижеописанный дурдом думаю можно сделать проще на серверной стороне. Буду рад любым советам
Это самое простое: в Psi создаём новый account, не забыв в окне добавления учётной записи нажать на кнопку "Создать новую учётную запись на сервере". Выбираем подходящий JabberID и пароль.
Вот так:

screenshot

В данном случае, например, JabberID mail@jabber.company дан для mail-сервера. Не забудте конечно же, зарегистрировать самого себя.
Тепереча активируем все созданные account'ы: кликаем на изображении звёздочки возле имени и выбираем Статус -> Подключен(а)
Теперь начинается самое весёлое: у вашего account'а(пусть это будет admin@jabber.company) выбираем Действия -> Добавить контакт и в появившемся окне, вводим JabberID наших "серверов"

screenshot


Теперь в account'ах Psi куча запросов на авторизацию. Подтверждаем их все подряд.
А теперь удалите "серверные" account'ы. Вот так. Надеюсь вы не забыли их пароли?..

Использование sendxmpp

Собственно подошли к самой важно и самой простой, пожалуй, части нашего повествования.
Наберите например такое:

$ echo "hello from `hostname`" | /usr/bin/sendxmpp -t -u mail@jabber.company -p PaSSWorD /
-s testmessage admin@jabber.company

Где:
-t - указываем использовать SSL соединения
-u mail@jabber.company - JID пользователя
-p PassWorD - это пароль пользователя
-t testmessage - тема сообщения
admin@jabber.company - JID получателя

Вуаля!
для удобства создадим(root'ом) файл /etc/conf.d/sendxmpprc следующего содержания:

mail@jabber.company PassWorD

Выполним:

# chmod 600 /etc/conf.d/sendxmpprc

Ну, далее всё зависит только от ваших требований и вашей фантазии...

Применение

  • Можно например сделать так: в файл /etc/conf.d/local.start добавить следующую строку:
    
    echo "`uname -a` started at `hostname`" | /usr/bin/sendxmpp -t / 
    -f /etc/conf.d/sendxmpprc -s mailserver admin@jabber.company &
    
    
    Теперь вам будет приходить уведомления о запуске данного компьютера.

  • Более полезной может оказаться добавление такой строки в файл /root/.bashrc:
    
    echo "`date`: root login at `hostname`" | /usr/bin/sendxmpp -t -f /etc/conf.d/sendxmpprc / 
    -s mailserver admin@jabber.company 2>/dev/null
    
    
    Тепереча будет приходить уведомления о root-логинах на данном сервере...

  • Оповещения о сканировании от portsentry,- добавляем в /etc/portsentry/portsentry.conf:
    
    KILL_RUN_CMD="echo 'scan detected - $TARGET$ $PORT$' | /usr/bin/sendxmpp -t -f /etc/conf.d/sendxmpprc / 
    -s mailserver admin@jabber.company"
    
    
    При каждом сканировании данного хоста будет приходить сообщение вида "scan detected - 192.168.0.15 111"

  • Сообщения о состоянии батареи UPS (программа apcupsd),- в файле /etc/apcupsd/apccontrol копируем строки типа echo "Warning communications lost with UPS ${2}" | ${WALL}, меняя ${WALL} на /usr/bin/sendxmpp -t -f /etc/conf.d/sendxmpprc -s mailserver admin@jabber.company &, типа:
    
    powerout)
        echo "Warning power loss detected on UPS ${2}" | ${WALL}
        echo "Warning power loss detected on UPS ${2}" | /usr/bin/sendxmpp -t -f /etc/conf.d/sendxmpprc /
        -s mailserver admin@jabber.company &
    ;;
    
    
    ...И вам будут приходить сообщения об изменении работы UPS'а

  • Приход SNMP TRAP'ов (программы Net-SNMP и SNMP Trap Translator):
    - в файле /etc/snmp/snmptrapd.conf:
    
    traphandle default /usr/sbin/snmptt
    
    
    - в файле /etc/snmp/snmptt.ini:
    
    exec_enable = 1
    
    
    - в файле /etc/snmp/snmptt.conf(для одного из event'ов):
    
    EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
    FORMAT Device reinitialized (coldStart)
    EXEC echo "Device reinitialized (coldStart)" | /usr/bin/sendxmpp -t -f /etc/conf.d/sendxmpprc -s snmpdevice admin@jabber.company &
    SDESC
    A coldStart trap signifies that the SNMPv2 entity, acting
    in an agent role, is reinitializing itself and that its
    configuration may have been altered.
    EDESC
    
    
    ...все необходимые вам SNMP TRAP'ы будут приходить вам прямо по Jabber'у! (весьма удобно для отслеживания глючных соединений с коммутатором)

Как видите во всём этом нет ничего сложного и можно запросто использовать sendxmpp в cron, bash-скриптах, ваших программах, да где вам заблагоросудится. Дерзайте!


<- Назад
Valid HTML 4.01! Valid CSS!