Фильтрация пользовательского трафика

Под фильтрацией понимается нестандартная обработка IP-пакетов маршрутизаторами, приводящая к отбр&Сц^нию некоторых пакетов иди изменению их маршрута.

Фильтрация пользовательского трафика маршрутизаторами аналогична по прин­ципу действия фильтрации, выполняемой коммутаторами локальных сетей (см. гла­ву 15).

Условия фильтрации маршрутизаторов обычно существенно сложнее и учиты­вают гораздо больше признаков, чем коммутаторы локальных сетей. Например, это могут быть:

□ IP-адрес источника и приемника;

□ МАС-адреса источника и приемника;

□ идентификатор интерфейса, с которого поступил пакет;

□ тип протокола, сообщение которого несет IP-пакет (то есть TCP, UDP, ICMP или OSPF);

□ номер порта TCP/UDP (то есть тип протокола прикладного уровня).

При наличии фильтра маршрутизатор сначала проверяет совпадение условия, опи­санного этим фильтром, с признаками пакета, и при положительной проверке выполняет над пакетом ряд нестандартных действий. Например, пакет может быть отброшен (drop); направлен к следующему маршрутизатору, отличающе­муся от того, который указан в таблице маршрутизации; помечен, как вероятный кандидат на отбрасывание при возникновении перегрузки. Одним из таких дей­ствий может быть и обычная передача пакета в соответствии с записями табли­цы маршрутизации

Рассмотрим примеры фильтров, написанных на командном языке маршрутиза­торов Cisco. Эти фильтры, называемые списками доступа, сегодня в IP-маршру­тизаторах являются очень распространенным средством ограничения пользова­тельского трафика.

Наиболее простым является стандартный список доступа, который учитывает в качестве условия фильтрации только IP-адрес источника.

Общая форма такого условия выглядит следующим образом:

access-list номер_списка_доступа { deny | permit } { адрес_источника [ метасимволы_источника ] | any}

Стандартный список доступа определяет два действия с пакетом, который удов­летворяет описанному в фильтре условию: deny, то есть отбросить, и permit, то есть передать для стандартной обработки в соответствии с таблицей маршрути­зации. Условием выбора того или иного действия в стандартном списке доступа является совпадение IP-адреса источника пакета с адресом источника, заданным в списке. Совпадение проверяется в том же стиле, что и при проверке таблицы маршрутизации, при этом метасимволы являются аналогом маски, но в несколь­ко модифицированном виде. Двоичный нуль в поле метасимволов источника оз­начает, что требуется совпадение значения этого разряда в адресе пришедшего пакета и в адресе, заданном в списке доступа. Двоичная единица означает, что совпадения в этом разряде не требуется. Практически, если вы хотите задать усло­вие для всех адресов некоторой подсети, то должны использовать инвертированное значение маски этой подсети. Параметр any означает любое значение адреса — это просто более понятная и краткая форма записи значения 255.255.255.255 в поле метасимволов источника.

Пример стандартного списка доступа:

access-list 1 deny 192.78.46.0 0.0.0.255

Здесь:

□ 1 — номер списка доступа;

□ deny — действие с пакетом, который удовлетворяет условию данного списка доступа;

□ 192.78.46.0 — адрес источника;

□ 0.0.0.255 — метасимволы источника.

Этот фильтр запрещает передачу пакетов, у которых в старших трех байтах адре­са источника имеется значение 192.78.46.0.

Список доступа может включать более одного условия. В этом случае он состоит из нескольких строк с ключевым словом access-list и одним и тем же номером списка доступа. Так, если мы хотим разрешить прохождение через маршрутиза­тор пакетов хоста 192.78.46.12, запрещая передачу пакетов одному из хостов сети 192.78.46.0/24, то список доступа будет выглядеть следующим образом:

access-list 1 permit 192.78.46.12 0.0.0.0 access-list 1 deny 192.78.46.0 0.0.0.255 access-list 1 permit any

Условия списка доступа проверяются по очереди, если какое-либо из них дает совпадение, то выполняется действие permit или deny, определенное в этом усло­вии. После этого остальные условия списка уже не проверяются. Считается по умолчанию, что в конце каждого списка имеется неявное условие вида:

[access-list 1 deny any]

Однако, если вам все же требуется пропускать все пакеты, не определенные явно в условиях, необходимо добавить в последней строке условие:

access-list 1 permit any

Список доступа можно применять к любому интерфейсу маршрутизатора и в лю­бом направлении: если список применяется с ключевым словом in, то он дейст­вует на входящие в интерфейс пакеты, а если с ключевым словом out — то на выходящие. Например, написанный нами список доступа 1 можно применить к некоторому интерфейсу для обработки входящего трафика, используя следую­щую команду:

access-group 1 in

Существуют также и более мощные типы списков доступа для маршрутизаторов Cisco, например расширенные списки доступа. Общий формат этих списков сле­дующий:

access-list номер_списка_доступа { deny | permit } { protocol | ключевое_слово_протокола }

{ адрес_источника [ метасимволы_источника ]] [ порт_источника ] | any } [ адрес_приемника [ метасимволы_приемника ]] [ порт_приемника ]

Пользуясь расширенными списками доступа, можно запретить прохождение во внутреннюю сеть предприятия FTP-пакетов. Как известно, FTP задействует для приема запросов от клиентов протокол TCP с хорошо известным портом 21. Для этого в список доступа нужно включить условие:

access-list 102 deny TCP any 21 any

Затем можно применить его к интерфейсу маршрутизатора, к которому подклю­чена внутренняя сеть, с ключевым словом out.

Администраторы корпоративных сетей часто запрещают возможность трассиров­ки извне внутренних хостов утилитой ping. Это делается с помощью условия:

access-list 101 deny ICMP any 192.78.46.8 0.0.0.0 eq 8


Как видно из условия, его синтаксис для протокола ICMP несколько отличается от общего синтаксиса расширенных списков доступа. Параметр eq 8 означает, что запрещается передача ICMP-сообщений типа 8, соответствующего эхо-запро- сам, на основе которых разработана утилита ping.

Еще более гибким является язык фильтров программного маршрутизатора, ра­ботающего во многих версиях Unix. Синтаксис этого языка близок к синтаксису языка С, что позволяет строить весьма сложные логические конструкции с по­мощью условных операторов if, then, else.

Необходимо отметить, что фильтрация пользовательского трафика может суще­ственно замедлять работу маршрутизатора, так как обработка каждого пакета требует проверки дополнительных условий.

Для того чтобы не создавать еще большую нагрузку на маршрутизатор и «не от­влекать» его от выполнения основных обязанностей, в фильтрах маршрутизато­ров не используется информация о предыстории сеансов. Сколько бы ни было сложным условие фильтрации маршрутизатора, в нем учитываются только пара­метры текущего пакета и не могут учитываться параметры предыдущих пакетов, уже обработанных маршрутизатором. Это ограничение является главным отли­чием маршрутизаторов от брандмауэров, специальных программных систем, ко­торые, используя информацию о предыстории сеансов, выполняют более качест­венную фильтрацию.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: