Сгибнев Михаил
В данный момент передо мной встала задача посчитывать трафик в маленькой локальной сети и управлять им соответственно моим потребностям.
Так как никаких коммерческих целей, требующих покупки сертифицированного биллинга, я перед собой не ставил, то решено было
остановиться на системе
NeTAMS, поскольку:
- Большое количество положительных отзывов
- Возможность работы с протоколом NetFlow
- Наличие достаточно подробной русской/английской документации
-
Форум, на котором довольно быстро отвечают на твои вопросы
Тарифных планов предусмотрено было несколько, в частности, безлимитный (128 кб/с к клиенту), но не один из них не предусматривал
возможности отключения. При этом, части, отвечающие за блокировку клиента, были вставлены в конфигурацию и
маршрутизатора и сервера. Если кто-то имеет опыт настройки такого рода сервиса, то буду рад услышать комментарии.
Cisco
В качестве маршрутизатора используется Cisco 2801:
cisco 2801 (revision 4.1) with 196608K/65536K bytes of memory.
Processor board ID FTX0902X0E1
2 FastEthernet interfaces
1 Virtual Private Network (VPN) Module
DRAM configuration is 64 bits wide with parity disabled.
191K bytes of NVRAM.
62720K bytes of ATA CompactFlash (Read/Write)
Итак, нам необходимо соответстующим образом необходимо сконфигурировать маршрутизатор
на отдачу статистики по NetFlow, дать возможность управления по rcp/rsh и настроить очереди приоритетов.
Доступ по rsh очень удобен для получения данных и изменеия конфигурации устройства,
тем более он необходим, если вы захотите блокировать трафик клиента, исчерпавшего лимит.
Как наиболее простое, разберемся с настройкой Cisco, экзотики никакой нет, самые интересные моменты рассмотрены отдельно:
!
version 12.3
service config
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname hpux
!
boot-start-marker
boot-end-marker
!
!
memory-size iomem 25
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
no aaa new-model
ip subnet-zero
ip cef
!
!
!
!
ip flow-cache timeout inactive 60
ip flow-cache timeout active 10
ip ips po max-events 100
no ip domain lookup
ip host netams 192.168.50.4
no ip rcmd domain-lookup
ip rcmd rcp-enable
ip rcmd rsh-enable
ip rcmd remote-host cisco 192.168.50.4 root enable
no ftp-server write-enable
!
!
!
username cisco privilege 15 secret cisco
!
!
!
!
!
interface Loopback0
ip address 192.168.10.1 255.255.255.0
ip route-cache policy
ip route-cache flow
!
interface FastEthernet0/0
description "Internet"
ip address 10.1.1.53 255.255.255.0
ip nat outside
ip virtual-reassembly
ip route-cache policy
ip route-cache flow
ip policy route-map MAP
duplex auto
speed auto
priority-group 1
traffic-shape group 100 8000 1500 2000 1000
!
interface FastEthernet0/1
ip address 192.168.50.1 255.255.255.0
ip access-group 150 in
ip nat inside
ip virtual-reassembly
ip route-cache policy
ip route-cache flow
duplex auto
speed auto
traffic-shape group 102 128000 7936 7936 1000
!
ip classless
ip route 0.0.0.0 0.0.0.0 10.1.1.100
ip flow-export source FastEthernet0/1
ip flow-export version 5
ip flow-export destination 192.168.50.4 20001
no ip http server
no ip http secure-server
ip nat translation tcp-timeout 300
ip nat inside source list 1 interface FastEthernet0/0 overload
!
!
access-list 1 permit 192.168.50.0 0.0.0.255
access-list 100 permit udp any any
access-list 101 permit ip any 192.168.50.0 0.0.0.255
access-list 102 permit ip any host 192.168.50.3
access-list 110 permit ip any any precedence network
access-list 120 permit ip any any precedence critical
access-list 130 permit ip any any precedence internet
access-list 140 permit ip any any precedence routine
access-list 150 dynamic NETAMS deny ip any any
access-list 150 permit ip any any
priority-list 1 protocol ip high list 110
priority-list 1 protocol ip medium list 120
priority-list 1 protocol ip normal list 130
priority-list 1 protocol ip low list 140
priority-list 1 default low
priority-list 1 queue-limit 30 60 90 120
snmp-server ifindex persist
snmp-server enable traps tty
route-map MAP permit 10
match ip address 101
set interface Loopback0
!
!
!
control-plane
!
!
line con 0
line aux 0
line vty 0 4
exec-timeout 30 0
password cisco
login local
!
end
Очереди приоритетов.
Priority Queuing (PQ) обеспечивает безусловный приоритет одних пакетов над другими.
Всего 4 очереди: high, medium, normal и low. Обработка ведется последовательно (от high до low),
начинается с высокоприоритетной очереди и до ее полной очистки не переходит к менее приоритетным очередям.
Таким образом, возможна монополизация канала высокоприоритетными очередями. Трафик, приоритет которого явно
не указан, попадет в очередь по умолчанию (default). (
Знак качества. Cisco QoS для начинающих II)
access-list 110 permit ip any any precedence network
access-list 120 permit ip any any precedence critical
access-list 130 permit ip any any precedence internet
access-list 140 permit ip any any precedence routine
!
priority-list 1 protocol ip high list 110
priority-list 1 protocol ip medium list 120
priority-list 1 protocol ip normal list 130
priority-list 1 protocol ip low list 140
priority-list 1 default low
priority-list 1 queue-limit 30 60 90 120
!
interface FastEthernet0/0
priority-group 1
Мы определяем четыре очереди и выставляем соответствующие приоритеты (последний, пятый, является значением по умолчанию
и имеет низкий приоритет), устанавливаем размеры очередей и назначаем группу на внешний интерфейс.
Ограничение скорости клиента с адресом 192.168.50.3 в 128 кб входящего трафика
interface fastethernet0/1
traffic-shape group 102 128000 7936 7936 1000
access-list 102 permit ip any host 192.168.50.3
Здесь, в параметре traffic-shape, у нас указаны последовательно: номер ассес-листа, пропускная способность,
размер всплеска (в байтах), превышение размера всплеска (в байтах) и размер буфера.
По определению, NetFlow учитывает только входящий на роутер трафик.
Это вызывает проблемы учета при использовании трансляции адресов. Действительно,
пакеты от машин внутренней сети приходят на роутер и учитываются верно, но обратные
ответы извне поступают с адресом dst внешнего интерфейса. Поскольку трансляция адресов
происходит после учета, то статистика всего входящего трафика будет содержать сумму всего
трафика, пришедшего на адрес внешнего интерфейса, и нули для адресов внутренней локальной
сети. Для корректного учета, вам необходимо использовать policy routing. Установленная
на роутере операционная система должна поддерживать эту функцию.
(
http://www.netams.com/doc/cfg_cisco.html)
ip cef
!
interface Loopback0
ip address 192.168.10.1 255.255.255.0
ip route-cache policy
ip route-cache flow
!
interface FastEthernet0/0
description "Internet"
ip address 10.1.1.53 255.255.255.0
ip nat outside
ip route-cache policy
ip route-cache flow
ip policy route-map MAP
!
interface FastEthernet0/1
ip address 192.168.50.1 255.255.255.0
ip nat inside
ip route-cache policy
ip route-cache flow
!
ip nat inside source list 1 interface FastEthernet0 overload
ip classless
ip flow-export version 5
ip flow-export destination 192.168.50.4 20001
!
access-list 1 permit 192.168.50.0 0.0.0.255
access-list 101 permit ip any 192.168.50.0 0.0.0.255
route-map MAP permit 10
match ip address 101
set interface Loopback0
Ограничим UDP трафик значением 8Kb/s:
interface FastEthernet0/0
traffic-shape group 100 8000 1500 2000 1000
!
access-list 100 permit udp any any
Для того, чтобы NeTAMS мог блокировать трафик хостов, перебравших квоту, необходимо следущее:
interface FastEthernet0/1
ip access-group 150 in
!
no access-list 150 dynamic NETAMS deny ip any any
no access-list 150 permit ip any any
Таким образом мы установим динамический ассесс-лист, по умолчанию разрешающий все и
запрещающий адреса, создаваемые динамическим правилом. Я ще раз повторяю, что в моем примере
данная возможность не использовалась и имеющиеся настройки работать не будут (по крайней мере у меня - не работали)!
NeTAMS
Установка делалась на FreeBSD, проверялась работа на NetBSD.
Для компиляции на NetBSD необходимо в файле src/common.c удалить тело функции cShowSystemHealth(Connection*, int),
что не повлияет на работу программного комплекса.
В настоящее время, текущей версией NeTAMS является 3.3.2 и взять ее можно
здесь. Учтите, что при установке из портов FreeBSD
вам потребуются исходные тексты ядра (хотя зачем?).
В качестве подготовительного этапа необходимо установить базу данных MySQL (также поддерживаются другие
базы данных) и вэб-сервер Apache. Независимо от типа *BSD, установку можно выполнить из прекомпилированных
пакетов или из системы портов.
Создадим базу данных:
bash-3.00# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 561 to server version: 5.0.16
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database netams;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on netams.* to netams@'localhost' identified by "password";
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
Создадим файл конфигурации следующего содержания:
#NeTAMS version 3.3.2 (build 2823.1) compiled by [email protected]
#configuration built Thu Jan 12 15:33:02 2006
#begin
#global variables configuration
debug none
language ru
user oid 0ABD71 name admin real-name "Admin" crypted $1tt5 email root@localhost permit all
#services configuration
service server 0
login local
listen 20001
max-conn 6
service processor
lookup-delay 60
flow-lifetime 180
policy oid 0B8138 name ip target proto ip
policy oid 0B166B name www target proto tcp port 80 8080 3128
policy oid 033644 name mail target proto tcp port 110 25
policy oid 0683AB name icmp target proto icmp
restrict all drop local pass
unit net name LAN ip 192.168.50.0 mask 255.255.255.0 no-local-pass acct-policy ip
unit group oid 0768B1 name CLIENTS acct-policy ip www mail icmp
unit host oid 009742 name NetBSD ip 192.168.50.3 parent CLIENTS
unit host oid 08D228 name FreeBSD ip 192.168.50.4 parent CLIENTS
storage 1 all
service storage 1
type mysql
user netams
password password
accept all
service data-source 1
type netflow
listen 192.168.50.4 20001
source 192.168.50.1
service quota
soft-treshold 90
policy ip
block-policy icmp
set name FreeBSD active
set name NetBSD active
notify soft {owner}
notify hard {owner} 0ABD71
notify return {owner}
storage 1
service alerter 0
report oid 06100 name rep1 type traffic period day detail simple
smtp-server localhost
service html
path /usr/local/www/data
run 1min
url http://192.168.50.4/
htaccess yes
client-pages all
account-pages all
service scheduler
oid 08FFFF time 1min action "html"
service billing
subplan 1 fee 30.000000 spread monthly
subplan 1 included 10.000G in 10.000G out
subplan 1 adjust-fee yes
subplan 1 policy ip
subplan 1 overdraft 0.000000 in 0.000000 out
subplan 2 fee 10.000000 spread monthly
subplan 2 included 100.000M in 100.000M out
subplan 2 adjust-fee yes
subplan 2 policy ip
subplan 2 overdraft 0.050000 in 0.000000 out
plan 1 name 128/64
plan 1 description "Unlimit 128"
plan 1 subplan 1
plan 2 name Basic
plan 2 description "Basic, include 100M"
plan 2 subplan 2
storage 1 all
service acl-server
hostname 192.168.50.1
direction src
acl-number 150 cisco
dynamic-name NETAMS
#end
Файл конфигурации очень легок в прочтении и интуитивно понятен,
для работы необходимо написать свои пароли/пути/адреса. Разберем отдельные секции:
service processor
lookup-delay 60
flow-lifetime 180
policy oid 0B8138 name ip target proto ip
policy oid 0B166B name www target proto tcp port 80 8080 3128
policy oid 033644 name mail target proto tcp port 110 25
policy oid 0683AB name icmp target proto icmp
restrict all drop local pass
unit net name LAN ip 192.168.50.0 mask 255.255.255.0 no-local-pass acct-policy ip
unit group oid 0768B1 name CLIENTS acct-policy ip www mail icmp
unit host oid 009742 name NetBSD ip 192.168.50.3 parent CLIENTS
unit host oid 08D228 name FreeBSD ip 192.168.50.4 parent CLIENTSl
storage 1 all
Создаем три политики: ip, www и mail.
Строка restrict all drop local pass означает что программа будет пропускать
только данные с/для зарегистрированных машин "за" маршрутизатор. Далее определяем
одну группу и двух клиентов. Возможности создания юнитов ошень широки, я рекомендую
вам внимательнее изучить документацию.
В секции
service storage задаются параметры доступа к базе данных.
Раздел
service data-source определяет метод получения данных о трафике, в нашем случае мы снимаем
их по протоколу NetFlow c адреса 192.168.50.1, порт 20001 UDP. После запуска сервиса, проверить экспорт данных
NetFlow можно будет командой
show ds.
В нижепреиведенном разделе устанавливаются параметры квотирования.
Порог предупреждения о приближении предела я установил в 90%, квотирование
устанавливается для юнитов FreeBSD и NetBSD, сообщение об отключении высылается администратору, также
сообщения отсылаются по адресу, указанному в описании юнита.
В случае срабатывания квоты, клиенту будет разрешен доступ в мир только icmp.
service quota
soft-treshold 90
policy ip
block-policy icmp
set name FreeBSD active
set name NetBSD active
notify soft {owner}
notify hard {owner} admin
notify return {owner}
storage 1
Начинается самое интересное - описание тарифных планов. По получению более подробной информации я рекомендую
обратиться к
документации, имеющейся на сайте проекта,
но вкратце отмечу самые ключевые моменты.
Опция
subplan определяет т.н. "подплан", из их наборов можно создавать
сложные тарифные планы. В данном примере, для первого подплана мы определяем, что со счета снимается 30 у.е.
раз в месяц, включено 10Гб входящего и исходящего трафика (хотя это и безлимитный тариф, но все должно быть в
пределах разумного), параметром
adjust-fee задается необходимость перерасчета, если клиент
подключился в середине месяца, учет ведется по правилу "ip", превышение трафика обойдется в 0.01 у.е. за мегабайт.
Аналогичным образом описан и второй подплан.
Опция
plan непосредственно описывает имя тарифного плана и входящие в него подпланы.
service billing
subplan 1 fee 30.000000 spread monthly
subplan 1 included 10.000G in 10.000G out
subplan 1 adjust-fee yes
subplan 1 policy ip
subplan 1 overdraft 0.010000 in 0.010000 out
subplan 2 fee 10.000000 spread monthly
subplan 2 included 100.000M in 100.000M out
subplan 2 adjust-fee yes
subplan 2 policy ip
subplan 2 overdraft 0.050000 in 0.000000 out
plan 1 name 128/64
plan 1 description "Unlimit 128"
plan 1 subplan 1
plan 2 name Basic
plan 2 description "Basic, include 100M"
plan 2 subplan 2
storage 1 all
Добавление нового аккаунта через консоль выглядит подобным образом (думаю, разобратся с
вэб-интерфейсом
NaWT
не составит труда):
account name Poxa password qwe123qwe
account 036205 plan 2
account 036205 unblock
account 036205 balance add 30
account 036205 unit name FreeBSD add
Данный блок предназначен для установки динамических правил на маршрутизаторе, которые
блокируют трафик для юнита, выбравшего квоту. Еще раз отмечу: лично у меня блокировка не работала,
это связано с отсутсвием необходимости в ней и тем, что я не разбирался в этом вопросе, если у кого-нибудь
есть опыт работы, буду рад услышать.
service acl-server
hostname 192.168.50.1
direction src
acl-number 150
dynamic-name NETAMS
NeTAMS обладает очень широкими возможностями, способными удовлетворить практически любой взыскательный вкус.
В частности стоит отметить
функцию контроля за
mac-адресами для конкретного юнита и возможность
работы с
карточками экспресс-оплаты.
В статье использовались материалы
форума и
раздела документации NeTAMS, а так же
статьи
Знак качества. Cisco QoS для начинающих II,
Знак качества. Cisco QoS для начинающих III.