В первой части Считаем трафик с помощью Netams я показал как устанавливать и минимально настроить Netams до работоспособного состояния. В этой статье я покажу как к Netams прикрутить сервис квот, а также немного примеров политик учета трафика.
Сервис квот вплотную завязан с firewall системы. Например для freebsd для того, чтобы сервис quota заработал необходимо, чтобы в ядре были включены опции IPFIREWALL и IPDIVERT. Для linux необходим модуль IPQ, который входит в большинстве поставок ядер 2.4.x и 2.6.x и системы iptables.
Правка Netams конфига
Итак, правим конфиг netams, добавляя туда service quota, а также правим service data-source 1, ну и добавляем service monitor (для мониторинга хостов).
1. Service quota + policy
service quota
policy internet
block-policy nonblock
soft-treshold 90
notify soft {owner}
notify hard {owner} admin
notify return {owner}
пояснение:
policy internet – эта политика по которой мы будем блокировать хост. Выглядит в конфиге примерно так:
policy name internet target proto ip
и обозначает сбор всего tcp,udp,icmp трафика прошедшего через интерфейс..
block-policy nonblock – это строчка показывает, что когда наступит квота для хоста, пропускать трафик перечисленный в политике nonblock (трафик, который не попадает под действие квоты). Фактически я бы рекомендовал в эту политику помещать icmp пакеты и очень нужный трафик, например почтовый. Когда квота закончилась почта будет ходить. В конфиге netams.conf запись о политике nonblock выглядит так:
policy name nonblock target policy-or special-sites local-traffic icmp smtp pop
Т.е. nonblock является составной (результирующей) политикой, состоящей из нескольких политик, на это указывает идентификатор policy-or. nonblock состоит из политик special-sites, local-traffic, icmp, smtp, pop. Сами эти политики у меня указаны так
policy name smtp target proto tcp port b25
policy name pop target proto tcp port b110
policy name local-traffic target file /usr/local/etc/local.txt
policy name special-sites target file /usr/local/etc/sites.txt
policy name icmp target proto icmp
Я думаю тут особые пояснения не нужны. Разве что в файлах local.txt и sites.txt перечислены IP сайтов с указанием масок.
Примеры файлов:
$ cat ./local.txt
192.168.0.0/16
$ cat ./sites.txt
74.54.186.226/32
213.180.204.8/32
soft-treshold 90- срабатывание “мягкой” квоты, по которой должно отсылаться email сообщение пользователю. Пока эта функция в режиме теста, сообщение как-то замечено не было :(. А вот сообщения по жесткой квоте и обнулении квоты приходят точно по указанному в юните email.
Нижеприведенные строки это как раз перечисление кого оповещаем по наступлении того или иного события. Здесь return обозначает возврат квоты в исходное состояние, например в начале следующего месяца, когда трафик по квоте будет сброшен.
notify soft {owner}
notify hard {owner} admin
notify return {owner}
Теперь задаем сами квоты в Netams. В сомом конфигурационном файле квоты не указываются, их надо задавать при подключении через telnet к порту на котором слушает Netams.
Итак, порядок действий для задания квоты:
- На компьютере с установленной и запущенной netams сделать telnet port_netams (по умолчанию 20001)
- Ввести логин, пароль, по умолчанию admin, aaa
- Перейти в режим ввода команд – configure terminal (только если у вас версия Netams выше 3.4.0)
- Набрать команду service quota
- Далее уже из подменю quota, например дать команду set name rokada policy internet active month 1536M in
Обязательно в команде указать правильно название юнита и политики по которой будет считаться квота.. Политики квот можно выставить, на час, день, неделю, месяц. Квота может считаться входящей (in), исходящей (out), а также суммарная (sum) – это сумма in+out. В данной примере мы задали квоту юниту с названием rokada, по политике internet с входящим трафиком 1,5Gb в месяц на скачку.
Как это выглядит в консоле
# telnet localhost 20001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
NeTAMS 3.4.5 (3490.1) mik@m1k / Mon 26 Jul 2010 11:08:53 +0400
Username: admin
Password:
# conf t
(config)# service quota
switching to service quota:0 for configuring
(config-quota:0)# set name rokada policy internet active month 1536M in
Creating quotadata to unit rokada, policy internet
unit 009752 quota is set to ACTIVE
(config-quota:0)#
# exit
Connection closed by foreign host.
2. service data-source 1
Теперь внесем изменения в netams.conf в data-source 1. Это тот интерфейс, который у нас смотрит в интернет. Суть изменений в том что статистика собираемая по типу libpcap не может работать с квотами. Поэтому надо вмешиваться в правила firewall системы, иначе никак.
Для freebsd правим service data-source 1 так:
service data-source 1
type ip-traffic
source divert 199
rule 39 "ip from any to any out via bge0"
rule 52 "ip from any to any in via bge0"
layer7-detect urls
пояснение:
type ip-traffic – данные берутся путем перехвата ip-пакетов из ядра через divert socket
source divert 199 – это будет номера правил divert для Netams
rule 39 “ip from any to any out via bge0” и rule 52 “ip from any to any in via bge0” это правила для IPFW с обязательным указанием номеров правил. Номера правил поставьте свои. Смотрятся через команду ipfw show.
И помните это важно – правила netams divert должны обрамлять правила IPFW сети, которую мы натим в инет.
Вот как в этом примере
# ipfw sh
skip....
00039 23956855 3073717745 divert 199 ip from any to any out via bge0
00040 19841411 1821416308 divert 8668 ip from 192.168.0.0/24 to any out via bge0
00050 54066670 19207383192 divert 8668 ip from any to me in via bge0
00052 27848384 9602053191 divert 199 ip from any to any in via bge0
skip....
В примере обратите внимание на номера правил 39 и 52, видите, они обрамляют 2 (40 и 50) правила для NAT сети в интернет.
Нельзя останавливать netams убиванием его процессов, т.к. правила 199 останутся в ipfw, и это грозит последствиями отпадания инета или вообще потери связи с сервером. Использовать надо только скрипт корректной остановки netams, который убирает обрамляющие правила 39 и 52.
Если у вас linux, правим правила service data-source 1 так:
service data-source 1
type ip-traffic
source ipq
layer7-detect urls
Здесь type ip-traffic – данные берутся путем перехвата ip-пакетов из ядра через netfilter.
source ipq говорит о том, что пакеты будут заворачиваться в программу Netams и она может отдать или не отдать их системе обратно. Используется библиотека libipq.
Для работы должен быть загружен модуль ip_queue. Проверить стоит ли этот модуль в системе достаточно просто, выполните от root или sudo команды
# modprobe ip_queue
# lsmod | grep queue
ip_queue 11024 0
Надеюсь модуль у вас есть, а иначе пересобирать ядро или компилировать модуль.
Если для freebsd c firewall достаточно все просто, то в linux я приведу его конфиг. Чтобы вы знали в какое место в конфиге вставлять queue обработку
Примерный конфиг firewall в linux – fw-queue.txt
layer7-detect urls – это строка для сервиса monitor. Для проведения тестов ее лучше убрать..
В принципе можно пробовать запускать netams с новым конфигом и для начала проверить как будет обрабатываться подсчет трафика.
Потом зайти в админскую консоль нажав на
При необходимости активировать квоту. В разных версиях netams этот процесс может отличаться. Раньше при задании квоты она активировалась автоматом, в версии 3.4.5 почему-то у меня квота была неактивна. А после активации пришлось заново вбивать квоту 1,5Gb, но уже через web админскую консоль. Смотрите скриншоты.
Если все правильно работает, то на страничке статистики netams будет ссылки на текущий конфиг и остатки текущих квот для юнитов.
3. service monitor
Сервис нужен для мониторинга посещения хостов. Может показывать строки заголовков http.
Как было сказано выше , добавить строку layer7-detect urls в service data-source.
Затем в конфиге созать секцию монитор.
service monitor 0
monitor to file /var/log/netams_monitor.log
monitor unit 009780
monitor unit 009790
monitor unit 009800
пояснение:
monitor to file /var/log/netams_monitor.log – пишет лог в указанный файл. Если трафик большой, то лучше сделать ротацию файла чтоб не пух. Также можно заносить данные в базу mysql, а потом делать выборки с помощью admin скриптов, которые идут в поставке netams.
Далее идут id юнитов, за которыми мы хотим следить.
Хочу привести полный конфиг моего netams на одном из серверов. В конфиг внесены изменения насчет паролей и реальных ip, email. Поэтому бездумный copy+past не сработает, меняйте под себя. показать
Обратите внимание в политике по умолчанию restrict all drop local pass все юниты, которые не указаны в конфиге нетамс будут отрезаны от интернет. Netams будет блокировать их доступ.
Некоторые моменты подсчета трафика в netams
Что-то я никак не понимал работу политик netams. Но что надо понимать обязательно.
К примеру есть политики
policy oid 0DE24F name internet target proto ip
policy oid 0DE25F name smtp target proto tcp port b25
и есть описание юнита
unit host oid 009750 name mail ip 62.152.xxx.xxx acct-policy %smtp internet
По идее под политику internet попадает и политика smtp, но здесь знак % означает, что как только сработает политика smtp то политика дальше не пойдет по цепочке и трафик в internet уже не попадет. А вот если знак % не поставить, то в политику internet попали бы и smtp и все остальное. Т.е. в политике interent был бы фактически весь трафик.
Если указать только
unit host oid 009750 name mail ip 62.152.xxx.xxx acct-policy internet
то счетчик будет учитывать все tcp, udp, icmp на этом хосту..
Т.е надо внимательно следить за очередностью применения политик на юните.
Замечания
Если у вас не работают все функции web админки netams надо доставить необходимы модули в систему. В данном случае установлены следующие perl модули:
bsdpan-Crypt-GeneratePassword-0.03
p5-DBD-mysql50-3.0007
p5-DBI-1.52
p5-Net-Daemon-0.39
Есть какие-то подводные камни в настройке?
У меня при конфиге:
policy oid 006DF3 name all-ip target proto ip
policy oid 049E5D name www target proto tcp port 80 81 8080 3128
policy oid 0D8C31 name mail target proto tcp port 25 110
policy oid 08698A name ftp target proto tcp port 21
policy oid 03C4BD name urls target layer7-detect
policy oid 0F3EAB name FTG target policy-or ftp mail
restrict all pass local pass
unit group oid 0D39E9 name NETWORK acct-policy all-ip www mail
unit net oid 042FC7 name LAN ip 192.168.32.0/24 no-local-pass acct-policy all-ip www mail
unit user oid 051935 name Laptop ip 10.0.1.11 parent NETWORK acct-policy all-ip www ftp mail urls fw-policy FTG
service data-source 1
type ip-traffic
source ipq
layer7-detect urls
rule 90 "INPUT -p all -j QUEUE"
rule 100 "FORWARD -p all -j QUEUE"
service monitor 1
monitor to storage 1
monitor unit Laptop
service quota
soft-treshold 85
policy www
block-policy FTG
notify soft owner
notify hard owner
notify return owner
Есть сервер, который раздает по WiFi инет через заранее поднятый NAT.
Задумка была такая: чтобы при наступлении квоты обрубался www трафик и оставался разрешенным только ftp и почта, тем не менее наступает квота и блокируется весь траф. В iptables за исключением NATa и строк из конфига с очередью ничего не прописывал. В чем может быть проблема?
Давайте попробуем разобраться…
Из описания конфига netams и описания схемы сети, я не совсем понял вот что:
192.168.32.0/24 – эта сеть стоит за NAT, а это 10.0.1.11 что за сеть?
На какой из unit применена квота?
Далее я предполагаю что на laptop..
Вот это
fw-policy FTG
в строке описания unit laptop я так понимаю, что эту политику нужно пропускать при достижении квоты, а зачем же указывать вacct-policy
политики mail и ftp?предлагаю поэкспериментировать 🙂 Оставить в подсчете только общую политику без fw-policy у меня так работает.. Вот примерно так
unit user oid 051935 name Laptop ip 10.0.1.11 parent NETWORK acct-policy all-ip
Остальное можно все так и оставить, вроде проблем нет..
И еще важный момент, не важно что вы пишите в конфиге, важно как это понимает netams, поэтому сделайте на сервере
telnet localhost 20001
пройдите авторизацию и выведите конфиг в консоле, или ждите когда статистика запишется и запишится текущий конфиг. Это я к тому что сравните как ваш netams.cfg понимает netams. У меня много раз было, вроде и правильно пишу в cfg, а в самом netams что-то не хватает. Обязательно дайте конфиг, который выводит netams.
И для linux НЕ надо писать
rule 90 "INPUT -p all -j QUEUE"
rule 100 "FORWARD -p all -j QUEUE"
напишите просто перед строками NAT в самом конфиге firewall
FORWARD -p all -j QUEUE
Input цепочку лучше не трогать..
Посмотрите мой пример конфига firewall для linux, там кое-что можно опустить, но в целом он простой и короткий.
Также советую сделать в netams цепочку icmp и поставить ее в разрешения трафика при наступлении квоты. Просто отлаживать командой ping проще.
Если что, то спрашивайте
# show config
#NeTAMS 3.4.5 (3490.1) root@lerk-laptop / Wed 10 Nov 2010 13:19:08 +0300
#configuration built Mon Jan 31 11:32:31 2011
#begin
#global variables configuration
debug none
language ru
user oid 00D668 name admin real-name "Lerk" crypted $1$$s60wMoB19BVx6Fpu41bLA1 email root@localhost permit all
#services configuration
service server 0
login local
listen 20001
max-conn 6
service processor
lookup-delay 20
flow-lifetime 120
policy oid 006755 name ip target proto ip
policy oid 0B9291 name www target proto tcp port 80 81 8080 3128
policy oid 006058 name icq target proto tcp port 5190
policy oid 025EC3 name icmp target proto icmp
policy oid 026D24 name nonblock target policy-or icmp icq
policy oid 00B7AF name urls target layer7-detect
restrict all pass local pass
unit group oid 024919 name NETWORK acct-policy ip www
unit net oid 0004EE name LAN ip 10.0.1.0/24 no-local-pass acct-policy ip www
unit host oid 0FDD86 name server ip 10.0.1.1 parent NETWORK acct-policy ip www
unit user oid 062755 name E52 ip 10.0.1.15 parent NETWORK acct-policy ip fw-policy nonblock
service data-source 1
type ip-traffic
source ipq
layer7-detect urls
rule 10 "FORWARD -p all -j QUEUE"
service monitor 1
monitor to storage 1
monitor unit E52
service quota
policy ip
block-policy nonblock
notify soft owner
notify hard owner
notify return owner
Добрый день. Спасибо за комментарий, помогло. С таким конфигом квотирование корректно заработало. Соответсвенно квотирование включено на E52.
Тем не менее остались вопросы:
1. acct-policy влияет только на подсчет трафика? То есть допустим
acct-policy ip www mail ftp icq
будет считать траффик по соответствующим политикам, аacct-policy ip %www mail ftp icq
будет считать ip и www(в случае, если www траф есть)?2. Если указана политика
restrict all drop local drop
, то тогда уже надо для каждого юнита в частности прописывать fw-policy, который будет указывать на пропускаемые типа траффика?Если еще что вспомню, спрошу)
Спасибо)
И вам спасибо за коммент рад что помог
Отвечаю на вопросы.
1. И так
acct-policy ip www mail ftp icq
и так
acct-policy ip %www mail ftp icq
будет считаться трафик по всем политикам в вашем конкретном случае. Различие вот в чем (кстати в статье я это писал).
Все что попало в политику %name дальше уже не пойдет и не будет считаться. У вас трафик в политике www уникальный с определенных портов, поэтому он не будет пересекаться с политиками mail, ftp, icq, поэтому такой оборот в “%” особого смысла не имеет в данном случае.
В политике ip, когда она идет первой по списку собирается весь трафик используемой этой машиной, т.е. в это число будет входить и www и mail, ftp, icq.
А вот если поставить ip последней, а все остальное завернуть в “%”
acct-policy %www %mail %ftp %icq ip
то в счетчик ip попадет лишь то, что не забрали предыдущие политики. Если хоть у одной политики не будет знака %, то в ip это просуммируется.Надеюсь разжевал 🙂
На второй вопрос, судя по документации Netams так как вы и сказали, надо прописывать fw-policy. Но я честно признаюсь с этим не игрался..
Спасибо огромное за статью!!!
Вопрос родился следующий:
Такая ситуёвина… в сервисе квот описана
block-policy nonblock,
как и у тебя в статье… и соответственно сама политика тоже описана…
так вот запускаю, допустим, видео “вконтакте”…
но оно продолжает грузиться даже при наступлении квоты юнита, но при этом другие сайты уже не открываются….
а если закоментировать в конфиге саму политику nonblock то при наступлении квоты видео грузиться перестает сразу же…
Был бы признателен, если есть возможность, пнуть, в какую сторону копать…
без примера конфига относящегося к данным блокируемых policy, а также какой URL пытаетесь открыть я не смогу ответить на вопрос.
Если как у меня в конфиге, то у меня есть special-sites в файле котором занесены ip сайтов.
Вконтакте закрыть или открыть будет сложновато таким образом, т.к. надо знать целую кучу ip этого домена.
Так что приведи конфиг и если есть, то и данный файлов например таких как sites.txt.
Да, прошу прощения…
Дело даже не именно “вконтакте”, а в том что потоковое видео !продолжает! грузиться и воспроизводиться даже при наступлении квоты, будь-то яндекс, вконтакте, ютуб и т.д.
а если в конфиге закоментировать(удалить) строчку
policy oid 0B6899 name nonblock target policy-or icmp smtp pop3
то такого не происходит, т.е. при наступлении квоты интернет обрезается мгновенно и полностью…
хм.. действительно загадка 🙂 быстренько ограничил тестовую машину этими же правилами как у тебя в конфиге и испытания показали, что потоковое видео и видео с роликов не блокируется при достижении квоты! А новые соединения уже не создаются.. Почта, пинги работает как и должны по nonblock.
Выкинул nonblock из конфига, видео отсохло по достижении квоты, но если честно сказать тоже не сразу как за квоту перевалило, но довольно быстро.
Думаю надо идти на сайт netams.com и спрашивать там, думаю баг 🙂
Кстати, а какая версия у тебя? я смотрю там уже 4 вовсю тестят.. Надо бы попробовать..
Спасибо что написал сюда об этом, было интересно. Если что-то прояснится по этому вопросу дай знать.
Версия 3.4.5 из стандартных портов FreeBSD
Ок… буду ковырять… наковыряю – непременно отпишусь…
И тебе спасибо за участие 😉
Еще раз спасибо за статью…!
У меня возникло не много вопросиков.
1. Вы случайно не знаете почему появляется ошибка:
ds_ipq:1 [INFO]: service ds_ipq:1 thread start failed
ds_ipq:1 [INFO]: service ds_ipq:1 thread cancelled
В файл правил iptables была добавлена строчка – modprobe ip_queue
Что самое странное после перезапуска сервиса Netams ошибка пропадает.
Если не добавить строчку modprobe ip_queue, то появляется ошибка –
data-source [ERR]: ipq_set_mode failed: Failed to send netlink message
2. Я взял за основу ваш файл правил iptables, подправив его немного.
Там вот есть правило NAT, хотелось бы узнать, после применения правил, Интернет на клиентских компьютерах локальной сети должен ли быть?
Или доступ в Интернет уже будет задаваться в самом NetAMS?
по 2 вопросу. Доступ будет задаваться в Netams если стоит политика ограничения
restrict all drop local pass
, еслиrestrict all pass local pass
тогда Netams будет пропускать всех кто указан в правилах NAT iptables.Все заработало )))
А как можно сделать так, чтобы например NeTAMS не пускал ни кого в Интернет кроме тех у кого есть квоты?
Вы немного невнимательно прочли статью ))
Строчка “restrict all drop local pass” как раз для вас. В конфиге прописываете только тех кому можно в инет + на каждый unit прописываем квоты.
Спасибо mik, все заработало…=)