Фильтрация по хостам

<< Кликните, чтобы показать Содержание >>

Руководство Администратора | CHM EPUB PDF A4/Letter   

Фильтрация по хостам

Задача

Необходимо в случае выполнения запросов на сайты <*baender*.com, benderlog.ru, banderlog.biz> прекратить обрабатывать такое сообщение и удалить накопленные данные о нем.

Описание логики решения

Возможны два варианта решения задачи:

1. Полностью игнорировать трафик на хосты с указанными именами в фильтре протокола HTTP. Для этого необходимо написать условие фильтрации по заголовку HTTP-запроса "Host".

2. В фильтре сообщений удалять сообщения, отправляемые на указанные хосты. Для этого необходимо произвести разрешение DNS-имён и написать условие фильтрации "hostname".

Вариант 1 является более предпочтительным, так как позволяет отфильтровывать ненужные данные на более раннем этапе, что значительно снижает нагрузку на EtherSensor.

Решение

1. Вариант 1 – игнорирование трафика на ранней стадии при помощи фильтра протокола HTTP.

Например, файл фильтра HTTP-протокола может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>

<filter name="HTTP filter" version="1.0">

  <table name="main">

 

    <rule enabled="true">

      <match>

        <or>

          <c name="req-header"

             headername="Host"

             op="wc"

             value="*baender*.com*"/>

          <c name="req-header"

             headername="Host"

             op="eq"

             value="benderlog.ru"/>

          <c name="req-header"

             headername="Host"

             op="eq"

             value="banderlog.biz"/>

        </or>

      </match>

      <action name="drop" />

    </rule>

 

    <rule enabled="true">

      <action name="accept" />

    </rule>

 

  </table>

</filter>

Подробное описание условия фильтрации "req-header" смотрите в разделе Условие REQ-HEADER, RESP-HEADER.

2. Вариант 2 – удаление сообщений в фильтре сообщений.

Необходимо включить разрешение DNS-имён, файл фильтра сообщений может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>

<filter name="Message filter" version="1.0">

 

  <table name="main">

 

    <rule enabled="1">

      <match>

        <or>

          <c name="hostname"

             address="server"

             op="wc"

             value="*baender*.com*" />

          <c name="hostname"

             address="server"

             op="eq"

             value="benderlog.ru" />

          <c name="hostname"

             address="server"

             op="eq"

             value="banderlog.biz" />

        </or>

      </match>

      <action name="drop"/>

    </rule>

 

    <rule enabled="1">

      <action name="accept" />

    </rule>

 

  </table>

</filter>

 

Подробное описание условия фильтрации "hostname" смотрите в разделе Условие HOSTNAME.

Комментарии и общие рекомендации

1. В варианте 1 обратите внимание, что проверка имени хоста из заголовка "Host" по wildcard-маске "*baender*.com*" содержит "*" в начале и в конце маски. В начале маски это необходимо потому, что в начале имени хоста могут идти имена доменов верхнего уровня (например, www.baender.com или 123.baender.com). В конце маски это необходимо потому, что в конце имени хоста в заголовке "Host" может быть указан порт назначения (например, baender.com:80).Проверка на равенство (операция в условии "eq") подразумевает просто поиск подстроки в строке. Поэтому "eq" со значением "benderlog.ru" будет срабатывать и для www.benderlog.ru и для benderlog.ru:80.

2. Для варианта 2 в общем случае для работы условия "hostname" необходимо предварительно произвести разрешение имён DNS. Однако, в указанном случае (мы проверяем только хост назначения и только для протокола HTTP) этого делать не обязательно, так как значение хоста будет доступно из заголовка "Host" HTTP-протокола.