И двата инструмента четат журнали и блокират адреси, така че на пръв поглед CrowdSec е Fail2ban с по-нов код. Разликата е по-съществена и не е във възрастта на кода, а в това откъде идва решението за блокиране.
Устройство
Fail2ban е един процес, който чете журнали, брои съвпаденията с регулярни изрази и извиква командата на защитната стена. Всяко решение се взема на нашата машина въз основа на нашите броячи. Никъде нищо не се изпраща, зависимости няма, а конфигурацията са текстови файлове.
CrowdSec е разделен на две части и това е най-важното, което трябва да се разбере преди инсталирането. Самият агент само открива: анализира журнали, прилага сценарии и записва решенията в собствената си база данни. Решенията ги изпълнява отделна програма — bouncer. Без инсталиран bouncer CrowdSec работи, показва известия, води списък с решения — и не блокира нищо.
Това е най-честото разочарование при първата среща: инструментът е инсталиран, атаките се виждат, а трафикът тече точно както преди.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Последната команда трябва да покаже поне един регистриран запис. Празен списък означава, че блокиране няма.
Втората разлика: споделена репутация
Fail2ban знае само това, което се е случило при нас. Адрес, който вчера е атакувал стотина чужди сървъра, за него е чист, докато не почука на нашата врата — а първите пет опита са безплатни.
CrowdSec изпраща сигнали за своите открития към споделена мрежа и получава оттам списък с адреси, забелязани при други. Практическият ефект: осезаема част от опитите се отсича преди първия. Има значение особено при разпределени атаки — хиляди адреси по един опит, където локалните броячи са безсилни по определение.
И нещо, което е добре да се знае предварително: обменът е двупосочен. Нашият сървър напускат адресите на нападателите и типовете сработили сценарии. Напълно локална работа е възможна — без регистрация в облачната конзола — но тогава и споделеният списък не ни е достъпен и главното предимство изчезва. Това е съзнателен избор, а не подробност от конфигурацията.
Команди за всеки ден
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics отговаря на въпроса дали журналите изобщо се четат: ако броят анализирани редове е нула, колекцията за нашия уеб сървър не е инсталирана или пътят до журнала е грешен. Това е вторият по честота случай на „стои и не работи“.
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Ресурси
CrowdSec е написан на Go и държи състоянието си в база данни. Потреблението на памет е от порядъка на сто мегабайта плюс bouncer. На сървър с гигабайт това се усеща, от два нагоре — вече не. Fail2ban е по-лек, но и прави по-малко.
Трябват ли и двата
Не си пречат: единият пише своите правила в защитната стена, другият — своите, а двойното блокиране на един и същ адрес не вреди на никого. Разумното разпределение изглежда така.
CrowdSec поема масовите явления: налучкване на пароли за SSH, сканиране на уеб сървъра, известни лоши адреси от споделения списък. Fail2ban остава там, където имаме собствен журнал в собствен формат, за който е по-лесно да се напише регулярен израз, отколкото сценарий — саморъчно написано приложение, рядка услуга, нетипична форма за вход.
Ако трябва да се избере един, ориентирът е следният: на сървър със сайт, който постоянно някой преглежда, CrowdSec дава повече благодарение на споделения списък. На сървър, достъпен само за вас по SSH с ключове, разликата е малка — там изключването на паролите вече е свършило по-голямата част от работата.
Общото ограничение
Нито един от тях не пази от уязвимост в приложението. И двата работят с честотата на заявките и репутацията на адреса, а заявка, използваща дупка в разширение от първия път и от чист адрес, ще мине покрай двата. Това е работа на други инструменти — WAF на ниво заявки и навременни обновявания. Блокирането на адреси премахва фона, а не причината.
Практическата стойност и на двата зависи от това дали някой гледа резултата. Растящ брой решения, сценарий, сработил за първи път, промяна на държавите, от които идват опитите — точно това са сведенията, заради които инструментът е бил поставен. Как изглеждат те на една страница, показва демонстрацията по-долу.