Управление fail2ban с телефонного аппарата
В данной статье рассмотрим возможность управления fail2ban с помощью звонков: добавление в ЧС IP адреса, удаление из него (с возможностью воспроизведения списком). Настройка производится на системе: CentOs 6.9, Asterisk 13.21.0, FreePBX 14. Для добавления IP адресов в ЧС, будем использовать скрипт, написанный на bash. Для блокирования адресов воспользуемся командой: Fail2ban-client set <JAIL> banip <IP> (ipset […]
В данной статье рассмотрим возможность управления fail2ban с помощью звонков: добавление в ЧС IP адреса, удаление из него (с возможностью воспроизведения списком).
Настройка производится на системе: CentOs 6.9, Asterisk 13.21.0, FreePBX 14.
Для добавления IP адресов в ЧС, будем использовать скрипт, написанный на bash.
Для блокирования адресов воспользуемся командой:
Fail2ban-client set <JAIL> banip <IP> (ipset –add <JAIL> <IP>)
Где <JAIL> — имя цепочки ЧС, а <IP> — блокируемый адрес.
Для разблокирования воспользуемся другой командой:
Fail2ban-client set <JAIL> unbanip <IP> (ipset –del <JAIL> <IP>)
![](https://voxlink.ru/wp-content/uploads/2019/07/1-14.png)
Для начала составим скрипт блокировки и разблокировки адреса.
#!/bin/sh
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
IP="$1"
if [ "$2" = "unban" ]; then
kol=$( /usr/sbin/ipset -L | grep -c $IP )
if (( $kol != 0 )); then
answ=$( fail2ban-client status | grep list ) #Получаем цепочки
answ=${answ##*':'}
IFS=',' read -a array <<< $answ
for item in ${array[*]}
do
/usr/sbin/ipset --del f2b-${item} $IP –exist
#Удаление IP адреса из всех цепочек
done
echo -n "Unbanned"
else
echo -n "Not been banned"
fi
else
/usr/sbin/ipset --add f2b-asterisk-auth $IP –exist
#Добавляем IP адрес в лист блокировки подключений к Asterisk
Fi
Для разблокировки и блокировки создадим диалплан:
exten => 9977,1,Noop(Set IP)
same => n,Read(pin,get_pin,,,,5);Запрос кода
same => n,GotoIf($["${pin}"="1234"]?ok);проверка кода
same => n,Playback(denied);Сброс звонка если код неверен
same => n,Hangup()
same => n(ok),Playback(access)
same => n,Read(action,action,,,,10);Запрос действия (1-ban, 2-unban)
same => n,GotoIf($["${action}"="1"]?ban:unban)
same => n(unban),Read(IP,get_ip,,,,10);Запрос IP адреса, октеты разделяем *
same => n,Set(IPadd=${REPLACE(IP,*,.)});Заменяем * на .
same => n,Noop(Enter IP: ${IPadd});Выводим для проверки
same => n,SET(bashrec=${SHELL(sudo -u root /var/lib/asterisk/agi-bin/ban-unban ${IPadd} unban)});И отправляем в скрипт
same => n,ExecIf($["${bashrec}"="Unbanned"]?Playback(Unbanned):Playback(not_been_banned));Озвучиваем результат
same => n,Hangup()
same => n(ban),Read(IP,get_ip,,,,10);Запрос IP адреса, октеты разделяем *
same => n,Set(IPadd=${REPLACE(IP,*,.)});Заменяем * на .
same => n,Noop(Enter IP: ${IPadd});Выводим для проверки
same => n,SET(bashrec=${SHELL(sudo -u root /var/lib/asterisk/agi-bin/ban-unban ${IPadd} ban)});И отправляем в скрипт
same => n,Playback(Banned);Озвучиваем результат
same => n,Hangup()
При звонке, изначально запрашиваем пароль. Если введенный пароль верен (используем Read, для кастомизации голосового запроса), отправляем вызов далее по маршруту, если нет – сбрасываем его (можно прикрутить блокировку айпишника J).
После ввода кода, запрашиваем что мы хотим сделать, добавить или удалить адрес из ЧС. Если добавить, отправляем на ввод адреса и выполнение скрипта, если удалить, также ввод и тот же скрипт, но с другим параметром (unban).
!Важно, для корректной работы, необходимо внести изменения в файл /etc/sudoers иначе из диалплана работать не будет. Ниже то, что необходимо прописать, для редактирования лучше использовать встроенный visudo.
asterisk ALL=(root)NOPASSWD:/var/lib/asterisk/agi-bin/ban-unban
Тем самым мы разрешаем использовать пользователю asterisk использовать данный скрипт с правами root без пароля.
![](https://voxlink.ru/wp-content/uploads/2019/07/1-9.gif)
На данный момент мы можем удалять IP из ЧС, только если точно знаем какой нужно удалить (либо очистить все). Для озвучки текущего списка заблокированных адресов используем следующее:
- В диалплане в момент вызова unban, вставляем следующие строки:
same => n(unban),Set(ips=${SHELL(sudo -u root /var/lib/asterisk/agi-bin/list-ips.php)})
same => n,Playback(beep)
same => n,SayAlpha(${ips})
2. В указанный выше файл вносим скрипт:
#!/usr/bin/php -q
<?php
$ips=`ipset list f2b-asterisk-auth | grep -E "^[0-9]." | sort | uniq`;
$ips=str_replace(".","*",$ips);
$ips=str_replace("\n"," ",$ips);
echo $ips;
?>
3. Даем ему права на выполнение:
Chown asterisk. /var/lib/asterisk/agi-bin/list-ips.php
4. И прописываем в /etc/sudoers, по аналогии со скриптами выше:
asterisk ALL=(root)NOPASSWD:/var/lib/asterisk/agi-bin/list-ips.php
После этого, каждый раз когда вы будете запрашивать удаление адреса из списка, вам будут озвучены все адреса из цепочки f2b-asterisk-auth. (Можно вывести в отдельный пункт, при выборе функции).
![](https://voxlink.ru/wp-content/uploads/2019/07/2-1.gif)
![](/wp-content/uploads/2019/05/Screenshot_2.png)
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.