Snort и Suricata — простой путь к использованию IDPS: от установки на сервер до грамотной настройки

wbdw9-wr5gfhovonxwizgxtuglc.png


Межсетевые экраны — один из первых эшелонов защиты интернет-сервисов с довольно широким функционалом по безопасности. В их состав обычно входит класс решений IDPS, который позволяет с высокой точностью определять нелегитимные запросы и блокировать их.

В этом материале рассказываю, что такое системы IDPS и какие они бывают. А также показываю, как их разворачивать на виртуальных серверах и настраивать сигнатуры для блокирования вредоносного трафика. Все инструкции — на примере Snort и Suricata. Подробности под катом.

Знакомство с IDPS


Intrusion Detection and Prevention System, IDPS — это системы обнаружения и предотвращения вторжения. По сути, IDPS мониторит транзитный и локальный трафик на попытки сканирования и атак, соотнося их с имеющимися сигнатурами. Если трафик «зловредный» — он блокируется.

Классификация IDPS и популярные решения


IDPS можно разделить на два класса — NIDS (Network Intrusion Detection System) и HIDS (Host-based Intrusion Detection). Первые — мониторят сетевой трафик, в то время как вторые — анализируют события хоста, в том числе приходящий и уходящий трафик внутри систем.

Как видно из названия, NIDS необходимо ставить на хосты, управляющие трафиком, а HIDS больше подходят для endpoint-хостов с локальными сервисами. Более подробно о классификации и особенностях IDPS-систем можно почитать в Академии Selectel.

В рамках статьи покажем, как начать работать с двумя представителями систем IDPS:

  • Suricata (как инстанс в Ubuntu 20.04) — это высокопроизводительный софт для анализа трафика и поиска угроз;
  • Snort (как пакет в pfSense 2.6.0) — это один из самых популярных IDPS с открытым исходным кодом.


Между этими решениями есть одно важное отличие. Snort работает только в однопоточном режиме, в то время как Suricata может запускаться в многопоточных сценариях и позволяет обрабатывать больше трафика одномоментно.


wbi70nzchr0ohm5bf6wijphel4m.png

Сетевая схема на базе Suricata


В рамках статьи рассмотрим схемы включения IDPS в «разрыв».

qji_g-fqohrwyxpfgezqpqd3wwk.png


Сетевая схема на базе Suricata

В данной схеме между целевым веб-сервером и интернетом установлена IDPS. То есть маршрутизацию и проброс портов обеспечивает именно хост с IDPS. Таким образом, правильно настроив систему, можно блокировать трафик при срабатывании сигнатур.

Настройка хоста


Для начала развернем хост для IDPS.

r3f2jj05z4gicz0whemjaicoi-k.png


Для этого выведем доступные сетевые интерфейсы. Один из них будет вести в интернет, а второй — в локальную сеть, ему необходимо назначить свободный адрес.

eth1: inet 192.168.1.254/24 brd 192.168.1.255 scope global eth1


Теперь настроим для локальной сети выход в интернет и заранее «опубликуем» веб-сервер наружу:

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.1.2:80
$ sudo iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables-save > /etc/iptables/rules.v4


Вторым этапом развернем хост для веб-сервера, на котором поставим Nginx и проверим доступность снаружи:

$ sudo apt install nginx -y
$ curl http://45.145.64.243


Что должен вернуть cURL запрос к Nginx ↓



Welcome to nginx!