Приветствую. Пожалуй, стоит напомнить, что в
прошлой части мы рассмотрели следующие возможности:

1. Определение нескольких портов в одном правиле
2. Сбалансированная загрузка
3. Ограничение числа подключений

Тем, кто ещё не ознакомился с данными дополнениями или забыл, о чём шла речь, настоятельно советую перечитать первую часть. Далее же речь пойдёт о следующих возможностях: 

1. Расширения сравнения и фильтрации по списку недавних подключений
2. Фильтрация по строке в полезных данных пакета
3. Правила, действующие по расписаниию

1. Расширения сравнения и фильтрации по списку недавних подключений

Используя подобное расширение можно, как и следовало ожидать, создавать динамические списки фильтрации IP-адресов на основе неких заданных условий и применять к ним соответствующие правила. Выражаясь более просто – это расширение даёт чрезвычайно удобный инструмент для создания пассивной IDS, которая способна, к примеру, перекрывать доступ к некоторому порту, к которому за определённый промежуток времени обращались более n раз. Пусть некий “bad boy” сканирует диапазон IP адресов, натыкается на нашу машину, и его сканнер портов несколько раз обращается к ней в поисках открытого 139 порта. Прекратить творящееся безобразие можно используя расширение сравнения по списку недавних подключений:

-A FORWARD -m recent --name portscan --rcheck --seconds 300 -j DROP
-A FORWARD -p tcp -i eth0 --dport 139 -m recent --name portscan --set -j DROP

Теперь все пакеты фильтруются в течение 300 секунд. Поддерживаются также такие варианты задания этого правила:

--name name

Имя списка, чтобы хранить в нём IP адреса или сравнивать их. Если не заданно имя, используется значение по умолчанию с именем
DEFAULT.

--set

Это добавит исходный адрес пакета в список. Если исходный адрес уже находится в списке, это обновит существующее вхождение. 

--rcheck

Проверить, находится ли исходный адрес пакета в настоящее время в списке.

--update

Проверить, находится ли исходный адрес пакета в настоящее время в списке. Если да, то вхождение будет обновлено, и правило возвратит истину. 

--remove

Проверит, находится ли исходный адрес пакета в настоящее время в списке и если так, то адрес будет удален из списка, и правило вернёт истину. 

--seconds seconds

Эта опция должна использоваться только вместе с - rcheck или –update. Это сузит список поиска соответствий до предела последнего данного количества секунд.

--hitcount hits

Эта опция также должна использоваться только вместе с - rcheck или –update. Если используется, то это сузит список соответствий до количества вхождений с равными или больше или равным количеством пришедших пакетов. Эта опция может использоваться наряду с --seconds, чтобы создать более узкий критерий соответствия, требующий некоторого числа обращений в пределах определенной временной рамки.

2. Фильтрация по строке в данных пакета

Это расширение позволяет производить поиск подстроки в полезных данных пакета. Хотя этому расширению действительно можно найти полезное применение, я советую вам работать с ним как можно аккуратней. Допустим, наш внешний firewall, построенный на Линуксе, защищает внутреннюю сеть, где есть несколько машин под управлением Windows и мы хотели бы блокировать все исполняемые файлы, которые могут быть получены из внешней сети. Можно попытаться использовать что-то вроде этого:

-A FORWARD -m string --string '.com' -j DROP
-A FORWARD -m string --string '.exe' -j DROP

Но это доставит вам несколько неприятных моментов: 

  • Если '.com' или '.exe' файл разбит на два пакета данных, то подобное правило не принесёт желаемого результата и пакет не будет отфильтрован.
  • Любой пакет, содержащий такую подстроку, включая HTTP ответы и почту, будет заблокирован.

Короче, handle with care!

3. Правила, действующие по расписанию

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

-A FORWARD -p tcp -m multiport --dport http,https -o eth0 -i eth1 \
-m time --timestart 12:30 --timestop 13:30 --days Mon,Tue,Wed,Thu,Fri -j DROP

Понятно, что время является 24-часовыми с форматом HH:MM. День - отделенный запятыми список, который зависит от регистра символов и может состоять из Mon, Tue, Wed, Thu, Fri, Sat и/или Sun.

Продолжение следует…

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии