Фильтрация URL-адресов ASA
Оригинал туту https://supportforums.cisco.com/docs/DOC-21128
Введение
Одной из
функций ASA является фильтрация URL-адресов. С ее помощью можно
блокировать или разрешать посещение пользователями определенных
URL-адресов или web-сайтов. Ознакомившись с этой статьей, пользователи
научатся пользоваться данной функцией. После ее тщательного изучения они
смогут воспользоваться всеми преимуществами фильтрация URL-адресов и
применять ее для удовлетворения своих потребностей.
В
этой статье будет рассмотрено блокирование и разрешение доменов в
URL-адресах, а также слов, используемых в идентификаторах URI. Конечно,
ASA могут применяться и для других целей. С ними можно ознакомиться в
руководствах по настройке ASA. Теперь давайте рассмотрим, как разрешить
или заблокировать домен cisco.com. Иными словами, как сделать так, чтобы
ко всем пользователям, пытающимся перейти к любой странице, находящейся
в домене cisco.com, применялась фильтрация по URL-адресу. Такими
страницами могут быть www.cisco.com/index.html или
cisco.com/exampledir/page.html. Кроме того, будет также рассмотрена
процедура разрешения или блокирования в URI слова "/test/". Иными
словами, к всем страницам, содержащим в адресе слово "/test/" будет
применяться фильтрация по URL-адресу. Примерами могут служить адреса
www.examplesite.com/exampledir/test/page.html,
www.anyurl.com/test/examplepage.jsp или
www.anything.com/onedir/seconddir/test
Механизм,
используемый для применения фильтрации по URL-адресу, называется
Modular Policy Framework (MPF). Здесь будут созданы регулярные выражения
(regex), которые будут применяться в class-map типа http. Эти class-map
будут использоваться в policy-map, где к ним будет применено действие
drop-connection. Затем policy-map будут применены с http inspection в
другой policy-map, которая будет применяться к интерфейсу. Таким
образом, для попадающего в интерфейс трафика будет выполняться действие
http inspection.
ПРИМЕЧАНИЕ.
Тем не менее, следует отметить, что для фильтрации по URL-адресу в
системах корпоративного класса клиентам рекомендуется использовать
интеграцию WebSense или N2H2 с ASA. Такие механизмы web-фильтрации могут
обеспечить более надежную фильтрацию на основе классов сайтов.
Фильтрацию по URL-адресу непосредственно в ASA с помощью регулярных
выражений следует использовать только в отдельных случаях, если есть
возможность применить обширную классификацию с ограниченной структурой
регулярных выражений. Масштабы ASA не позволяют использовать эту модель
на корпоративном уровне с большим числом сопоставлений регулярных
выражений и большими объемами HTTP-трафика.
Блокирование конкретных URL-адресов
Предположим,
что необходимо заблокировать какие-либо конкретные web-сайты. Например,
необходимо заблокировать все сайты, расположенные в домене cisco.com, а
также URI, содержащие "/test/". Для этого будут созданы регулярные
выражения, которые затем будут использованы в class-map. Обратите
внимание, что при наличии соответствия для ЛЮБОГО регулярного выражения
считается, что условие class-map фактически выполнено. Затем, в
policy-map
block-url-policy будет применено действие
drop-connection для трафика, который соответствует условию class-map
(cisco.com ИЛИ идентификатор URI, содержащий "/test/"). Все остальное
разрешено (сайты, не принадлежащие домену cisco.com, и URI, не
содержащие "/test/"). Policy-map
block-url-policy используется для http inspection в другой policy-map (
global_policy) и применяется с service-policy.
regex blockex1 "/test/"
regex blockex2 "cisco\.com"
class-map type inspect http match-any block-url-class
match request uri regex blockex1
match request header host regex blockex2
policy-map type inspect http block-url-policy
parameters
class block-url-class
drop-connection log
policy-map global_policy
class inspection_default
inspect http block-url-policy
service-policy global_policy global
Разрешение всех URL-адресов для определенных хостов и блокирование конкретных URL-адресов для остальных
Наконец,
допустим, есть несколько хостов (например, администратор сети с
IP-адресом 192.168.1.2), которым необходимо предоставить доступ ко всем
web-сайтам, при этом доступ к определенным web-сайтам для остальных
пользователей нужно заблокировать (
обратите внимание,
что для выполнения процесса, описанного в следующем примере, нужно
понять смысл примера, приведенного выше). В данном случае будет
использоваться приблизительно такая же конфигурация, как и в приведенном
выше примере, однако на сей раз потребуются дополнительно access-list,
class-map и policy-map. Условиям access-list (
user-acl) будут
удовлетворять все пользователи, за исключением тех, которым нужен
неограниченный доступ. Последние будут соответствовать условиям
class-map (
block-user-class), которая, в свою очередь, будет использоваться в отдельной policy-map (
block-user-url-policy). Эта policy-map обеспечивает выполнение http inspection для policy-map
block-url-policy (эта часть совпадает с вышеизложенным) для разрешенных web-сайтов. Таким образом,
block-user-url-policy
будет применяться к интерфейсу, для которого действует service-policy. В
действительности, данная policy-map позволяет отобрать всех
пользователей, кроме пользователей с неограниченными правами доступа (
class block-user-class) и заблокировать для них возможность посещения определенных web-сайтов (
inspect http block-url-policy).
Остальные пользователи (которые не соответствуют критериям или не
заблокированы в списке доступа) смогут переходить по любым адресам.
regex blockex1 "/test/"
regex blockex2 "cisco\.com"
access-list user-acl extended deny tcp host 192.168.1.2 any eq www
access-list user-acl extended permit tcp any any eq www
class-map type inspect http match-any block-url-class
match request uri regex blockex1
match request header host regex blockex2
class-map block-user-class
match access-list user-acl
policy-map type inspect http block-url-policy
parameters
class block-url-class
drop-connection
policy-map block-user-url-policy
class block-user-class
inspect http block-url-policy
service-policy block-user-url-policy interface inside
Разрешение только cisco.com
Предположим,
что необходимо разрешить только определенные web-сайты. Создадим
регулярное выражение и выполним по нему сопоставление (оператор match) в
class-map. Обратите внимание, что если для оператора match найдено
соответствие, условия в class-map считаются выполненными. Условие
оператора match выполняется, если для регулярного выражения НЕ найдено
соответствие по URL-адресу. Затем в policy-map
allow-url-policy
будет применено действие drop-connection. Остальной трафик (cisco.com)
разрешен. Иными словами, если страница, к которой необходимо перейти, не
является cisco.com, подключение к ней сбрасывается. Policy map
используется для http inspection в другой policy-map (
global_policy) и применяется с service-policy.
regex allowex2 "cisco\.com"
class-map type inspect http match-all allow-url-class
match not request header host regex allowex2
policy-map type inspect http allow-url-policy
parameters
class allow-url-class
drop-connection log
policy-map global_policy
class inspection_default
inspect http allow-url-policy
service-policy global_policy global
Разрешение определенных URL-адресов
Предположим,
что необходимо разрешить только определенные web-сайты. Например,
необходимо разрешить только страницы cisco.com и только URI, содержащие
"/test/". Для этого будут созданы регулярные выражения, которые затем
будут применены в class-map. Обратите внимание, что если для обоих
операторов match найдено соответствие, условия в class-map считаются
выполненными. Условия обоих операторов match считаются выполненными
тогда и только тогда, когда URL-адрес, по которому пользователь
выполняет переход, не соответствует НИ ОДНОМУ из регулярных выражений.
Затем в policy-map
allow-url-policy будет применено действие
drop-connection. Остальные адреса разрешены (cisco.com или
идентификаторы URI, содержащие "/test/"). Иными словами, если страница, к
которой необходимо перейти, не является ни cisco.com, ни страницей, в
URL-адресе которой содержится "/test/", подключение к ней будет
сброшено. Policy map используется для http inspection в другой
policy-map (
global_policy) и применяется с service-policy.
regex allowex1 "/test/"
regex allowex2 "cisco\.com"
class-map type inspect http match-all allow-url-class
match not request uri regex allowex1
match not request header host regex allowex2
policy-map type inspect http allow-url-policy
parameters
class allow-url-class
drop-connection log
policy-map global_policy
class inspection_default
inspect http allow-url-policy
service-policy global_policy global
Разрешение всех URL-адресов для определенных хостов и только определенных URL-адресов для остальных
Теперь,
предположим, есть несколько хостов (например, администратор сети с
IP-адресом 192.168.1.2), которым необходимо предоставить доступ ко всем
web-сайтам, при этом остальным пользователям нужно разрешить доступ
только к определенным web-сайтам (
обратите внимание,
что для выполнения процесса, описанного в следующем примере, нужно
понять смысл примера, приведенного выше). В данном случае будет
использоваться приблизительно такая же конфигурация, как и в приведенном
выше примере, однако на сей раз потребуются дополнительно access-list,
class-map и policy-map. Условиям access-list (
user-acl) будут
удовлетворять все пользователи, за исключением тех, которым нужен
неограниченный доступ. Последние будут соответствовать условиям
class-map (
allow-user-class), которая, в свою очередь, будет использоваться в отдельной policy-map (
allow-user-url-policy). Эта policy-map обеспечивает выполнение http inspection для policy-map
allow-url-policy (эта часть совпадает с указанной выше) для разрешенных web-сайтов. Таким образом
allow-user-url-policy
будет применяться к интерфейсу, для которого действует service-policy. В
действительности, данная policy-map позволяет отобрать всех
пользователей, кроме пользователей с неограниченными правами доступа (
class allow-user-class) и предоставить им возможность посещать только определенные web-сайты (
inspect http allow-url-policy).
Остальные пользователи (которые не соответствуют критериям или не
заблокированы в списке доступа) смогут переходить по любым адресам.
regex allowex1 "/test/"
regex allowex2 "cisco\.com"
access-list user-acl extended deny tcp host 192.168.1.2 any eq www
access-list user-acl extended permit tcp any any eq www
class-map type inspect http match-all allow-url-class
match not request uri regex allowex1
match not request header host regex allowex2
class-map allow-user-class
match access-list user-acl
policy-map type inspect http allow-url-policy
parameters
class allow-url-class
drop-connection
policy-map allow-user-url-policy
class allow-user-class
inspect http allow-url-policy
service-policy allow-user-url-policy interface inside
Разрешение или отказ в доступе к одному и тому же домену
Выдвигаются следующие требования:
1. отказ в доступе к facebook.com;
2. разрешение доступа к developer.facebook.com при автоматическом перенаправлении на сайт developers.facebook.com;
3. разрешение доступа ко всем остальным доменам, таким как yahoo.com и google.com.
regex block-fb ".*facebook\.com"
regex allow-fb "developer[s]*\.facebook\.com"
!
class-map type regex
match-any block-fb
match regex block-fb
class-map type regex
match-any allow-regex-class
match regex allow-fb
!
policy-map type inspect http http-inspect-pol
parameters
match not request header host regex class allow-regex-class
match request header host regex class block-fb
reset log
class-map http-class
match port tcp eq www
policy-map http-traffic
class http-class
inspect http http-inspect-pol
!
service-policy http-traffic interface inside
Кроме того, можно также привязать http policy-map к default inspection в global_policy.
Имейте в виду, что при каждом добавлении, удалении или изменении регулярных выражений, следует
удалить service policy, которая применяется к интерфейсу, а затем добавить ее снова.
http://www.cisco.com/en/US/docs/security/asa/asa82/configuration/guide/inspect_basic.html#wp1514315
Если вам нужно изменить команду match в inspection HTTP, следует
удалить соответствующую service policy с помощью команды no service policy, а затем перенастроить
service policy. Изменение class map путем удаления команды match приведет к тому, что inspection HTTP будет блокировать
весь HTTP-трафик до тех пор, пока не будет удалена и перенастроена соответствующая service policy для повторного выполнения
всех команд match.