Использование ics_tune.sh

Данная статья актуальна для версий Ideco UTM до 7.8.9 включительно. В более поздних версиях данные возможности отсутствуют.

В некоторых случаях требуется низкоуровневое вмешательство в работу сервера, такие как: замена оригинальных файлов на модифицированные, под ваши нужды, копии, добавление правил в файрвол с помощью прямого указания команд iptables или выполнения несложных последовательностей действий после загрузки определенной службы. В нашем продукте есть такая возможность при помощи специального файла пользовательских скриптов.

При загрузке сервера, в самом конце запуска каждой системной службы, система запускает на исполнение файл /usr/local/ics/bin/ics_tune.sh с передаваемыми ему параметрами: какая служба вызывает файл (передается имя службы) и какое действие нужно обработать запускаемому файлу (по умолчанию действие всегда "start" - запустить что-то). Файл запускается в среде bash - командной оболочке linux. Таким образом каждая служба может как то подготовить (tune) систему сразу после своего запуска. В процессе загрузки системы этот файл может запускаться несколько раз, каждый раз разными службами и поэтому все инструкции в этом файле должны вызываться по определенному условию, исходя из переданных файлу параметров, описанных выше. В большинстве случаев достаточно запускать действия всего по одному условию - имени вызывающего файл системного скрипта. Этого вполне хватает, чтобы ассоциировать инструкции файла ics_tune.sh с определенными системными сервисами.

Итак: код в файле пишется в синтаксисе командной оболочки bash, инструкции обосабливаются блоком проверки имени вызывающего скрипта. В конце файла обязательна пустая строка, знания bash и linux крайне желательны. Файл выполняется с повышенными правовыми привилегиями в системе, поэтому неправильные и необдуманные действия легко могут привести к необратимому краху системы.

Структура файловой системы

В UTM присутствует два логических диска, смонтрованных в /mnt/rw_disc и /mnt/bk_disc. Содержимое первого диска в основном содержит изменяемые данные и доступно для записи и удаления файлов от имени пользователя root, второй диск предназначен для сохранения и выгрузки бекапов, доступен для записи и чтения, даже от непривилегированного системного пользователя sysadm. Остальные файлы и данные дистрибутива не предполагаемые к частым изменениям располагаются в "корне" основной файловой системы, смонтированной в / , доступны для редактирования от пользователя root.

С ics_tune.sh нужно работать от имени системного пользователя root. Для этого нужно загрузить сервер в режиме удаленного помощника и получить доступ к консоли linux с помощью ssh (вам поможет ssh-клиент putty для windows или любой терминал linux). Подключившись в консоль linux от root, вы сможете почти неограниченно работать с файловой системой сервера и выполнять на сервере некоторые команды linux.

Необходимо перемонтировать файловую систему в режиме записи:

mount ``-`` o rw,remount ``/

Файл ics_tune.sh удобнее всего редактировать с помощью утилиты mcedit. В конце файла нужно обязательно оставлять пустую строку после всех внесенных изменений.

mcedit /usr/local/ics/bin/ics_tune.sh

Когда вы отредактировали файл, то сохраните его содержимое при выходе из mcedit, перезагрузите систему (команда reboot) и проверяйте работу системы после ее загрузки. Если вы все сделали правильно - ics_tune.sh должен быть вызван во время загрузки системы и действия, описанные в нем, должны были примениться к системе.

Пример замены файлов

Рассмотрим пример содержимого файла для замены конфигурационного файла fail2ban своей модифицированной копией:

#!/bin/bash
if [ "$1" = "rc.mount" ]; then
 mount --bind /mnt/rw_disc/fail2ban.conf /mnt/rw_disc/etc/fail2ban/fail2ban.conf
fi

Как видите, нужно монтировать файл именно во время работы системного скрипта rc.mount, отвечающего за монтирование разделов системы и отдельных файлов в сложной структуре файлов и каталогов сервера Ideco. Надо отметить что привычные пути для известных файлов в среде Linux, как правило, отличаются от путей в нашей системе. Так же необходимо знать, что исполняемые файлы (скрипты или бинарные файлы-программы) не удастся примонтировать с rw диска, так как эти файлы должны иметь права на запуск, а rw диск не имеет возможности хранить запускаемые файлы по соображениям безопасность. Приведенный пример позволяет заменять только текстовые файлы для чтения и записи, модифицированные версии которых вы можете хранить на доступном для записи rw диске.

Пример работы с файрволом

Следующий пример показывает как дополнить фаервол своими правилами для решения такой задачи: есть два сервера Ideco UTM, соединённых по OpenVPN, надо чтобы трафик между ними ходил в обход прокси и фаервол. В первом офисе сеть 192.168.10.0/24, во втором офисе 192.168.11.0/24. Решаем следующим образом:

#!/bin/bash

if [ "$1" = "firewall_custom.sh" ]; then
 iptables -t nat -I PREROUTING -s 192.168.10.0/24 -d 192.168.11.0/24 -j ACCEPT
 iptables -t nat -I PREROUTING -s 192.168.11.0/24 -d 192.168.10.0/24 -j ACCEPT
 iptables -I FORWARD -s 192.168.10.0/24 -d 192.168.11.0/24 -j ACCEPT
 iptables -I FORWARD -s 192.168.11.0/24 -d 192.168.10.0/24 -j ACCEPT
fi

Пример для запрета ping-а внешнего интерфейса:

#!/bin/bashif [ "$1" = "firewall_custom.sh" ]; then
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
fi

Естественно нужно знать синтаксис команд, используемых в ваших скриптах, в данном случае необходимо знание iptables.

Обход правил фильтрации для возможности работы мобильных клиентов Telegram

#!/bin/bash

if [ "$1" = "firewall_custom.sh" ]; then
 iptables -t nat -I PREROUTING -d 149.154.164.0/22 -j ACCEPT
fi

Пример замены файлов ошибок прокси-сервера Squid на свои собственные

#!/bin/bash
if [ "$1" = "rc.mount" ]; then
 mount --bind /mnt/rw_disc/TEMP/ERR_ACCESS_DENIED \
 /usr/share/squid/errors/ru-ru/ERR_ACCESS_DENIED

 mount --bind /mnt/rw_disc/TEMP/ERR_CACHE_ACCESS_DENIED \
 /usr/share/squid/errors/ru-ru/ERR_CACHE_ACCESS_DENIED

 mount --bind /mnt/rw_disc/TEMP/ERR_LIFETIME_EXP \
 /usr/share/squid/errors/ru-ru/ERR_LIFETIME_EXP
fi

Скрипт монтирует три файла часто встречающихся ошибок доступа в прокси-сервере squid. Используется перенос '\' для более удобного редактирования длинных строк. Перед этим нужно создать каталог /mnt/rw_disc/TEMP/ и положить туда ваши страницы ошибок прокси-сервера. После этого они могут быть смонтированы на место оригинальных файлов в системе.

Last updated