Просмотр Исходного

{toc}

h1. Назначение скриптов hooks

Скрипты *hooks* позволяют выполнять какие-либо действия при запуске и остановке служб (демонов в терминологии Unix).
Например, таким образом можно добавить собственные правила IPTABLES.

h1. Добавление правил

Скрипт *hooks* написан на языке Bash. Изменения вносятся в середину скрипта, первую и последнюю строки оставьте неизменными. В общем виде скрипт должен выглядеть так:

{code}
#!/bin/bash


if [ "$1" = 'Имя_службы' -a "$2" = 'Параметр' ]; then

#Ваши изменения здесь

fi

exit 0
{code}
Первый параметр - служба, второй 'start' или 'stop', третий параметр - код возврата от службы.

Например, разрешим доступ на порты пассивного режима ftp-сервера биллинга:
{code}
#!/bin/bash

if [ "$1" = "/etc/init.d/firewall" -a "$2" = start ]; then

iptables -I asr_billing_input -p tcp --destination-port 10090:10100 -j ACCEPT

fi
exit 0
{code}

После редактирования скрипта нужно перезапустить соответствующий контейнер:

Например:
{code}/app/base/service restart{code}

h2. Что для чего

{Warning}
При изменении кастомных цепочек *asr_billing*_input правила необходимо добавлять в hook контейнера *asr_billing*, если цепочка *asr_cabinet*_input - добавлять в hooks *asr_cabinet* и т.п. Изменение *базовых * цепочек (INPUT,OUTPUT,PREROUTING и т.д.) гарантированно нарушит связь контейнеров, а следовательно всей системы.
{Warning}

Необходимые правила IPTABLES и прочие действия необходимо описывать в хуках соответствующих [контейнеров|CarbonBaseSystem:Контейнеры с приложениями]

h3. auth
Базовый интерфейс авторизации в платформе, других функций нет.
Скрипт */app/base/cfg/hooks*
iptables-цепочки: *auth_input* и *auth_output*

h3. base
Отображает интерфейс перехода в другие контейнеры, к настройкам других контейнеров и настройки доступа к серверу в целом.
Скрипт */app/base/cfg/hooks*
iptables-цепочки: *base_input* и *base_output*
Обычно используется для предоставления доступа к к веб-интерфейсу управления, но правильнее использовать соответствующее поле в [веб-интерфейсе|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=48693373]

h3. asr_billing
Управлениие абонентами и тарифами.
Скрипт /app/asr_billing/cfg/hooks
iptables-цепочки: asr_billing_input и asr_billing_output

h3. asr_cabinet
Содержит локальный сайт и личный кабинет.
Скрипт /app/asr_cabinet/cfg/hooks
iptables-цепочки: asr_cabinet_input и asr_cabinet_output
Обычно используется для предоставления доступа к локальному сайту и личному кабинету. По умолчанию доступ предоставлен всем.

h3. asr_fiscal
Содержит модули взаимодействия с платежными системами.
Скрипт /app/asr_fiscal/cfg/hooks
iptables-цепочки: *asr_fiscal_input* и *asr_fiscal_output*
Обычно используется для предоставления доступа платежных систем к биллингу, но правильнее использовать соответствующее поле в [веб-интерфейсе Шаг 4|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=49087129]

h3. collector
Система сбора статистики (Netflow) и DHCP-сервер.
Скрипт /app/collector/cfg/hooks
iptables-цепочки: collector_input и collector_output

h3. monitoring
Система мониторинга Zabbix.
Скрипт /app/monitoring/cfg/hooks
iptables-цепочки: monitoring_input и monitoring_output
Обычно используется для предоставления доступа к ZABBIX.

h2. Использование скрипта hooks по расписанию

Ничто не мешает использовать hooks с помощью cron. Таким образом вы можете выполнять некие команды не при наступлении какого-то события, а в нужное вам время.

Для этого нужно использовать в качестве имени службы:

* cron.10min \- для того чтобы выполнять что-то каждые 10 минут
* cron.daily \- для того чтобы выполнять что-то каждый день
* cron.hourly \- для того чтобы выполнять что-то каждый час
* cron.monthly \- для того чтобы выполнять что-то каждый месяц
* cron.weekly \- для того чтобы выполнять что-то каждую неделю

Либо /etc/crontab, если вам нужно указать специфичное время, но в таком случае указать в вызове в качестве имени службы что-то уникальное, например

{code}
10 */2 * * *  root /cfg/hooks /etc/init.d/networkd start 1>/dev/null 2>/dev/null
{code}

h2. Отладка добавления правил IPTABLES
# Проверьте что правило добавляется из командной строки до того как добавлять его в скрипт hooks
# Если произошла ошибка добавления правила, информацию о ней можно попробовать найти в логе */var/log/messages* (или выполнив команду *dmesg*)