вторник, 29 июля 2014 г.

Мониторинг HASP ключей 1с в Zabbix

Появилась недавно необходимость мониторинга ключей 1с через Zabbix, так как в один момент упустили тот факт, что клиентов 1с было больше, чем количество имеющихся лицензий. Поэтому, чтоб избежать повторения подобного, решили прикрутить мониторинг Zabbix и настройки триггеров. 

Велосипед изобретать не хотел. Поэтому первым делом начал искать готовые решения. Решения, которые   удовлетворяли бы меня, я не нашел. Но наткнулся на интересную тему на форуме Zabbix. Правда то решение мне не особо нравилось. Потому что практически на все у меня настроены LLD. Руками каждый раз вбивать элементы данные в какой-то момент мне надоело, и я настроил на все что мог LLD. Поэтому и для HASP я решил пойти этим путем.

Делать все будем на Windows сервере. В вышеприведенной ссылке один из участников форума написал небольшую программу, которая обращается к библиотеке hsmon.dll из состава Aladdin  Monitor. Ее и будем использовать. Так же нам понадобиться утилиты sed и grep. Чтоб не заниматься поиском, в конце будет ссылка на архив.

Итак. Предположим что zabbix-agent у нас в папке C:\zabbix. Создаем в этой папке еще одну папку и называем ее hasp. Содержимое архива кидаем туда. В конфиг zabbix добавляем строки

UserParameter=hasp_id,powershell -File "C:\zabbix\hasp\hasp.ps1" get_id
UserParameter=hasp_used[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_load $1 
UserParameter=hasp_max[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_max $1 

Скрипт занимается 2 вещами. Для начала он выводит в формате JSON ID ключей Hasp. Это необходимо для работы LLD. Если скрипту в качестве переменной передать ему get_load ID, то он выдаcт количество активных подключений. Если передать get_max ID, то выдаст еще и максимально возможное количество.

В самом Zabbix создаем шаблон. Называем как угодно, например Template Hasp. Переходим в Правила Обнаружения. Создаем новое. Пусть называется оно Hasp discovery. В графе ключ вписываем hasp_id, интервал 3600. Сохраняем. Дальше в прототипы данных. Создаем прототип. Назовем Hasp keys used for id {#ID}, ключ hasp_used[{#ID}], Интервал обновления можно 60 сек. И еще один такой же элемент, но с именем Hasp keys max for id {#ID}, а  в строке ключ hasp_max[{#ID}]. Первый покажет сколько занято. Второй максимальное количество. На основе этих элементов создаем график с таким же именем. В качестве прототипа выбираем наши созданные элементы данных. Так же можно создать триггер, который будет сравнивать текущее количество с максимальным. Как создавать такой триггер описывать не стану. Ничего сложного в этом нет.

Вот и все. Все необходимое есть в этом архиве. Возможно скрипт написан не совсем элегантно. Делал на скорую руку.

UPD. Перевел на Powershell.  Архив обновил.

Не забываем разрешить выполнение скриптов Powershell.

понедельник, 30 декабря 2013 г.

Бэкап системы в "облако".

Небольшой пост о скрипте, который создает бекап системы и скидывает в яндекс диск. Да, знаю, что подобных мануалов куча. Но мне не хочется потом искать в интернете мануал. А тут свой, под рукой всегда =).

Для начала устанавливаем сам яндекс диск. Ничего сложного. Все подробно описано по ссылке http://help.yandex.ru/disk/cli-clients.xml

Теперь скрипт.
 #!/bin/sh  
 back=backup-`date '+%d-%B-%Y'`  
 yadisk=/media/yandex.disk/backup  
 cd /tmp  
 tar -cvpf ./fullbackup.tar --exclude=/proc --exclude=/dev --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/tmp --exclude=/usr/src --exclude=/var/spool/squidcache /  
 cd $yadisk  
 7z a $back.7z -mx3 /tmp/fullbackup.tar -v200M  
 for i in `find * | grep -v "$back"`; do rm $i; done  
 rm -f /tmp/fullbackup.tar  


Где:

/media/yandex.disk/backup — каталог примонтированого яндекс диска.

backup-`date '+%d-%B-%Y'` — шаблон имени нашего бэкапа.

--exclude — каталоги, которые исключаем из архивирования. 

-mx3 — степень сжатия. Можно поставить mx7, уровень сжатия высокий, но и выполняться будет дольше. Мне достаточно и 3 уровня.

-v200M — разделяем на архивы по 200Mb (мне так удобней)

for i in `find * | grep -v "$back"`; do echo $i; done — удаляет предыдущий бэкап (чтоб не занимало место, на яндекс диск не так много и места, а каждый бэкап у меня занимает по 3 Gb =) ). Кому не нужно просто удаляем строку.

Не забывает делать его исполняемым. 
Сперва бэкапим все tar'ом (чтоб сохранились права доступа файлов), а потом сжимаем и делим все 7z. Все это закинул в крон, чтоб в раз в неделю запускался.

суббота, 31 августа 2013 г.

Парсер списка запрещеных сайтов Роскомнадзора. Update от 15.04.2018. Теперь это все на ipset


Надоела  уже порядком эта заглушка =).

Последовательность действий такая:
1. Настраиваем OpenVpn подключение к какому нибудь буржуйскуму серверу.
2. Получаем список заблокированных ресурсов.
3. Парсим его, извлекая  нужные нам IP.
4. ipset+iptables+iproute2.

Первый пункт описывать тут не стану. С этим нет проблем. Остальное решается с помощью вот такого скрипта
#!/bin/bash

file=/etc/openvpn/rkz.list
tmp=/tmp/black_ip.tmp
gw=tun3
IPSET_TB=rkz
MARK_ID_DEC=4
MARK_ID_HEX=`printf 0x'%x\n' $MARK_ID_DEC`

if [ -n "`ip rule | grep "lookup $MARK_ID_DEC"`" ]; then
    ip rule del from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
fi

if [ -n "`ip route show table $MARK_ID_DEC`" ]; then
    ip route del default dev $gw table $MARK_ID_DEC
fi


while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep PREROUTING `" ]; do iptables -t mangle -D PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep OUTPUT`" ]; do iptables -t mangle -D OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
if [ -n "`ipset -L rkz 2> /dev/null`" ]; then ipset -X rkz; fi

wget -q https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw -O $tmp
grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b' $tmp |sort -u   > $file

ipset -N rkz iphash hashsize 999999 maxelem 999999
while read line
do
ipset -A rkz $line
done < $file

iptables -t mangle -A PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX
iptables -t mangle -A OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX

ip rule add from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
ip route add default dev $gw table $MARK_ID_DEC


Итак. Список получаем с https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw. Парсим его, вытаскивая IP. И прописываем маршруты. 

Не забывает правильно настроить SNAT в POSTROUTING. 
 
Список достаточно быстро обновляется. Можно кинуть скрипт в крон.

UPD. В конфиг OpenVpn добавим

 script-security 2  
 up /путь/к_скрипту  

и предыдущий скрипт будет запускаться сам, как только появится подключение к OpenVpn.