четверг, 27 июня 2013 г.

Фильтрация URL-адресов ASA

Фильтрация 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.