Вспомогательные скрипты и утилиты
Содержание
Скрипт рассылки сообщений о состоянии баланса
Для рассылки информации о балансе используется скрипт /opt/ebs/data/sendmail.py. Скрипт использует шаблон "Информационное письмо" сообщения о балансе, вид которого можно изменить в интерфейсе администратора. По-умочланию шаблон выглядит так:
--------------------------------------------------- Это сообщение сгенерировано биллинговой системой! --------------------------------------------------- Здравствуйте, ${account.username}. Уведомляем, что актуальный баланс Вашего лицевого счета составляет ${"%.2f" % account.ballance} руб. Размер кредита ${account.credit}. Пожалуйста, пополните баланс во избежание блокировки. --- ${operator.organization}
Параметры работы скрипта настраиваются в конфиг-файле ebs_config.ini
[sendmail] log_type = logging log_file = log/sendmail_log log_level= 0 log_ident= ebs_sendmail subject = Provider information - тема письма use_tls = False - использовать TLS send_if_less = 5000 - пороговое значение баланса, ниже которого пользователь получит письмо host = smtp.gmail.com - адрес SMTP сервера host_user = SMTP имя пользователя host_password = пароль SMTP пользователя port = 25 SMTP порт сервера email_from = info@provider.com - с этого адреса будут слаться письма fail_silently = False - в случае ошибки продолжать отправку
Для того, чтобы рассылать уведомления в 00:00:00 каждого дня, нужно добавить в crontab следующую строку:
0 0 * * * /usr/bin/env python /opt/ebs/data/sendmail.py >>/opt/sendmail.log
Страница-заглушка
Вы можете настроить ExpertBilling так, что если у пользователя закончился баланс, то сервер доступа начнёт его перенаправлять на специальную страницу, где будет сказано об этом. Возможны 2 варианта настройки:
- через IPN действия;
- через гостевой VPN пул;
У каждого из этих методов есть свои достоинства и недостатки. Использование IPN действий невозможно при динамической выдаче VPN IP адресов абонентам, а гостевой VPN пул не охватывает IPN абонентов.
Настройка заглушки через IPN Действия
Для настройки заглушки необходимо:
1 Включить и настроить IPN действия для тарифного плана. Если вы используете не IPN тарифные планы, то необходимо также разрешить PPTP/PPPOE/DHCP подключение при отрицательном балансе и блокировках.
2 Настроить apache так, чтобы при запросе любой страницы он отдавал сообщение о том, что у пользователя закончились деньги.
3 Настроить файервол на сервере доступа.
Приступим. 1.
Команды сервера доступа, к которому привязан аккаунт должны быть такими:
Для VPN тарифных планов:
Включить субаккаунт:
/ip firewall address-list remove [find comment==blocked-$subacc_id]
Отключить субаккаунт:
/ip firewall address-list add list=blocked_users address=$subacc_vpn_ip_address comment=blocked-$subacc_id disabled=no
Для IPN тарифных планов:
Включить субаккаунт:
/ip firewall address-list remove [find comment==blocked-$subacc_id]
Отключить субаккаунт:
/ip firewall address-list add list=blocked_users address=$subacc_ipn_ip_address comment=blocked-$subacc_id disabled=no
Для использования данной возможности субаккаунту _ДОЛЖЕН_ быть назначен серер доступа в его профиле.
2. Для версии ниже 1.5(в 1.5 по-уомлчанию создаётся данная конфигурация и файл index.html) добавьте в /etc/apache2/sites-enabled/ файл vhost_blank.conf со следующим содержимым
Listen 81 <VirtualHost *:81> ServerName 10.1.1.1 ServerAdmin webmaseter@isp.net ErrorLog /var/log/apache2/nomoney_err.log CustomLog /var/log/apache2/nomoney_access_log combined DocumentRoot /opt/ebs/web/nomoney <Directory "/opt/ebs/web/nomoney"> AllowOverride All Options FollowSymlinks Includes ErrorDocument 404 /index.html DirectoryIndex index.html AddDefaultCharset utf-8 allow from all </Directory> </Virtualhost>
По пути /opt/ebs/web/nomoney нужно создать файл index.html со следующим содержимым:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Сообщение от провайдера::ExpertBilling</title> </head> <body> <center><img src="provider_logo.png" alt="" /></center> <h1 align="center">Уважаемый абонент.</h1> <h1 align="center">На вашем счету закончились деньги. <a href="https://isp.net." target="_blank">"Веб-кабинет"</a></h1> </body> </html>
Перезапустите Apache для того, чтобы изменения вступили в силу.
/etc/init.d/apache2 restart
3. Настроим Firewall. Предположим, что 10.1.1.1 - IP адрес сервера с Apache, который мы настраивали пунктом выше. Правила должны стоять в самом начале!!!
/ip firewall filter add src-address-list=internet_users dst-address=10.1.1.1 action=accept /ip firewall filter add src-address=10.1.1.1 dst-address-list=internet_users action=accept /ip firewall filter add src-address-list=blocked_users action=drop
Настроим редирект всех HTTP запросов
/ip firewall nat add chain=srcnat src-address-list=blocked_users action=masquerade /ip firewall nat add chain=dstnat protocol=tcp dst-port=80 src-address-list=blocked_users action=dst-nat to-addresses=10.1.1.1 to-ports=81
Теперь при наступлении отрицательного баланса биллинг будет посылать на сервер доступа команду на добавление VPN IP адреса субаккаунта в адрес-лист blocked_users, все запросы на 80 порт которого будут редиректиться на сервер с apache, который по указанному адресу будет показывать нашу заглушку.
Настройка заглушки через гостевой VPN пул
Гостевой VPN служит для динамической выдачи VPN IP адресов, в случае если абонент заблокирован по причине отрицательного баланса или наличия других блокировок Для настройки заглушки необходимо:
1 Создать VPN пул через интерфейс администратора. В пуле нужно указать сеть, которая не будет пересекаться ни с одной из ваших существующих сетей.
2 Указать созданный VPN пул в тарифном плане пользователя
2 Настроить apache так, чтобы при запросе любой страницы он отдавал сообщение о том, что у пользователя закончились деньги.
3 Настроить файервол на сервере доступа.
Приступим. 1. Создайте VPN пул через меню Справочники->IP пулы
2. Укажите выбранный пул в тарифном плане
3. Добавьте в /etc/apache2/sites-enabled/ файл vhost_blank.conf со следующим содержимым
Listen 81 <VirtualHost *:81> ServerName 10.250.1.1 ServerAdmin webmaseter@isp.net ErrorLog /var/log/apache2/nomoney_err.log CustomLog /var/log/apache2/nomoney_access_log combined DocumentRoot /opt/ebs/web/nomoney <Directory "/opt/ebs/web/nomoney"> AllowOverride All Options FollowSymlinks Includes ErrorDocument 404 /index.html DirectoryIndex index.html AddDefaultCharset utf-8 allow from all </Directory> </Virtualhost>
По пути /opt/ebs/web/nomoney нужно создать файл index.html со следующим содержимым:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Сообщение от провайдера::ExpertBilling</title> </head> <body> <center><img src="provider_logo.png" alt="" /></center> <h1 align="center">Уважаемый абонент.</h1> <h1 align="center">На вашем счету закончились деньги. <a href="https://isp.net." target="_blank">"Веб-кабинет"</a></h1> </body> </html>
Перезапустите Apache для того, чтобы изменения вступили в силу.
/etc/init.d/apache2 restart
3. Настроим Firewall. Предположим, что 10.250.1.1 - IP адрес сервера с Apache, который мы настраивали пунктом выше. Правила должны стоять в самом начале!!!
/ip firewall filter add src-address=10.250.1.0/24 dst-address=10.250.1.1 action=accept /ip firewall filter add src-address=10.250.1.1 dst-address=10.250.1.0/24 action=accept /ip firewall filter add src-address-list=10.250.1.0/24 action=drop
Настроим редирект всех HTTP запросов
/ip firewall nat add chain=srcnat src-address=10.250.1.0/24 action=masquerade /ip firewall nat add chain=dstnat src_address=10.250.1.0/24 protocol=tcp dst-port=80 action=dst-nat to-addresses=10.250.1.1 to-ports=81
Теперь при наступлении отрицательного баланса биллинг будет сбрасывать сессию абонента, а после переподключения выдавать IP адрес из созданного нами пула, все запросы с которого будут посылатся на сервер с apache.
Ограничением данного подхода является возможность его использования только в PPTP/L2TP/PPPOE тарифных планах.
Скрипт импорта платежей
Скрипт предназначен для импорта платежей из текстовых файлов формата CSV. Скрипт находится по пути /opt/ebs/data/scripts/payments/process.py Файл настроек находится по адресу /opt/ebs/data/scripts/payments/pattern.ini
Формат файла настроек
[Belarusbank] folder_in=Belarusbank/IN/ folder_out=Belarusbank/OUT/ folder_err=Belarusbank/ERR/ file_mask=*.asb exclude_mask=lan.* separator=; payment_type=BELARUSBANK_PAYMENT_IMPORT encoding=cp855 fieldnames=ACC;FIO;DATETIME;TIME;SUM;EMPTY;EMPTY;EMPTY;PID datetime_fmt=%d/%m/%Y time_fmt=%H:%M [Webmoney] folder_in=WebMoney/IN/ folder_out=WebMoney/OUT/ folder_err=WebMoney/ERR/ file_mask=*.* exclude_mask=r*.* separator=; payment_type=WEBMONEY_PAYMENT_IMPORT fieldnames=DATETIME;ACC;SUM;EMPTY;EMPTY;PID;EMPTY;EMPTY;EMPTY;EMPTY datetime_fmt=%d/%m/%Y %H:%M:%S time_fmt= encoding=utf-8
Описание настроек:
- folder_in путь к папке с текстовыми файлами CSV
- folder_out путь к папке с успешно обработанными файлами платежей
- folder_err путь к папке с обработанными файлами платежей, содержащими записи в неверном формате или ошибочную информацию
- file_mask - маска файлов платежей
- exclude_mask - маска файлов, подлежащих к исключению обработки
- separator - разделитель в файле csv
- payment_type - тип платежа. Для нового типа платежей нужно создать запись в таблице базы данных billservice_transactiontype, поместив в поле name текстовое описание платежа, а в поле internal_name - текстовую константу payment_type.
- fieldnames - формат файла csv. Поле DATETIME предназначено для даты совершения платежа, поле ACC для номера договора аккаунта, SUM - сума платежа, EMPTY - пустое или не имеющее значения поле, PID аналогично EMPTY, TIME - поле времени платежа, если дата и время разнесены по разным столбцам
- datetime_fmt - формат поля DATETIME. Возможные значения символов подстановки вы можете найти на этой странице http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
- time_fmt формат поля TIME
- encoding кодировка файла CSV
Важно!!! Обращайте внимание на регистр символов в путях к папкам. Обратите внимание В ранних версиях EBS 1.4 данный скрипт отсутствовал. Обратитесь к разработчикам за получением скрипта.