Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Если файл конфигурации еще не существует, он создается и добавляется правилом с номером «$count_startnum + 1». Если же файл существует, то происходит проверка на наличие в нем пользователя с именем «$username», и в случае, если такой пользователь есть, выбирается имя соответствующего правила. Если пользователя нет, он добавляется с номером правила, вычисленным на основе числа строк в файле (очень просто, но именно это накладывает описанные выше ограничения). Переменная $username_prefix добавляется в файл конфигурации перед именем пользователя, то есть если она равна «_», то название правила изменится с username на _username, что существенно облегчит выборку и сортировку результатов подсчета трафика командой ipastat.
Непосредственное взаимодействие с ipa производится в двух случаях: когда добавляются пользователи, ipa посылается сигнал HUP, а когда правило удаляется из таблицы ipfw, происходит сброс накопленной информации командой «ipa -k dump».
В приведенном только что скрипте главное – не запутаться в переменных. Скрипту в качестве параметров передаются «$action $username», которые внутри него становятся соответственно $1 и $2. Так же ведет себя функция ipa_add_user, которая располагает переданные «$2 $usernum» в порядке поступления, $1 и $2. Внутренние переменные awk обозначаются так же, но содержат поля входного потока. Чтобы частично устранить путаницу, сначала переменным даются соответствующие алфавитные имена, а затем уже они используются по назначению.
Функция printf позволяет форматировать текст при выводе, например добавлять в строку переносы « ». Комбинация команд grep, head и tail, где для первой номер строки вычисляется с помощью expr, позволяет выделить из файла одну строку, из которой awk выделяет номер правила. В другом варианте (правила еще нет) количество строк в имеющемся файле подсчитывает команда «wc -l».
Как только получен номер правила, остается лишь добавить его в таблицу ipfw. Всевозможные проблемы несовместимости уже имеющегося набора правил и того набора, что модифицируются скриптом count_ipfw, проявляются именно на этом этапе. Написать сразу что-то более-менее универсальное практически невозможно, поэтому скрипт рассчитан только на один стандартный тип настройки ipfw: OPEN.
Для этого нужно указать в /etc/rc.conf:
firewall_enable="YES"
firewall_type="OPEN"
Кстати, если в вашем ядре еще нет поддержки ipfw, совсем необязательно его перекомпилировать. Достаточно загрузить соответствующий модуль, и чтобы загрузка выполнялась автоматически при каждом старте системы, добавить соответствующую строку в /boot/loader.conf (за примерами – в /boot/defaults/loader.conf). Если эти манипуляции производятся на удаленном сервере, не забудьте о мерах предосторожности.
Команда «ipfw show» при настройках ядра (или модуля) по умолчанию покажет следующее:
# ipfw show
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
65000 0 0 allow ip from any to any