The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Установка и настройка NeTAMS для подсчета и управления трафиком (billing isp traffic netflow cisco)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: billing, isp, traffic, netflow, cisco,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-12 16:38:51 Subject: Установка и настройка NeTAMS для подсчета и управления трафиком
Сгибнев Михаил

В данный момент передо мной встала задача посчитывать трафик в маленькой локальной сети и управлять им соответственно моим потребностям. Так как никаких коммерческих целей, требующих покупки сертифицированного биллинга, я перед собой не ставил, то решено было остановиться на системе 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 root@netams.home.dreamcatcher.ru
    #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.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor