div.main {margin-left: 20pt; margin-right: 20pt} IOS - безопасность - access lists
Где применяются:
фильтрация при прохождении пакетов через интерфейс
управление доступом к виртуальным терминалам
фильтрация изменений в таблицах маршрутизации
Что собой представляют: последовательность шаблонов просматривается по
очереди; если происходит сопоставление с разрешающим шаблоном, то пакет
считается разрешенным; если с запрещающим или сопоставления не происходит вовсе,
то пакет является запрещенным.
Как применяются:
создается список доступа и присваивается имя или номер
применяется к интерфейсу (на входе или на выходе), терминальной линии,
таблице маршрутизации
Типы списков доступа:
стандартный (проверяется исходный адрес пакета, log-input дополнительно
сбрасывает в журнал интерфей, с которого пришел пакет) 1-99 - по ip адресам
(в IOS 12.0 также интервал 1300-1999) (config)# access-list
номер-листа {deny|permit} ip-адрес-сети [маска] [log |
log-input] 700-799 - по 48-битным MAC-адресам
расширенный (исходный, конечный адрес, флаги и т.д.) 100-199 - по ip
адресам (в IOS 12.0 также интервал 2000-2699) (config)# access-list
номер-листа {deny|permit} протокол исходный-адрес
исходная-маска адрес-назначения маска-назначения
[precedence старшинство] [tos тип-сервиса] [established] [log|
log-input] (config)# access-list номер-листа {deny|permit}
icmp исходный-адрес исходная-маска адрес-назначения
маска-назначения [icmp-type [icmp-code]| icmp-message] [precedence
старшинство] [tos тип-сервиса] [established] [log|
log-input] (config)# access-list номер-листа
{deny|permit} tcp исходный-адрес исходная-маска [оператор порт
[порт]] адрес-назначения маска-назначения [оператор порт [порт]]
[precedence старшинство] [tos тип-сервиса] [established]
[log| log-input] (config)# access-list номер-листа
{deny|permit} udp исходный-адрес исходная-маска [оператор порт
[порт]] адрес-назначения маска-назначения [оператор порт [порт]]
[precedence старшинство] [tos тип-сервиса] [log|
log-input] 1100-1199 - по 48-битным MAC-адресам
динамический - Lock-and-Key Security (разрешает временный доступ по
результатам авторизации пользователя с помощью AAA, пользоваталь заходит
telnet-ом на виртуальный терминал - в описании линии должна быть определена
autocommand access-enable [ host ] [timeout минут],
telnet-сессия закрывается, IOS создает временный доступ, который будет удален
по idle timeout из access-list, absolute timeout из
access-enable или вручную командой clear access-template), после
номера листа вставляется конструкция: dynamic имя-пользователя [
timeout минут ] в каждом ACL не больше одного
dynamic на каждого пользователя не больше одного ACL
рефлексивный (на основе информации о текущей сессии), только для
именованных IP ACL Представляет собой улучшенную реализацию вместо
permit established: доступ дается на время сессии, открытой
выходным пакетом, и проверяется соответствие адресов и портов этой открытой
сессии. Действует не только на TCP, но и на UDP, ICMP и др.. Рефлексивный ACL
вводится в действии при открытии сессии с внутренней стороны: генерится строка
permit с тем же протоколом, что и в выходящем пакете, теми же входными и
выходными адресами хостов и портами (естественно, перевернутыми
местами). Временная строка удаляется в конце сессии. Для TCP - это через 5
секунд после пакета с двумя FIN-битами или сразу после пакета с RST-битом или
после idle timeout. Для других протоколов отслеживается только idle timeout.
Неприменим для протоколов, которые меняют номер порта для ответа (например,
FTP - в случае которого надо использовать passive FTP). Для выходного трафика
на внешнем интерфейсе определяется рефлексивный ACL (команда permit
protocol any any reflect name [timeout seconds],
модификации по вкусу), применяем его к выходному трафику на внешнем
интерфейсе. При фильтрации выходящих пакетов на внешнем интерфейсе IOS как
обычно последовательно проверяет условия. Если он доходит до условия со словом
reflect, то создается временная соответствующая строка во входном ACL
на этом интерфейсе (в этом ACL д.б. определена строка evaluate
соответствующее-имя). Задание timeout по умолчанию (300 секунд):
ip reflexive-list timeout seconds.
перехват TCP (предупреждение DoS атак типа TCP SYN-flooding). Только для
наборов firewall (проверка по наличию команды show tcp intercept). Два
режима: перехвата и наблюдения. Перехват - IOS получив транзитный пакет с
битом SYN, открывает соединение от имени сервера; если соединение произошло
удачно, то открывается еще одно соединение от NAS до настоящего сервера и эти
две половинки сшиваются. Параметры TCP соединения не могут быть настроены (IOS
не знает какие параметры устанавливает сервер). Режим наблюдение: IOS
позволяет пакету дойти до настоящего сервера, но следит за успешностью
соединения. Если соединение неудачное, то IOS посылает пакет с требованием
закрыть сессию на настоящий сервер. В обоих случаюх осуществляется агрессивный
настраиваемый контроль за timeout-ами и плотностью запросов SYN. Для того,
чтобы разрешить перехват надо:
сконфигурировать расширенный ACL.
ip tcp intercept list номер-ACL (перехватываться будут
только прошедшие фильтр пакеты).
ip tcp intercept mode {intercept | watch} (по умолчанию
intercept)
ip tcp intercept drop-mode {oldest | random} (если попыток
соединения слишком много, то при приходе нового соединения какое-то старое
надо грохнуть, по умолчанию самое старое, но можно и в случайном порядке)
ip tcp intercept watch-timeout seconds (по умолчанию 30
секунд)
ip tcp intercept finrst-timeout seconds (ждать по
умолчанию 5 секунд после получения RESET или FYN, а затем разрыварь
соединение)
ip tcp intercept connection-timeout seconds (по умолчанию
неактивное соединение наблюдается 24 часа)
управление переходом в агрессивное состояние (когда IOS считает, что
происходит атака и удаляет старые незавершенные соединения по приходу новых,
интервал ожидания соединения уменьшается вдвое, timeout в режиме наблюдения
уменьшается вдвое), определяется двумя факторами: числом незавершенных
соединений и числом попыток соединения за последнюю минуту:
ip tcp intercept max-incomplete high number (по
умолчанию 1100)
ip tcp intercept max-incomplete low number (по умолчанию
900)
ip tcp intercept one-minute high number (по умолчанию
1100)
ip tcp intercept one-minute low number (по умолчанию
1100)
show tcp intercept connections show tcp intercept
statistics
контекстно-зависимые ACL (CBAC). Только для наборов firewall (проверка по
наличию команды show ip inspect). Представляет собой улучшение
рефлексивных ACL (которые в свою очередь представляют улучшение ACL с ключом
established). Решает проблему с протоколами типа FTP, которые открывают
дополнительные каналы для ответной передачи. IOS производит инспекцию
проходящих пакетов на прикладном уровне. Поддерживаемые протоколы: generic
TCP, generic UDP, CU-SeeMe, FTP (three-way запрещен), H.323, Java, UNIX
R-команды, RealAudio, Sun RPC, SMTP, SQL*Net, StreamWorks, TFTP, VDOLive.
Другие протоколы (например, ICMP) не поддерживаются. За подробностями лучше к
оригинальной документации. Описывается набор правил и применяется к интерфейсу
(ip inspect inspection-name {in | out}). Команды установки
параметров:
ip inspect tcp synwait-time seconds (по умолчанию 30
секунд)
ip inspect tcp finwait-time seconds (по умолчанию 5
секунд)
ip inspect tcp idle-time seconds (по умолчанию 3600
секунд)
ip inspect udp idle-time seconds (по умолчанию 30 секунд)
ip inspect dns-timeout seconds (по умолчанию 5 секунд)
ip inspect max-incomplete high number (по умолчанию 500) -
число неполностью открытых сессий, переводящих в агрессивный режим (см.
перехват TCP)
ip inspect max-incomplete low number (по умолчанию 400)
ip inspect one-minute high number (по умолчанию 500) -
число неполностью открытых сессий в последнюю минуту, переводящих в
агрессивный режим (см. перехват TCP)
ip inspect one-minute low number (по умолчанию 400)
ip inspect tcp max-incomplete host number block-time
seconds (по умолчанию 50 и 0) - сколько полуоткрытых сессий
терпеть на один хост назначения
ip inspect audit trail - выдавать на консоль сообщение о каждой
сессии
Протокол - номер протокола или имя (eigrp, gre, icmp,
igmp, igrp, ipinip, nos, ospf, tcp или
udp; ip - любой).
Оператор сравнивает исходный порт или порт назначения (lt, gt,
eq, neq, или range (интервал - 2 числа)) с числом или
мнемоническим именем порта.
Маски - инверсные (например: 0.0.0.255). any - сокращение для
0.0.0.0 255.255.255.255. host адрес - вместо "адрес 0.0.0.0".
Все добавления к списку будут добавлены в конец, хочешь вставить в середины -
удали все и по новой...
В конце списка подразумевается "запретить все".
established применим только для TCP (удовлетворяет, если взведены биты
AXK или RST).
precedence
critical
flash
flash-override
immediate
internet
network
priority
routine
TOS
max-reliability
max-throughput
min-delay
min-monetary-cost
normal
ICMP
administratively-prohibited
alternate-address
conversion-error
dod-host-prohibited
dod-net-prohibited
echo
echo-reply
general-parameter-problem
host-isolated
host-precedence-unreachable
host-redirect
host-tos-redirect
host-tos-unreachable
host-unknown
host-unreachable
information-reply
information-request
mask-reply
mask-request
mobile-redirect
net-redirect
net-tos-redirect
net-tos-unreachable
net-unreachable
network-unknown
no-room-for-option
option-missing
packet-too-big
parameter-problem
port-unreachable
precedence-unreachable
protocol-unreachable
reassembly-timeout
redirect
router-advertisement
router-solicitation
source-quench
source-route-failed
time-exceeded
timestamp-reply
timestamp-request
traceroute
ttl-exceeded
unreachable
Все фрагменты фрагментированного пакета, кроме первого, принимаются ACL
безусловно.
Проще всего создавать списки в текстовом редакторе (первая строчка должна
быть командой no access-list ...), а затем копировать на маршрутизатор
командой: copy tftp:имя-файла
system:running-config
Начиная с версии 11.2 вместо номеров можно использовать имена (команды ip
access-list standard имя и ip access-list extended
имя, которые переводят конфигурацию в подрежим ввода списка
доступа, на котором доступны команды dynamic, deny и permit
с синтаксисом аналогичным описанному выше; выход по команде exit).
Поименованный список можно слегка модифицировать командами no permit и
no deny. Применять поименованные списки можно только при фильтрации
пакетов и маршрутов.
Применение к интерфейсу. К интерфейсу можно применить только один список
доступа. Список доступа м.б. либо inbound (приверяется когда пакет поступает на
вход интерфейса снаружи), либо outbound (проврка происходит, когда пакет
приходит изнутри киски на интерфейс). (config-if)#ip access-group
номер-или-имя-листа {in | out}
Ограничение на доступ к виртуальному
терминалу: (config-line)#access-class номер-листа {in
| out}
Если делается попытка применить несконфигурированный список, то
подразумевается permit any.
Для каждой строки permit/deny ведется статистика сколько пакетов было
пропущено/запрещено этой строкой (это можно использовать для сбора суммарной
статистики по портам), при модификации ACL или перезагрузке счетчики
сбрасываются:: show access-lists номер-или-имя-ACL clear
access-list counters номер-или-имя-ACL
Сбор статистики о нарушениях (исходный адрес, конечный адрес, число
пакетов, число байт, ACL) производится с помощью команды (на определенный
интерфейс): ip accounting access-violations show ip accounting
[checkpoint] access-violations
Сбор статистики (исходный адрес, конечный адрес, число пакетов, число байт)
производится с помощью команды (на определенный интерфейс): ip accounting
output-packets show ip accounting [checkpoint]
output-packets
Длина таблицы учета (по умолчанию 512 строк по 25 байт каждая) задается
командой (на глобальном уровне): ip accounting-threshold
threshold
Фильтрация пакетов, подлежащих учету, в зависимости от IP-адреса (должен
соответствовать входной ИЛИ выходной IP адрес пакета), задается на глобальном
уровне: ip accounting-list ip-address
wildcard пакеты, не прошедшие фильтр, называются транзитными и
хранятся в отдельной таблице, размер которой определяется командой (по умолчанию
0): ip accounting-transit число
Обнуление базы данных учета и создание checkpoint clear ip
accounting
Управление и отладка:
show access-list
show ip access-lst
Журнализация производится на уровне 6 (informational), так что
настройка команд logging должна быть соответсвующей. Первый пакет
попадает в журнал сразу, остальные накапливаются 5-минутными интервалами.
Sergey E. Bogomolov
|