Разработанный модуль LBacl рекомендуется к использованию как альтернатива связки LBacledit+put_config. Основным преимуществом данного решения перед ранее использовавшимся, является возможность
редактирования одной записи аксесс-листа без необходимости перезагрузки всего аксесс-листа на маршрутизатор Cisco.
Как следствие, уменьшен до минимума интервал задержки между получением команды на изменение состояния учетной записи
и реакцией маршрутизатора за счет того, что действие по изменению учетной записи происходит сразу по завершении
обращения к маршрутизатору, в то время как при
загрузке всего аксесс-листа изменения вступят в силу только по завершении его загрузки.
Исследование способов регулирования доступа отдельных пользователей в маршрутизаторах Cisco привели к выводу о необходимости
разработки оригинального модуля для обеспечения надежного включения/отключения отдельной сессии. Настоящий модуль обеспечивает
реализацию протоколов, описанных в RFC 1157 (SNMP) и RFC 854 (telnet) без использования внешних библиотек, что обеспечивает относительную
гибкость в использовании с различными реализациями ОС Linux. Данный модуль протестирован на следующих платформах и ОС:
1. Fedora 6 i386, Cisco 2610/64/16/i-mz-123.20.bin
2. Centos 5.1 x86_64, Cisco 2611/64/16/is-mz-123.22.bin
3. Fedora 6 i386, Cisco 2610/64/16/ik9o3s3-mz.123-20.bin
4. FreeBSD 6.1 i386, Cisco 2611/64/16/is-mz.123-22.bin
5. FreeBSD 6.3 i386, Cisco 2611/64/16/is-mz.123-22.bin
Необходимые настройки конфигурации маршрутизатора (логины и пароли указаны в качестве примера, в актуальной конфигурации их рекомендуется изменить):
1. Настройка пользователя, под которым LBacl будет производить изменения в текущей конфигурации (running-config):
username <пользователь> password 0 <пароль>
enable <пароль>
2. К настройкам telnet добавить:
line vty 0 4
password <пароль>
3. Обеспечить доступ к snmp:
snmp-server community <наименование> RW
4. Обеспечить статические записи в файле, описываемом переменной rules (этот файл должен находиться в /tftpboot), ограничивающие доступ к telnet маршрутизатора с IP компьютера, на котором установлен LBacl:
permit tcp host aaa.bbb.ccc.ddd host eee.fff.ggg.hhh eq telnet
deny tcp any host eee.fff.ggg.hhh eq telnet
Записи, обеспечивающие доступ отдельных хостов в интернет являются динамическими и подлежат изменению только агентом LBccd. Записи,
регламентирующие служебный доступ должны быть описаны статически в файле, описываемом переменной rules файла конфигурации.
5. Пример vg.on:
#!/bin/bash
/usr/local/billing/LBacl -c 1 -h $3 -m $4 [-s $5] [-f <файл конфигурации>]
exit 0
6. Пример vg.off
#!/bin/bash
/usr/local/billing/LBacl -c 0 -h $3 -m $4 [-s $5] [-f <файл конфигурации>]
exit 0
7. Обеспечить наличие необходимых переменных в файле конфигурации (по умолчанию /etc/billing/lbacl.conf):
*) address - адрес маршрутизатора
*) username = логин пользователя
*) password = пароль пользователя
*) enable = пароль привелегированного режима
*) acl - номер аксесс-листа
*) snmp - коммьюнити (обязательно разрешение на запись)
*) socket - путь, указывающий на unix сокет (рекомендуется указывать путь в /tmp)
*) rules - файл, расположенный в /tftpboot и содержащий статические правила, примерно следующего вида
(здесь: 10.10.10.1 - компьютер, 10.10.10.101 - маршрутизатор, 101 - аксесс-лист):
no access-list 101
access-list 101 permit tcp host 10.10.10.1 host 10.10.10.101 eq telnet
access-list 101 deny tcp any host 10.10.10.101 eq telnet
access-list 101 deny tcp any any range 135 139
access-list 101 deny udp any any range netbios-ns netbios-ss
access-list 101 deny tcp any any eq 445
access-list 101 deny udp any any eq 445
*) tftp - адрес сервера tftp
*) mib - 1.3.6.1.4.1.9.2.1.53 (если это cisco).
*) timeout - значение, в течение которого сервер в режиме "-i" ожидает соединения. По умолчанию значение 62 сек, поскольку агент
начинает отрабатывать включение/отключение пользователей не сразу после запуска.
8. В файле LBccd.init, в разделе start) добавить следующее правило:
start)
/usr/local/billing/LBacl -i [-f <файл конфигурации>]
9. Обеспечить отсутствие фильтрации ICMP echo пакетов от компьютера до маршрутизатора.
10. Перезапустить LBccd.
Описание работы: При запуске модуль проверяет наличие сокета (указанного в переменной socket), в случае его отсутствия модуль создает сокет
и остается функционировать в фоновом режиме в качестве сервера, ожидая в течение периода времени, указанного в переменной timeout, обращения к сокету.
При следующем запуске, в случае обнаружения сокета, модуль переходит в режим клиента, отправляя данные серверной части демона. Серверная резидентная
часть получая данные, заполняет динамический массив в памяти, при этом увеличивая таймаут ожидания соединений серверной части модуля при каждом
обращении клиентской части модуля.
При наступлении таймаута (т.е. отсутствии подключений клиентской части модуля в течение 1 секунды), производится
отключение приемного сокета и отправка данных в маршрутизатор. Отправка данных на маршрутизатор возможна двумя путями: при наличии ключа -i,
начальная загрузка аксес-листа производится с использованием протокола SNMP (mib SNMPv2-SMI::enterprises.9.2.1.53. или указанный в переменной mib,
файла конфигурации), поскольку отсутствует необходимость в сохранении уже имеющегося на маршрутизаторе аксес-листа, либо с использованием протокола
telnet, в этом случае отправка данных на маршрутизатор производится в течение одной telnet-сессии с маршрутизатором.
Данный алгоритм работы позволяет избежать чрезмерных нагрузок на маршрутизатор в начальный период времени при инициализации агента LBccd и при
одновременной обработке большого количества учетных записей.
Испытания: Загрузка 128 подсетей класса C (32512 хостов) в режиме telnet на маршрутизатор Cisco 2611 (64Мб RAM) заняла 1 час 12 минут 02 сек, среднее
время обработки одной записи 0.017 сек. Загрузка этого же объема данных в режиме инициализации заняла не более 10 сек.
Загрузить модуль(Linux)
Загрузить модуль(FreeBSD 5.5)
Загрузить модуль(FreeBSD 6.1)