<< Кликните, чтобы показать Содержание >> Фильтрация по хостам |
Задача
Необходимо в случае выполнения запросов на сайты <*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-протокола.