![]() |
Pyramids Telecomm |
| Главная | Архив статей | Теория, практика, примеры конфигураций | Словарь терминов |
Access control lists (ACL) - списки доступа, одна из тех технологий, которая широко используется современными маршрутизаторами, не ограничивающимися простой проверкой адресов и продвижением пакетов. Сейчас они выполняют инкапсуляцию, туннелирование, преобразование протоколов, действия по обеспечению некоторой безопасности. Разнообразие каналов связи, увеличивающееся использование сети Интернет и появление, наряду с данными, передачи голоса, видео - все это приводит к усложнению проходящего через маршрутизатор трафика. Проблемы безопасности, балансировки нагрузки и распределения трафика по приоритетам поставили вопрос о необходимости фильтрации пакетов. В итоге для этого стали применяться списки доступа различных типов. С их помощью маршрутизатор не станет полнофункциональным межсетевым экраном, но все равно это достаточно мощное средство для контроля за безопасным функционированием сети.
Я рассмотрю синтаксис списков доступа, разработанный компанией Cisco Systems для операционной системы Cisco IOS. Другие производители маршрутизаторов используют свою структуру списков доступа и по-своему их реализуют, но основная стратегия по созданию и применению списков сходится. Если используются маршрутизаторы других фирм рекомендуетя внимательно изучить прилагаемую к ним документацию.
Список доступа - это упорядоченный набор операторов, каждый из которых разрешает или запрещает прохождение пакета через интерфейс. Маршрутизатор сравнивает параметры пакета в зависимости от информации, содержащейся в нем (адреса источника и получателя, протокольные порты и т.д.), и от параметров списка, применяемых к его содержимому. Операторы списка доступа применяются к каждому пакету последовательно, начиная с первого, до тех пор, пока не будет найдено соответствие или достигнут конец списка. При первом же совпадении маршрутизатор определяет, сбросить пакет или принять его. Поскольку после первого же совпадения прекращается проверка условий, то их порядок следования имеет важное значение. Поместив в начало списка наиболее часто встречающиеся условия, можно существенно снизить нагрузку на маршрутизатор.
Кроме фильтрации пакетов при их прохождении через интерфейсы списки доступа применяются для выделения трафика определенных хостов при его передаче по защищенному туннелю через Интернет, для перенаправления трафика по другому маршруту, для фильтрации изменений в таблицах маршрутизации, для управления доступом к виртуальным терминалам. Списки доступа могут применяться на входе в маршрутизатор и на его выходе. В первом случае сначала выполняется проверка пакета, а затем, если он пропускается, - его маршрутизация. При сбросе пакета по адресу его отправителя посылается ICMP-сообщение "хост недоступен" (host unreachable). Во втором случае пакет сначала маршрутизируется и только потом его параметры сравниваются с условиями списка.
Маршрутизаторы фирмы Cisco Systems поддерживают списки доступа двух типов: стандартные (проверяется исходный адрес пакета) и расширенные (проверяются исходный и конечный адреса, флаги и т.д.).
Стандартный список доступа
Имеет ограниченные функциональные возможности: позволяет фильтровать пакеты
только на основании значений содержащихся в них адресов источников данных, поэтому,
стандартный список используется, если нужно фильтровать только по адресу источника.
Имеет следующий формат:
access-list access-list-number {deny | permit} [source-address [source-wildcard] \ any} [log]
Жирным шрифтом выделены параметры оператора, которые вносятся в список в неизменном
виде, а обычным шрифтом - которые заменяются символьными или числовыми значениями.
В фигурных скобках находятся два параметра, один из которых обязательно должен
присутствовать в операторе. Параметры, заключенные в квадратные скобки, необязательны.
Access-list-number (номер списка) - это число в диапазоне от 1 до 99,
которое идентифицирует операторы из стандартного списка доступа IP. Использование
чисел из этого диапазона сигнализирует системе IOS о том, что данный список
доступа связан с протоколом IP. Номер списка определяя протокол, которому соответствует
список, информирует IOS о том, что все операторы списка с этим номером должны
рассматриваться как единое целое. Например, расширенные списки доступа IP задаются
числом в диапазоне от 100 до 199, поэтому, необходимо придерживаться правила
- использовать номер списка, соответствующий типу списка доступа, который необходимо
создать. Начиная с версии IOS 12.0 для номера списка IP доступен интервал 1300-1999.
Используются и числа из диапазона 700-799 для фильтрования пакетов по 48-битным
МАС-адресам. Здесь вы можете
ознакомиться с подробной таблицей номеров протоколов, используемых при создании
списков доступа в маршрутизаторах Cisco Systems.
Параметры permit или deny указывают, разрешается ли пакетам, удовлетворяющим
условиям некоторого оператора списка, проходить через интерфейс. Permit - разрешить,
deny - отказать.
Source-address (адрес источника) - это IP-адрес узла или группы узлов.
Его задание осуществляется с использованием маски шаблона (source-wildcard).
Действие этой маски противоположно по сравнению с маской подсети: двоичный нуль
предполагает строгое совпадение в соответствующей позиции, а двоичная единица
означает произвольное значение.
Ключевое слово log задает ведение журнала. Когда к интерфейсу применяется
список с таким ключевым словом, информация обо всех пакетах, разрешаемых и отвергаемых
его операторами permit и deny, записывается в журнал. Первый же поступивший
на интерфейс пакет, которому найдено соответствие в одном из операторов списка
доступа, немедленно инициирует запись в журнал. Последующие пакеты анализируются,
и результаты анализа с периодичностью в пять минут отображаются на консоли или
заносятся в журнал в памяти.
Приведем некоторые примеры - все команды вводятся в неизменном виде в режиме конфигурирования маршрутизатора Router(config)#
1. Разрешение прохождения пакетов через маршрутизатор от всех хостов сети класса С - 140.12.11.0
access-list 1 permit 140.12.11.0 0.0.0.255
Используемая для этого маска 0.0.0.255 разрешает доступ каждому узлу сети к нужным ресурсам, т.к. последний байт в адресе сети класса С содержит во всех разрядах единицы.
2. Запрещение прохождения пакетов через маршрутизатор от всех хостов сети класса С - 140.12.11.0
access-list 1 deny 140.12.11.0 0.0.0.255
3. Разрешение прохождения пакетов через маршрутизатор хоста с IP-адресом 140.12.11.5
access-list 1 permit 140.12.11.5 0.0.0.0
Такая запись списка доступа верна. Но для удобства администраторов предусмотрен альтернативный способ указания конкретного узла в списке доступа - с помощью ключевого слова host. Тогда приведенная выше строка будет выглядеть несколько по иному:
access-list 1 permit host 140.12.11.5
4. Запрещение прохождения пакетов через маршрутизатор хоста с IP-адресом 140.12.11.5
access-list 1 deny 140.12.11.5 0.0.0.0
Замечу, что маску 0.0.0.0 при конфигурировании списка в данном случае доступа можно не указывать.
По умолчанию в маршрутизаторе разрешено прохождение пакетов в различных направлениях через активный интерфейс (в пределах маршрутизации). Формально можно было бы прописать следующую строку:
access-list 1 permit 0.0.0.0 255.255.255.255
но комбинацию из адреса источника 0.0.0.0 и маски шаблона 255.255.255.255 заменяют одним ключевым словом any (любой). Тогда список доступа для примера 4 выглядел бы следующим образом:
access-list 1 deny host 140.12.11.5
access-list 1 permit any
Этот пример позволяет убедиться в важности порядка следования операторов в списке доступа. Первый оператор отвергает пакеты с адресом источника 140.12.11.5, а второй разрешает прохождение пакетов от любых адресов через интерфейс, к которому применяется список доступа. Если операторы поменять местами, то список доступа не сможет блокировать пакеты, поступающие из сети 140.12.11.5, так как уже говорилось, что списки доступа обрабатываются сверху вниз. Поэтому первый оператор списка, которым теперь станет оператор access-list 1 permit any, будет пропускать через интерфейс все пакеты, независимо от их источника.
По умолчанию каждый список доступа в конце содержит неявный оператор deny any, который отсеивает весь трафик, кроме явно разрешенного:
access-list 1 deny any
Приведу пример разрешения прохождения пакетов через маршрутизатор от всех хостов сети класса С 140.12.11.0, кроме хостов 140.12.11.5 и 140.12.11.6, а также разрешение прохождения всего остального трафика через интерфейс, на котором установлен список доступа:
access-list 1 deny host 140.12.11.5
access-list 1 deny host 140.12.11.6
access-list 1 permit 140.12.11.0 0.0.0.255
access-list 1 permit any
Отсутствие последнего оператора приведет к тому, что через интерфейс будут пропускаться только пакеты из сети 140.12.11.0 (кроме хостов 140.12.11.5 и 140.12.11.6), а остальной трафик будет блокироваться неявным оператором deny any, который присутствует в списке по умолчанию.
Из всего приведенного выше явно вытекают недостатки стандартного списка доступа:
Тогда закономерен переход к использованию расширенных списков доступа.
Расширенный список доступа:
Обеспечивает более гибкую фильтрацию пакетов. Он позволяет отбирать пакеты по
адресу источника и по адресу назначения, а также по протоколу, порту источника,
порту назначения и даже по значению разрядов в некоторых полях внутри пакета.
Расширенный список доступа имеет следующий формат:
access-list access-list-number
{deny | permit} {protocol | protocol-keyword}
{source-address source-wildcard | any}
[source-port]
{destination-address destination-wildcard \ any} [ctesr/nat/on-porr]
[log]
Access-list-number (номер списка) - это число в диапазоне от 100 до
199, идентифицирующее операторы из стандартного списка доступа IP. Начиная с
версии IOS 12.0 для номера списка доступен интервал 2000-2699. Здесь
вы можете ознакомиться с подробной таблицей номеров протоколов, используемых
при создании списков доступа в маршрутизаторах Cisco Systems.
Protocol-keyword задает протокол, подлежащий фильтрации, например, IP,
TCP, UDP, ICMP и т.д.
Protocol - использование этого параметра подразумевает задание числового
значения порта, используемого протоколом, из диапазона от 0 до 255.
Блокировать доступ по протоколу TCP к серверу с IР-адресом 140.12.11.10
access-list 101 deny TCP
аny host 140.12.11.10
Использование фильтрации пакетов по протоколу имеет некоторую особенность,
связанную с формированием пакетов IP. Не буду вдаваться в подробности этого
процесса, скажу лишь следующее.
Заголовок IP обеспечивает транспортировку протоколов TCP или UDP, протоколов
маршрутизации, ICMP. Поэтому указание IP в качестве протокола в операторе списка
доступа оказывается шире, чем спецификация конкретного протокола. Если разрешить
передачу пакетов IP, то по умолчанию будет разрешено включать в дейтаграмму
и сообщения ICMP, и сегменты TCP, и дейтаграммы UDP, что, возможно, не входит
в планы. Поэтому при фильтрации по определенному протоколу, необходимо указать
именно этот протокол перед операторами более общего характера.
access-list 101 permit IP
аny host 140.12.11.10
access-list 101 deny TCP
аny host 140.12.11.10
Блокировка доступа по протоколу TCP к серверу с IР-адресом 140.12.11.10 в данном случае теряет смысл, т.к. первый оператор разрешает доставку по указанному адресу всего трафика. Правильным будет поменять эти операторы местами: блокируем трафик TCP по заданному адресу и разрешаем передавать на него пакеты любых других протоколов.
access-list 101 deny TCP
аny host 140.12.11.10
access-list 101 permit IP
аny host 140.12.11.10
Еще одной отличительной особенностью расширенных списков доступа является поддержка логических операций применительно к номерам портов: lt (less than - меньше), gt (greater then - больше), eq (equal -равно), neq (not equal - не равно). Чтобы задать порт источника - source-port или порт назначения - destination-port, можно указать номер или мнемонический код порта, либо использовать логическую операцию для задания диапазона портов. Следующий пример иллюстрирует использование логических операций:
access-list 101 permit TCP
any host 140.12.11.10 eq WWW
access-list 101 permit ICMP
any host 140.12.11.10 eq 8
Первая пара операторов разрешает передачу пакетов TCP с любого узла по адресу 140.12.11.10, если эти пакеты принадлежат типу Web. Вместо мнемонического кода WWW можно задать число 80, так как трафик Web обычно использует порт 80. Вторая пара операторов разрешает все адресованные указанному узлу сообщения ping - эхо запросы ICMP, которым назначен тип ICMP, равный 8 (синтаксис расширенных списков доступа позволяет задавать в конце оператора специфические для каждого протокола параметры; так, для протокола ICMP задаются не номера портов, как для протоколов UDP или TCP, а тип и если нужно - код сообщений ICMP). С учетом неявного оператора deny any в конце списка доступа весь остальной трафик (абсолютно весь) будет блокироваться.
Начиная с версии IOS 11.2 вместо номеров для списка доступа можно использовать имена. Полученные именованные списки можно применять только для фильтрации пакетов и маршрутов. По соответствующим командам переводим конфигурацию в подрежим ввода списка доступа для стандартного и расширенного списков:
Router(config)#ip access-list standard BANK
Router(config-std-nacl)#
Router(config)#ip access-list extended OFFICE
Router(config-ext-nacl)#
В этих режимах доступны команды dynamic, deny и permit с аналогичным синтаксисом, который был описан выше.
Router(config-ext-nacl)#? Ext Access List configuration commands: default Set a command to its defaults deny Specify packets to reject dynamic Specify a DYNAMIC list of PERMITs or DENYs evaluate Evaluate an access list exit Exit from access-list configuration mode no Negate a command or set its defaults permit Specify packets to forward
Приведу для примера часть поименованного списка доступа.
ip access-list extended BANK
deny tcp host 140.12.11.7 eq www any
permit ip any host 140.12.11.5
permit ip any host 140.12.11.6
permit ip any any
На данном примере хорошо прослеживается направление фильтрации трафика. Его определяет положение оператора any. В первой строке списка доступа запрещается передачу пакетов типа WWW от хоста 140.12.11.7, а во второй и третьей строках разрешается передача трафика IP "от всех" на хосты 140.12.11.5 и 140.12.11.6.
Ошибкой многих начинающих (и не только) администраторов является то, что после создания списка доступа его просто "забывают" связать с каким-либо интерфейсом маршрутизатора. Список же начинает действовать только после связи его с интерфейсом. К каждому интерфейсу можно применить только один список доступа, который может быть либо inbound (in) - проверяется когда пакет поступает на вход интерфейса снаружи, либо outbound (out) - проверка происходит, когда пакет приходит изнутри маршрутизатора на интерфейс. Для этого необходимо войти в конфигурацию нужного нам интерфейса и прописать список доступа (в данном случае как group - "группа"). Порядок внесения изменений в конфигурацию следующий (на примере протокола IP для интерфейса Ethernet 0/0):
Router#configure terminal
Router(config)#interface ethernet 0/0
Router(config-if)#ip access-group 1 in
Как уже отмечалось выше порядок следования операторов списка доступа имеет чрезвычайно важное значение. Каждый администратор знает, что конфигурация сети постоянно меняется, и в связи с этим часто приходится пересматривать стратегию безопасности, а значит и менять структуру списков доступа. Здесь мы сталкиваемся с одним из самых неприятных недостатков операционной системы Cisco IOS - невозможностью модификации существующих в конфигурации списков доступа. Каждая новая запись добавляется в конец списка, и добавить или удалить записи внутри списка не представляется возможным. Если же требуется изменить какую-то строку или несколько строк, для этого приходится создавать новый список, удалять старый и затем применять новый. Именованный список доступа предоставляет чуть более гибкие возможности: для исключения оператора из списка достаточно поставить перед первым ключевым словом permit или deny префикс nо. Правда, именованный список также не поддерживает выборочное добавление операторов.
Порядок работы следующий: создаем новый список доступа, удаляем на интерфейсе старый список, назначаем новый. Очень активно можно использовать обычный текстовый редактор в сочетании с терминальной программой. Создаем текстовый файл с упорядоченным набором необходимых команд. Входим в режим конфигурирования маршрутизатора и используя такое свойство терминала, как File->Send file..., выбираем созданный файл. Все команды из файла автоматически выполняются в маршрутизаторе. Таким способом можно полностью автоматизировать создание и применение нового списка доступа, тем самым сократив время, когда интерфейс "голый" - без списка доступа. Существуют, правда специальные программы-редакторы, типа "The Chesapeake Access List Editor (ALE)", но у меня не было острой необходимости каждый день менять списки доступа, поэтому не могу поделиться опытом работы с такими программами.
Задействуя фильтры списков доступа, мы жертвуем производительностью работы маршрутизатора. При использовании фильтров повышается нагрузка на центральный процессор. Проследить за использованием ресурсов процессора можно по команде show process CPU. Механизмы фильтрации рекомендуется использовать на маршрутизаторах, установленных на границе сети, и не включать их на магистрали, где передаются значительно большие объемы трафика. На производительность влияет и размер списка доступа: чем он длиннее, тем больше приходится "трудиться" маршрутизатору при обработке каждого пакета. Этот фактор влияет на производительность в меньшей степени, но его тоже нужно учитывать, поэтому записи с параметрами наиболее часто встречающихся пакетов нужно располагать в начале списка.
| Главная | Архив статей | Теория, практика, примеры конфигураций | Словарь терминов |
Created 2001 by Евгений
Copyright Pyramids Telecomm 2001