среда, 26 октября 2016 г.

Определить к какому порту коммутатора подключен хост с определенным IP-адресом.

Допустим коммутатор Cisco 2960, ip-адрес хоста 192.168.11.1

На коммутаторе к которому подключен хост выполним команду:

sw-main#sh ip arp | i 192.168.11.1
Internet          192.168.11.1              0    0033.5577.9901  ARPA Vlan11

Если команда не дала никакого вывода, но мы уверены, что хост подключен именно к этому коммутатору, пустим пинг до хоста. Таблица arp обновится, и можно будет увидеть, что хочется.

Затем, когда уже известен mac, определим к какому порту коммутатора подключен хост:

sw-main# sh mac address-table | i 0033.5577.9901
 11    0033.5577.9901 STATIC   Gi1/0/19

Хост подключен к 19-му порту.

понедельник, 3 октября 2016 г.

Перенаправление (forward) портов iptables

Допустим, есть сервер в локальной сети (или виртуалка), на которой работает ssh-server на порту 22, как обычно и бывает.
И допустим, нужно предоставить к этому серверу доступ из Интернет, но сервер за NAT, а шлюзом является сервер c Linux и iptables. Короче, нужно два правила:

iptables -t nat -A PREROUTING -i eth0 -p tcp -d x.x.x.x --dport 4444 -j DNAT --to-destination 192.168.1.3:22

iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.3 -p tcp --dport 22 -j ACCEPT

в которых - x.x.x.x внешний адрес шлюза, 192.168.1.3 адрес сервера, 4444 порт доступный из интернет, 22 порт ssh 192.168.1.3, eth0 смотрит в Интернет, eth1 смотрит в локалку.  

среда, 28 сентября 2016 г.

Rsync через ssh



У нас есть два сервера:
1) 1.1.1.1 - основной сервер (файлы, почта, что угодно иное), пользователь user1.
2) 2.2.2.2 - сервер, на котором хранятся резервные копии, пользователь user2.
Считаем, что раньше вы не настраивали доступ по ssh к серверам по ключам, а используете пароли. Заодно от паролей избавимся.
Идея: находясь на сервере 2.2.2.2, мы запускаем процесс копирования данных с основного сервера 1.1.1.1 (к себе, на 2.2.2.2).
Проверяем коннект ssh с паролем
Если мы с сервера 2.2.2.2 не сможем с паролем соединиться по ssh к 1.1.1.1, то дальше можно и не продолжать.
Готовим почву
На серверах установим rsync:
yum install xinetd rsync

Редактируем конфиг xinetd для rsync:
nano /etc/xinetd.d/rsync

...
disable = no
# flags         = IPv6
...

Создадим отдельного пользователя rsync без домашней директории и /sbin/nologin. Да, я люблю вместо общего nobody для важных задач создавать отдельных пользователей. Никогда не знаешь наперед, когда придется анализировать, что и где глючит.
Редактируем (создаем) минимальный конфиг rsync на сервере 1.1.1.1:
nano /etc/rsyncd.conf

uid = rsync
gid = rsync
use chroot = true
max connections = 5
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync.motd

# Logging
log file = /var/log/rsyncd.log
transfer logging = true
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
service xinetd restart

Проверим:
netstat -lnpt | grep 873
tcp        0      0 :::873         :::*       LISTEN      16269/xinetd

Ок, xinetd слушает порт rsync и при запросе запустит его.

На сервере 2.2.2.2 (с которого будем коннектится) сгенерируем сертификат для доступа без пароля:
# ssh-keygen -f ~/.ssh/id_rsa -q -P "" -b 4096

где:
-q - silense
-f - имя файла ключа
-P "" - пустой пароль
-b 4096 - размер ключа, бит
Просмотрим публичный ключ, который надо будет скопировать на 1.1.1.1, куда будем впоследствии подсоединяться:
# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/
FGg1NOgM++hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF++a+YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKR
CtPfgm1BGTBpoSl2A7lrwnmVSg+u11FOa1xSZ393aaBFDSeX8GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctz
vUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5
ZRM/CF0IJCqeXG6s+qVfRjB root@cloudads
На сервере 1.1.1.1 (откуда будем копировать файлы).
Скопируем этот ключ на сервер 1.1.1.1, на который будем логиниться, в директорию пользователя user1, под которым будем логинитсья, в файл ~/.ssh/authorized_keys file.
Если директории .ssh на 1.1.1.1 не существует, создадим ее:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
chown -R user1:user1 /home/user1

В файл ~/.ssh/authorized_keys копируем содержимое публичного ключа, созданного на сервере 2.2.2.2 (файл id_rsa.pub) и перезапускаем sshd:
# service sshd restart

Все, мы готовы проверить соединение с 2.2.2.2 на 1.1.1.1 по ssh:
ssh -i /home/user2/.ssh/id_rsa -p 22 user1@1.1.1.1

Если соединение прошло, можно двигаться дальше. Если нет - надо обязательно понять, где проблема (firewall, ошибка copy/paste ключа, забыли restart sshd, что-то еще).
Запускаем rsync через ssh
Мы будем копировать файлы /data/* с сервера 1.1.1.1 на сервер 2.2.2.2 в папку /backup/.
Формат простой: rsync [опции] [откуда] [куда]
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress 1.1.1.1:/data/data.zip /backup/

или так:
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress user1@1.1.1.1:/data/* /backup/

или даже так:
rsync -avz -e "ssh -p 22" --progress user1@1.1.1.1:/data/* /backup/

-e "ssh ..." - указываем, что хотим все передавать по ssh;
-p 22 - указываем порт, на котором работает ssh на сервере 1.1.1.1;
-a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца;
-v - расширенный вывод;
-z - использовать компрессию данных;
user1 - локальный пользователь сервера 1.1.1.1, настроенный на логин по ssh по ключу.
Естественно, пользователь user1 должен иметь права доступа в /data/.
Вот и все. После копирования проверим, создался ли файл на сервере 2.2.2.2:
ls -al /backup/

Взято тут.

среда, 24 августа 2016 г.

Автодозвон в Asterisk.

Почти все тоже самое, что и тут, только у меня Asterisk 1.8 собранный из исходников.
(В 13-том Asterisk-е тоже все ок.)

1. Создаем контекст для автодозвонщика, который будет дергать скрипт создающий call-файл для Астера:

[autocall]

exten => _99X.,1,Answer()
exten => _99X.,n,System(/home/asterisk/autodial.sh ${CALLERID(num)} ${EXTEN:2})
exten => _99X.,n,Playback(beep)
exten => _99X.,n,Hangup()

2.  Еще один контекст, который собственно, будет использоваться Астериском при дозвоне на основании созданного скриптом call-файла:

[dozvonka]

exten => _X,1,Dial(SIP/${EXTEN})
exten => _XXXXXXX,1,NoCDR() ;если настроен CDR, и не хотим спама в базе
exten => _XXXXXXX,n,Dial(SIP/${EXTEN}@westcall-reg)
exten => _7XXXXXXXXXX,1,NoCDR() ;если настроен CDR, и не хотим спама в базе
exten => _7XXXXXXXXXX,n,Dial(SIP/${EXTEN}@sipnet)


3. Скрипт который дергает Астер:

#!/bin/sh
CALLERNUM=$1
DIALNUM=$2
FILENAME=$CALLERNUM.call
CALLERINFO="AutoCall to $CALLERNUM <$CALLERNUM>";

echo "Action: originate" >> /home/asterisk/$FILENAME
echo "Channel: Local/$DIALNUM@dozvonka" > /home/asterisk/$FILENAME
echo "MaxRetries: 80" >> /home/asterisk/$FILENAME
echo "WaitTime: 20" >> /home/asterisk/$FILENAME
echo "RetryTime: 10" >> /home/asterisk/$FILENAME
echo "CallerID: $CALLERINFO" >> /home/asterisk/$FILENAME
echo "Extension: $CALLERNUM" >> /home/asterisk/$FILENAME
echo "Set: REALCALLERIDNUM=$DIALNUM" >> /home/asterisk/$FILENAME
echo "Priority: 1" >> /home/asterisk/$FILENAME

chown asterisk:asterisk /home/asterisk/$FILENAME
mv /home/asterisk/$FILENAME /var/spool/asterisk/outgoing/
#~~~~~~~~~~end~of~script~~~~~~~~~~~~

4. Назначим нашего Астериска владельцем скрипта:

chown asterisk:asterisk /home/asterisk/autodial.sh
и сделаем его исполняемым 
chmod +x /home/asterisk/autodial.sh

P.S. Как это работает.
Занято на номере 1111111? 
Набираем 991111111, дергается скрипт, в который передадутся значения номера вызывающего ${CALLERID(num)}, и отрежутся первые две цифры ${EXTEN:2}, создастся call-файл в /home/asterisk/, выполняютя условия скрипта, проигрывается beep, произойдет разъединение, и затем начнется дозвон, согласно диалплана контекста dozvonka. 

В консоли астера (asterisk -rvvvvvvvv) все будет наглядно. 

Когда абонет 1111111 освободится, то получит входящий звонок, когда он снимет трубку, то услышить зумер, как будто он куда-то звонил, в момент, когда 1111111 снимет трубку зазвонит телефон у того, кто инициировал дозвон, он снимет трубку, и они будут говорить)

понедельник, 1 августа 2016 г.

Копия сервера без выключения.

Руководство поставило задачу - сделать копию сервера БД  mysql. Копия потребовалась для тестирования обновлений, которые в дальнейшем должны быть применены на сервере.
Данный сервер БД используется системой биллинга организации, где я в текущий момент работаю. Сервер "железный", а переносить требовалось было на виртуалку Hyper-V. При этом условия были таковы, что нужно было обойтись только штатными средствами ОС, без установки какого-либо дополнительного софта, остановки сервисов, перезагрузок и выключений.
1. Подключаем диск для копии. Загружаемся с Live CD в подготовленной виртуалке. Я грузился с Ubuntu-desktop 14.04. Диск не монтируем. Диск виден в системе как sda.
2. Через Network Manager настраиваем сеть, таким образом, чтобы сервер-источник был доступен по ssh.
3. Открываем терминал, командуем:
sudo -i
получаем рут-привелегии.
4. Переключаемся в консоль сервера который будем копировать, смотрим диски командой
fdisk -l
понимаем, какой надо копировать. В моем случае был единственный диск - sda.
5. Далее на машине загруженной с Live CD командуем:
ssh root@remote "dd if=/dev/sda" | dd of=/dev/sda conv=noerror,sync
вводим пароль рута на сервере источнике,
bs оставил по умолчанию - т.е. 512 байт. Т.к. до этого пробовал использовать bs=8M и потерпел неудачу, но т.к. процедуры связанные с dd занимают продолжительное время решил не экспериментировать. Теперь надо ждать когда dd снимет дамп, ошибок быть не должно.
6. Dd отработал, можно глянуть разметку тем же fdisk, и сравнить с разметкой на сервере, который мы копировали. Они должны быть одинаковы. Теперь можно загрузиться с этого диска. Все должно пройти корректно, но могут и возникнуть проблемы, например с отсутствием нужных драйверов, тогда придется разбираться.
7. Завершающим шагом является снятие дампа БД mysql на сервере источнике, и заливка дампа на сервере приемнике.

среда, 4 мая 2016 г.

очистка папки по времени помещения содержимого

Для очистки офисной файлопомойки предназначенной для обмена файлами между сотрудниками использую скрипт deleteold.ps1. Скрипт можно скачать здесь.

Запускаю скрипт в Планировщике задач с следующими аргументами:
-noprofile -command C:\deleteold.ps1 -folderpath 'D:\Папка обмена\' -NoFolder -FileAge 14 -LogFile 'D:\delete_old_log\log.txt' -autolog -verboselog -ExcludePath 'D:\Папка обмена\ОтделХ\Не_удалять' -CreateTime -CleanFolders

Файлы пробывшие в каталоге свыше 14 дней удаляются, пишется лог, также указан вложенный каталог в котором содержимое удаляться не должно.

среда, 20 апреля 2016 г.

SIP ответы и их значения

Содержание

  • 1 1xx = информационные ответы
  • 2 2xx = ответы о завершении запроса
  • 3 3xx = сообщения о переадресации
  • 4 4xx = невозможность обработать запрос
  • 5 5xx = ошибки сервера
  • 6 6xx = глобальная ошибка


1xx = информационные ответы
SIP/2.0 100 Trying - запрос обрабатывается
SIP/2.0 180 Ringing - местоположение вызываемого пользователя определено. Выдан сигнал о входящем вызове
SIP/2.0 181 Call is Being Forwarded - прокси,сервер переадресует вызов к другому пользователю
SIP/2.0 182 Call is Queued - вызываемый абонент временно не доступен, вызов поставлен в очередь
SIP/2.0 183 Session Progress - используется для того, чтобы заранее получить описание сеанса информационного обмена от шлюзов на пути к вызываемому пользователю

2xx = ответы о завершении запроса
SIP/2.0 200 OK - успешное завершение
SIP/2.0 202 Accepted - запрос принят для обработки Используется для справки о состоянии обработки

3xx = сообщения о переадресации
SIP/2.0 300 Multiple Choices - указывает несколько SIP-адресов, по которым можно найти вызываемого пользователя
SIP/2.0 301 Moved Permanently - вызываемый пользователь больше не находится по адресу, указанному в запросе
SIP/2.0 302 Moved Temporarily - пользователь временно сменил местоположение
SIP/2.0 305 Use Proxy - вызываемый пользователь не доступен непосредственно, входящий вызов должен пройти через прокси-сервер
SIP/2.0 380 Alternative Service - запрошенная услуга недоступна, но доступны альтернативные услуги

4xx = невозможность обработать запрос
SIP/2.0 400 Bad Request - запрос не понят из-за синтаксических ошибок в нем, ошибка в сигнализации, скорее всего что-то с настройками оборудования
SIP/2.0 401 Unauthorized - нормальный ответ сервера о том, что пользователь еще не авторизировался; обычно после этого абонентское оборудование отправляет на сервер новый запрос, содержащий логин и пароль
SIP/2.0 401 Expired Authorization - время регистрации истекло
SIP/2.0 402 Payment Required - требуется оплата (зарезервирован для использования в будущем)
SIP/2.0 403 No Such User - нет такого пользователя, ошибка в номере, логине или пароле
SIP/2.0 403 User Disabled - пользователь отключен
SIP/2.0 403 Wrong Guess - ошибка в пароле
SIP/2.0 403 Conflict - такой SIP-номер уже используется
SIP/2.0 403 Forbidden - абонент не зарегистрирован
SIP/2.0 403 Empty Route Set - нет ни одного шлюза в роутинге
SIP/2.0 403 Caller Not Registered - нет такого пользователя
SIP/2.0 403 Out of Look-Ahead Retries - перебор узлов закончен
SIP/2.0 403 Invalid Phone Number - нет такого направления
SIP/2.0 403 No Money Left on RFC Account - на счету нет денег для совершения звонка
SIP/2.0 404 Not found - вызываемый абонент не найден, нет такого SIP-номера
SIP/2.0 404 Undefined Reason - неопределенное направление
SIP/2.0 404 Unknown user account - логин и пароль не найдены
SIP/2.0 404 Out of Order - в заявке на маршрутизацию по этому направлению нет ни одного шлюза, проверьте настройку маршрутизации по этому направлению.
SIP/2.0 405 Method Not Allowed - метод не поддерживается, может возникать если пользователь пытается отправлять голосовую почту и т.п.
SIP/2.0 406 No codecs match - неправильная конфигурация кодеков
SIP/2.0 406 Not Acceptable - пользователь не доступен
SIP/2.0 407 Proxy Authentication Required - необходима аутентификация на прокси-сервере
SIP/2.0 408 Request Timeout - время обработки запроса истекло: Абонента не удалось найти за отведенное время
SIP/2.0 408 Login timed out - за отведенное время не получен ответ от сервера на запрос авторизации
SIP/2.0 410 No Route - вариант SIP/2.0 403 Empty Route Set; нет доступа к ресурсу: Ресурс по указанному адресу больше не существует
SIP/2.0 413 Request Entity Too Large - размер запроса слишком велик для обработки на сервере
SIP/2.0 415 No Media - звонок совершается неподдерживаемым кодеком
SIP/2.0 416 Unsupported Scheme - сервер не может обработать запрос из-за того, что схема адреса получателя ему непонятна
SIP/2.0 420 Bad extension - неизвестное расширение: Сервер не понял расширение протокола SIP
SIP/2.0 421 Extension Required - в заголовке запроса не указано, какое расширение сервер должен применить для его обработки
SIP/2.0 423 Interval Too Brief - сервер отклоняет запрос, так как время действия ресурса короткое
SIP/2.0 480 Invalid Phone Number - неправильный номер телефона, не соответствует к-во цифр или неправильный код страны или города
SIP/2.0 480 Destination Not Found In Client Plan - направления нет в тарифном плане абонента
SIP/2.0 480 Wrong DB Response - проблемы с центральной базой сети
SIP/2.0 480 DB Timeout - проблемы с центральной базой сети
SIP/2.0 480 Database Error - проблемы с центральной базой сети
SIP/2.0 480 Codec Mismatch - несоответствие кодеков
SIP/2.0 480 No Money Left on RFC Account - нет денег на счету, обратитесь к администратору сети!!!
SIP/2.0 480 Empty Route Set - пустое направление, нет принемающих шлюзов
SIP/2.0 480 No money left - недостаточно денег на счете
SIP/2.0 480 Temporarily Unavailable - временно недоступное направление попробуйте позвонить позже
SIP/2.0 481 Call Leg/Transaction Does Not Exist - действие не выполнено, нормальный ответ при поступлении дублирующего пакета
SIP/2.0 482 Loop Detected - обнаружен замкнутый маршрут передачи запроса
SIP/2.0 483 Too Many Hops - запрос на своем пути прошел через большее число прокси-серверов, чем разрешено
SIP/2.0 484 Address Incomplete - принят запрос с неполным адресом
SIP/2.0 485 Ambiguous - адрес вызываемого пользователя не однозначен
SIP/2.0 486 Busy Here - абонент занят
SIP/2.0 487 Request Terminated - запрос отменен, обычно приходит при отмене вызова
SIP/2.0 488 Codec Mismatch - нет шлюзов с поддержкой заказанного кодека
SIP/2.0 488 Private IP Address - адрес RTP media из сетей RFC1918
SIP/2.0 491 Request Pending - запрос поступил в то время, когда сервер еще не закончил обработку другого запроса, относящегося к тому же диалогу
SIP/2.0 493 Undeciperable - сервер не в состоянии подобрать ключ дешифрования: невозможно декодировать тело S/MIME сообщения
SIP/2.0 499 Codec Mismatch - отсутствует кодек
5xx = ошибки сервера
SIP/2.0 500 Internal Server Error - внутренняя ошибка сервера
SIP/2.0 500 DB Timeout - нет ответа от базы данных
SIP/2.0 500 Database Error - то же самое, но в другой момент
SIP/2.0 500 Wrong DB Response - неправильный ответ базы данных, редкая ошибка
SIP/2.0 500 Undefined Reason - неопределенная причина
SIP/2.0 500 account has been moved to a remote system - аккаунт перенесен в удаленную систему (дословно)
SIP/2.0 501 Method Not Supported Here - в сервере не реализованы какие-либо функции, необходимые для обслуживания запроса: Метод запроса SIP не поддерживается
SIP/2.0 502 Bad Gateway - сервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос
SIP/2.0 503 Service Unavailable - сервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания
SIP/2.0 504 Server time-out - сервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова
SIP/2.0 505 SIP Version not supported - версия не поддерживается: Сервер не поддерживает эту версию протокола SIP
SIP/2.0 513 Message too big - сервер не в состоянии обработать запрос из-за большой длины сообщения

6xx = глобальная ошибка
SIP/2.0 600 Busy everywhere - вызываемый пользователь занят и не желает принимать вызов в данный момент
SIP/2.0 603 Decline - вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа
SIP/2.0 604 Does Not Exist Anywhere - вызываемого пользователя не существует
SIP/2.0 606 Not Acceptable - соединение с сервером было установлено, но отдельные параметры, такие как тип запрашиваемой информации, полоса пропускания, вид адресации не доступны 

воскресенье, 6 марта 2016 г.

lighttpd защита авторизации с помощью ssl

0. Будем считать, что lighttpd установлен.

1. Включим поддержку ssl в lighttpd:
lighttpd-enable-mod ssl
и поддержку переадресации:
nano /etc/lighttpd/lighttpd.conf
раскомментируем строку:
"mod_rewrite",
и перезагрузим lighttpd:
service lighttpd restart
будет ошибка, но можно смело продолжать далее

2. Создадим каталог для сертификатов, и перейдем в него:
mkdir /etc/lighttpd/certs
cd /etc/lighttpd/certs

3. Создаем сертификат:
openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 3650 -nodes
заполняем или нет предлагаемые данные

4. Назначим владельца сертификата, и выставим права:
chown www-data:www-data lighttpd.pem
chmod 400 lighttpd.pem

5. Укажем вэб-серверу местонахождение сертификата:
nano /etc/lighttpd/conf-enabled/10-ssl.conf

$SERVER["socket"] == "0.0.0.0:443" {
        ssl.engine  = "enable"
        ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"

6. Настроим принудительную переадресацию на https:
nano /etc/lighttpd/conf-enabled/20-redirect-ssl.conf

$HTTP["host"] == "8.8.8.8" {
    $HTTP["scheme"] == "http" {
        url.redirect = ("^/(.*)" => "https://8.8.8.8/$1")
    }
}

$HTTP["host"] == "192.168.1.1" {
    $HTTP["scheme"] == "http" {
        url.redirect = ("^/(.*)" => "https://192.168.1.1/$1")
    }
}

$HTTP["host"] == "site.ru" {
    $HTTP["scheme"] == "http" {
        url.redirect = ("^/(.*)" => "https://site.ru/$1")
    }
}

Здесь задача перечислить все возможные адреса при обращении к которым требуется обращение по https.

7. Перезагрузим lighttpd:
service lighttpd restart
и попробуем открыть страницу сайта.

суббота, 23 января 2016 г.

список разрешенных mac в dnsmasq

Для того, чтобы разрешить к выдаче IP-адреса только определенным mac, достаточно сделать следующее - в файле /etc/dnsmasq.conf вписываем нужные mac таким образом:

dhcp-host=00:00:00:00:00:01,192.168.0.100
dhcp-host=00:00:00:00:00:02,net:known
dhcp-host=00:00:00:00:00:03,net:known
dhcp-host=00:00:00:00:00:04,net:known

и раскомментируем строку:

dhcp-ignore=tag:!known

В результате получаем следующую конфигурацию:
хост с mac 00:00:00:00:00:01 получит ip 192.168.0.100, остальные хосты с перечисленными mac просто получат IP из области которая стандартно указывается в строке:

dhcp-range=192.168.0.10,192.168.0.254,24h

хосты с неопределенными mac ip-адреса не получат.

понедельник, 18 января 2016 г.

BLACKLIST Asterisk

Добавить номер в черный список:

в extensions.conf:
exten => _X., 1, GotoIf($[${BLACKLIST()}=1]?blacklist)

добавляем номер нехороших людей в базу. в консоли asteriska делаем:
database put blacklist 79876543210 1

если надо удалить из базы:
database del blacklist 79876543210




среда, 6 января 2016 г.

NUT

Опросить ups на поддеерживаемые команды:

upscmd -l upsname@localhost -u user -p passwd

Запустить например быстрый тест батареи:

upscmd -u user -p passwd upsname test.battery.start.quick

Вывести статистику по ups:

upsc upsname@localhost