|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (25)
просмотр истории страницыПри запуске и остановке служб на сервере вызывается скрипт /app/xge/cfg/hooks с параметрами, сообщающими о том, какая служба была запущена или остановлена. Первый параметр - служба, второй 'start' или 'stop' ({color:#ff0000}кроме службы firewall.sh{color}), третий параметр - код возврата от службы. |
{toc:maxLevel=2} |
|
При помощи файла /app/xge/cfg/hooks можно делать нестандартные настройки сервера. |
h1. Назначение скриптов hooks |
|
h2. В этом разделе приводятся примеры таких скриптов. |
Скрипты *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 |
|
if [ "$1" = 'Имя_службы' -a "$2" = 'Параметр' ]; then : #Ваши изменения здесь fi |
iptables -I asr_billing_input -p tcp --destination-port 10090:10100 -j ACCEPT |
|
fi |
exit 0 {code} |
h2. Автоматизированное использование |
После редактирования скрипта нужно перезапустить соответствующий контейнер: |
|
Например: {code}/app/asr_billing/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. Таким образом вы можете выполнять некие команды не при наступлении какого-то события, а в нужное вам время. |
... |
10 */2 * * * root /cfg/hooks /etc/init.d/networkd start 1>/dev/null 2>/dev/null {code} |
h2. Отладка добавления правил IPTABLES # Проверьте что правило добавляется из командной строки до того как добавлять его в скрипт hooks # Если произошла ошибка добавления правила, информацию о ней можно попробовать найти в логе */var/log/messages* (или выполнив команду *dmesg*) h1. При запуске системы, вижу ошибку выполнения скрипта, что делать? Например: {code} [root@vm185-120 ~]# /app/xge/service start /app/xge start /cfg/hooks: line 8: syntax error near unexpected token `fi' /cfg/hooks: line 8: `fi' Ошибка 2 при запуске hook файла: /cfg/hooks /genconfig crond start Необходимо исправить hook файл! Копирую модули XGE (pid 6001) is running... Reloading Base Web Server: [ OK ] # /app/xge/service start: [FAILED] {code} Попробуйте отладить скрипт, максимально его сократив, убрав все команды и операторы, добавляйте их постепенно. Например, у Вас есть скрипт: {code} #!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dest-port 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev Eeth2 ip route add 0/0 via 10.0.0.2 fi exit 0 {code} Сделайте следующее: {info}Не обязательно постоянно для проверки перезапускать контейнер командой _/app/<app>/service restart_, можно передать параметры напрямую скрипту: {code}bash -x /app/xge/cfg/hooks /etc/init.d/firewall start{code}{info} *bash -x* - это выполнение скрипта с отладкой. # Попробуйте удалить все строки в условии и оставьте там пустой оператор, приведите скрипт к такому виду: {code}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen : fi exit 0{code} Данный пример все равно завершится ошибкой, в скрипте опечатка: вместо "*t{color:blue}h{color}en*" написано "*t{color:red}n{color}en*" # Когда разобрались с синтаксисом, возвращайте все что было в условии постепенно, начните с правила iptables: {code}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dest-port 10000 -j DNAT --to-destination 10.100.0.11:10000 fi exit 0{code} Скрипт так же завершитсяс ошибкой. Вы выоде скрипта мы увидем что она заключается в некорректном формировании правила: {code}# /app/xge/cfg/hooks /etc/init.d/firewall start iptables v1.4.7: unknown option `--dest-port' Try `iptables -h' or 'iptables --help' for more information.{code} После изучения документации по фаерволу "*\-\-d{color:red}est-{color}port*" заменили на "*--dport*" и команда выполнилась успешно. # Далее вернули настройку маррутизации и снова попроловали выполнить: {code:title=Скрипт}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; then iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev Eeth2 ip route add 0/0 via 10.0.0.2 fi exit 0{code} {code:title=Результат выполнения}# /app/xge/cfg/hooks /etc/init.d/firewall start Cannot find device "Eeth2" RTNETLINK answers: File exists{code} Мы получили ошибку того что устройство "Eeth2" не найдено. Все верно - у нас нет устройства с таким именем. Проверив настройки сети имена интерфейсов приходим к выводу что настроить нужно интерфейс eth2: было "*ip route add 10.0.0.2 dev {color:red}E{color}eth2*", стало "*ip route add 10.0.0.2 dev eth2*" # Выполняем исправленный скрипт {code:title=Скрипт}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; then iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev eth2 ip route add 0/0 via 10.0.0.2 fi exit 0{code} {code:title=Результат выполнения}# /app/xge/cfg/hooks /etc/init.d/firewall start RTNETLINK answers: File exists {code} Воспользовавшись [поиском Google|https://www.google.com/search?client=ubuntu&channel=fs&q=RTNETLINK+answers%3A+File+exists&ie=utf-8&oe=utf-8] можно найти информацию по ошибке. Так же можно выполнить скрипт с повышенным логированием: {code}# bash -x /app/xge/cfg/hooks /etc/init.d/firewall start + '[' /etc/init.d/firewall = /etc/init.d/firewall -a start = start ']' + iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 + ip route add 10.0.0.2 dev eth2 RTNETLINK answers: File exists + ip route add 0/0 via 10.0.0.2 RTNETLINK answers: File exists + exit 0{code} Теперь ошибка повторяется дважды. В данно случае проблемы не было: ядро по-сути сообщало что такое правило уже существует, первый раз так как команда "ip route add 0/0 via 10.0.0.2" все-таки выполнилась на одной из предыдущих итераций; второй раз - так как на предпоследней интерации проверки выполнилась и команда "ip route add 10.0.0.2 dev eth2" Надеемся это поможем Вам отлаживать скрипты запуска. Общий принцип - если сразу не понятно где ошибка, максимально сократите и полняйте постепенно исправляя ошибки и добавляя слеующие пункты конечного скрипта. |