Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
fi
usernum=`$bindir/count_$count_prog $action $username`
$bindir/count_$count_fw $action $usernum $address
echo "[`date '+%d.%m.%y %H:%M'`] $action $username $address $usernum" >> $logfile
done
Назовем этот скрипт count_gate.
От скрипта, собирающего данные о пользователях, они в цикле передаются read через канал, к которому можно подключить этот скрипт как непосредственно, так и через tcp-клиент. Способ подключения определяет переменная «$connect».
Имя скрипта, ответственного за добавление/удаление правил, определяет переменная «$count_fw», а скрипта, осуществляющего взаимодействие с системой учета трафика переменная «$count_prog». В нашем случае это скрипты count_ipfw и count_ipa. Последний, запущенный с параметрами $action и $username, выдает номер правила, которое затем в качестве одного из параметров передается скрипту count_ipfw.
Переменная $$ содержит номер процесса скрипта. При запуске скрипт записывает ее значение в файл /var/run/count.pid. Встроив проверку на соответствие этого значения реально работающему процессу, можно предотвратить запуск более одного процесса count_user.
Прежде чем передавать данные на обработку скриптам count_ipa и count_ipfw, с помощью grep производится проверка на соответствие определенному шаблону. Получаемым данным не всегда можно доверять, особенно если они передаются по сети с другого сервера. Тем более, что все действия на стороне шлюза во внешнюю сеть производятся под root (необходимо для добавления/удаления правил ipfw).
Собранные данные вместе с датой и временем записываются в лог-файл.
Скрипт count_ipa, получив имя пользователя, должен выдать номер правила ipfw. Задача эта не самая простая, но ее можно сильно облегчить, если наложить на файл конфигурации некоторые ограничения. Во-первых, выделить файл конфигурации пользователей в отдельный файл и подключить его соответствующей директивой:
include {
file(?) = /usr/local/etc/ipa.users
}
Во-вторых, на каждого пользователя должно приходиться по три строки, а номера правил должны последовательно возрастать на 1 с каждым правилом.
Два последних ограничения довольно необычны, но чтобы их снять, потребовалось бы существенно усложнить скрипт. Соблюдать же их просто: достаточно не редактировать файл вручную, а предоставить это скрипту:
#!/bin/sh
ipa_users="/usr/local/etc/ipa.users"
username_prefix="_"
action=$1 ; username=$2