Однозначно ответить на этот вопрос невозможно: причин слишком много. Разбираться нужно последовательно.
- Отключите автоматический запуск любых скиптов NetBilling'а демоном
cron
. - Затем убедитесь, что вы правильно описали зоны и создали клиентов. Задайте для начала только одну зону - "Интернет" -, включающую весь трафик (0.0.0.0/0.0.0.0). Помните, что система работает только с трафиком зарегистрированных в ней клиентов!
- Проверьте, что net-acct собирает данные о трафике в файл, указанный в конфигурации NetBilling'а параметром nacctdout, и что среди этого трафика есть трафик добавленных вами клиентов (поля этого файла описаны в конфигурационном файле net-acct).
- Удостоверьтесь, что файлы, заданные в конфигурационном файле параметрами nacctdpidpath (по умолчанию - /var/run/nacctd.pid) и gettraflock (по умолчанию - /var/run/gettraf.lock) присутствуют в системе и PID-файл содержит верное значение PID для процесса nacctd.
- Активируйте вывод отладочной информации скриптом gettraf.pl (переменная $DEBUG в самом начале скрипта), запускайте его вручную и анализируйте выводимую на экран информацию.
Если вы обращаетесь за помощью к автору по этому вопросу - предоставляйте полученный на последнем этапе отладочный вывод.
Первым делом необходимо определиться, как вы хотите закрывать доступ пользователей, т.е. какие средства вы будете для этого использовать.
Поставляемый с системой механизм контроля доступа предполагает, что NetBilling установлен на маршрутизаторе, через который пользователи выходят в Интернет, причём доступ в интернет осуществляется через механизм NAT (MASQUERADE) пакетного фильтра iptables.
Это значит, что у вас должен быть разрешён транзит пакетов
через вашу систему (ip_forward), а также настроен NAT для всех пользователей. Скрипты act.sh
и
deact.sh
будут управлять доступом путём добавления или удаления правила запрещения (-j DROP)
транзита (forwarding - таблица filter, цепочка FORWARD пакетного фильтра iptables)
пакетов от данного клиента. IP-адрес клиента передается скрипты act.sh или deact.sh
первым параметром командной строки.
Кроме того, как известно, управление правилами iptables возможно только от
имени суперпользователя, что в нашем случае является проблемой, т.к. мы желаем
изменять некоторые правила из Web-интерфейса (т.е. от имени того пользователя, от
которого работает Web-сервер). Для решения этой проблемы в комплект поставки
включён бинарный файл приложения ipta
(и исходный текст этого приложения на C - ipta.c),
который выполняет запуск приложения iptables и передачу ему всех собственных параметров
командной строки. Необходимо сделать root'а владельцем этого файла и выставить на него
бит SUID. Далее от имени непривилегированного пользователя можно попробовать работать с
ipta также, как с iptables - вы должны без проблем манипулировать правилами
пакетного фильтра.
Замечание: Поскольку расположение приложения iptables различно в разных дистрибутивах, вы должны убедиться (по исходному коду ipta.c), что в нём указан справедливый для вашей системы путь к iptables. Более подробно это описано в инструкции по установке из комплекта поставки NetBilling.
Итак, всё это означает, что необходимо добиться, чтобы ручной вызов скрипта act.sh
или deact.sh (с передачей IP-адреса в качестве параметра) от
имени непривилегированного пользователя приводил к изменению таблицы правил пакетного
фильтра, и это изменение в свою очередь приводило к разрешению (act.sh
) или запрещению
(deact.sh
) доступа для данного пользователя. Т.е. после этого, если в
конфигурационном файле netbill.conf пути к скриптам act.sh и deact.sh
прописаны верно, система контроля доступа у вас будет работать.
Разрешить:# echo "1" > /proc/sys/net/ipv4/ip_forward
Запретить:# echo "0" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 192.168.22.0/24 -d ! 192.168.22.0/24 -j MASQUERADE