Како функционира Fail2Ban за да ги заштити услугите на серверот Линукс


Вовед

SSH е де факто метод за поврзување со облак сервер. Тој е издржлив и може да се прошири - како што се развиваат нови стандарди за шифрирање, тие можат да се користат за генерирање на нови SSH клучеви, осигурувајќи дека основниот протокол останува безбеден. Сепак, ниту еден протокол или софтверски стек не е целосно непромислен, а SSH што е толку широко распространет на интернет значи дека претставува многу предвидлива површина на напад или вектор за напад преку кој луѓето можат обидете се да добиете пристап.

Секоја услуга што е изложена на мрежата е потенцијална цел на овој начин. Ако ги прегледате дневниците за вашата SSH услуга која работи на кој било сервер со широко тргување, често ќе видите повторени, систематски обиди за најавување кои претставуваат напади со брутална сила од страна на корисниците и ботови. Иако можете да направите некои оптимизации на вашата SSH услуга за да ја намалите можноста овие напади да успеат на речиси нула, како што е оневозможување на автентикација на лозинка во корист на клучевите SSH, тие сепак можат да претставуваат мала, постојана одговорност.

Распоредувањето на производството од големи размери за кои оваа одговорност е целосно неприфатлива обично ќе имплементира VPN како што е WireGuard пред нивната SSH услуга, така што е невозможно директно да се поврзе со стандардната SSH порта 22 од надворешен интернет без дополнителна апстракција на софтвер или порти. Овие VPN решенија имаат широка доверба, но ќе додадат сложеност и можат да скршат некои автоматизации или други мали софтверски куки.

Пред или како додаток на целосното поставување на VPN, можете да имплементирате алатка наречена Fail2ban. Fail2ban може значително да ги ублажи нападите со брутална сила со создавање правила кои автоматски ја менуваат конфигурацијата на вашиот заштитен ѕид за да забранат одредени IP-адреси по одреден број неуспешни обиди за најавување. Ова ќе му овозможи на вашиот сервер да се зацврсти против овие обиди за пристап без ваша интервенција.

Во друго упатство, разговаравме како да го заштитиме SSH со Fail2ban. Во овој водич, ќе разговараме подетално како всушност функционира Fail2ban и како можете да го користите ова знаење за да го измените или проширите однесувањето на оваа услуга.

Основите на Fail2ban

Целта на Fail2ban е да ги следи дневниците на вообичаените услуги за да ги забележи шемите во неуспесите во автентикацијата.

Кога fail2ban е конфигуриран да ги следи дневниците на услугата, тој гледа во филтер што е конфигуриран специфично за таа услуга. Филтерот е дизајниран да ги идентификува неуспесите во автентикацијата за таа специфична услуга преку употреба на сложени регуларни изрази. Редовните изрази се вообичаен јазик за шаблони што се користи за совпаѓање на шаблони. Ги дефинира овие обрасци на регуларни изрази во внатрешна променлива наречена failregex.

Стандардно, Fail2ban вклучува датотеки со филтри за заеднички услуги. Кога дневник од која било услуга, како веб-сервер, се совпаѓа со failregex во неговиот филтер, се извршува претходно дефинирано дејство за таа услуга. action е променлива што може да се конфигурира да прави многу различни работи, во зависност од преференциите на администраторот.

Стандардното дејство е да се забрани навредливиот домаќин/IP адреса со менување на правилата за локалниот заштитен ѕид. Можете да го проширите ова дејство за, на пример, да испратите е-пошта до вашиот системски администратор.

Стандардно, ќе се преземе дејство кога ќе се детектираат три неуспеси во автентикацијата за 10 минути, а стандардното време на забрана е 10 минути. Ова може да се конфигурира.

Кога го користите стандардниот заштитен ѕид iptables, fail2ban создава нов сет на правила за заштитен ѕид, наречени и синџир, кога услугата ќе се стартува. Додава ново правило во INPUT синџирот што го испраќа целиот TCP сообраќај насочен кон портата 22 до новиот синџир. Во новиот синџир, вметнува едно правило кое се враќа во INPUT синџирот. Синџирот и поврзаните правила се отстрануваат ако услугата Fail2ban е запрена.

Истражување на поставките за услугата Fail2ban

Fail2ban е конфигуриран преку неколку датотеки лоцирани во хиерархија под директориумот /etc/fail2ban/.

Датотеката fail2ban.conf конфигурира некои оперативни поставки како што е начинот на кој демонот ги евидентира информациите, како и датотеката сокет и pid што ќе ги користи. Меѓутоа, главната конфигурација е наведена во датотеките што ги дефинираат „затворите“ по апликација.

Стандардно, fail2ban се испорачува со датотека jail.conf. Сепак, ова може да се препише во ажурирањата, па затоа треба да ја копирате оваа датотека во датотека jail.local и да направите прилагодувања таму.

Ако веќе имате датотека jail.local, отворете ја користејќи nano или вашиот омилен текстуален уредувач:

  1. sudo nano /etc/fail2ban/jail.local

Ако веќе немате датотека jail.local или датотеката што ја отворивте беше празна, копирајте преку датотеката jail.conf и потоа отворете ја новата датотека:

  1. sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  2. sudo nano /etc/fail2ban/jail.local

Ќе ги разгледаме опциите достапни овде и ќе видиме како оваа датотека комуницира со другите конфигурациски датотеки на системот.

Стандарден дел

Првиот дел од датотеката ќе ги дефинира стандардните вредности за политиката fail2ban. Овие опции може да се отфрлат во одделот за конфигурација на секоја поединечна услуга.

Со отстранети коментари, целиот стандарден дел изгледа вака:

[DEFAULT]

ignoreip = 127.0.0.1/8
bantime = 10m
findtime = 10m
maxretry = 3
backend = auto
usedns = warn
destemail = root@localhost
sendername = Fail2Ban
banaction = iptables-multiport
mta = sendmail
protocol = tcp
chain = INPUT
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"]
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]
action = %(action_)s

Ајде да погледнеме што значат некои од ова:

- ignoreip: овој параметар ги идентификува IP адресите што треба да се игнорираат од системот за забрана. Стандардно, ова е само поставено да го игнорира сообраќајот што доаѓа од самата машина, за да не ги пополнувате сопствените дневници или да не се заклучувате.

- bantime: овој параметар ја поставува должината на забраната, во секунди. Стандардно е 10 минути.

- findtime: овој параметар го поставува прозорецот на кој Fail2ban ќе обрне внимание кога бара повторени неуспешни обиди за автентикација. Стандардно е поставено на 10 минути, што значи дека софтверот ќе го брои бројот на неуспешни обиди во последните 10 минути.

- maxretry: Ова го поставува бројот на неуспешни обиди што ќе се толерираат во прозорецот findtime пред да се воведе забрана.

- задниот дел: овој запис одредува како Fail2ban ќе ги следи датотеките за евиденција. Поставувањето на auto значи дека fail2ban ќе се обиде со pyinotify, потоа gamin, а потоа и алгоритам за анкетирање врз основа на она што е достапно. inotify е вградена функција на кернелот на Линукс за следење кога се пристапува до датотеките, а pyinotify е интерфејс на Python за inotify, што го користи Fail2ban.

- usedns: Ова дефинира дали обратниот DNS се користи за да помогне во спроведувањето на забраните. Поставувањето на „не“ ќе ги забрани самите IP-адреси наместо нивните имиња на домаќини на доменот.

- destemail: ова е адресата на која ќе биде испратена пошта за известување доколку вашето дејство го конфигурирате да испраќа предупредувања.

- име на испраќач: ова ќе се користи во полето за е-пошта за генерирани е-пораки за известување

- banaction: Ова го поставува дејството што ќе се користи кога ќе се достигне прагот. Ова е всушност патека до датотека лоцирана во /etc/fail2ban/action.d/ наречена iptables-multiport.conf. Ова се справува со вистинската манипулација со заштитниот ѕид iptables за забрана на IP адреса. Ова ќе го разгледаме подоцна.

- mta: Ова е агент за пренос на пошта што ќе се користи за испраќање е-пораки за известување.

- протокол: ова е типот на сообраќај што ќе се отфрли кога ќе се имплементира забраната за IP. Ова е исто така тип на сообраќај што се испраќа до новиот синџир iptables.

- синџир: ова е синџирот што ќе биде конфигуриран со правило за скок за испраќање сообраќај до инката fail2ban.

Останатите параметри дефинираат различни дејства што може да се специфицираат. Тие поминуваат во некои од параметрите што ги дефиниравме погоре користејќи замена на променлива во текстуални низи како ова:

%(var_name)s

Линијата погоре ќе се замени со содржината на var_name. Користејќи го ова, можеме да кажеме дека променливата action е стандардно поставена на дефиницијата action_ (само забрана, без предупредувања по пошта).

Ова, пак, се конфигурира со повикување на акцијата iptables-multiport со листа на параметри (име на услуга, порта, протокол и синџир) кои се потребни за извршување на забраната. __name__ се заменува со името на услугата како што е наведено во заглавијата на секциите подолу.

Секции за специфични услуги

Под стандардниот дел, има делови за специфични услуги што може да се користат за да се отфрлат стандардните поставки. Ова следи конвенција на само модификација на параметрите кои се разликуваат од нормалните вредности (конвенција над конфигурација).

Секој заглавие на секцијата е наведен вака:

[service_name<]

Секој дел што ја има линијата enabled=true ќе биде прочитан и овозможен.

Во секој дел, параметрите се конфигурирани, вклучувајќи ја и датотеката со филтер што треба да се користи за анализирање на дневниците (минус наставката на датотеката) и локацијата на самите датотеки за евиденција.

Имајќи го ова на ум, делот што ги специфицира дејствата за услугата SSH изгледа вака:

[SSH]

enabled     = true
port        = ssh
filter      = sshd
logpath     = /var/log/auth.log
maxretry    = 6

Ова го овозможува овој дел и ја поставува портата на стандардната порта \ssh (порта 22). Му кажува на Fail2ban да го погледне дневникот лоциран на /var/log/auth.log за овој дел и за да го анализирате дневникот користејќи ги механизмите за филтрирање дефинирани во директориумот /etc/fail2ban/filters.d во датотека наречена sshd.conf.

Сите други информации што му се потребни се земени од параметрите дефинирани во делот [DEFAULT]. На пример, дејството ќе биде поставено на action_ што ќе ја забрани навредливата IP адреса користејќи ја банакцијата iptables-multiport, која упатува на датотека наречена iptables-multiport. conf пронајден во /etc/fail2ban/action.d.

Како што можете да видите, дејствата во делот [DEFAULT] треба да бидат општи и флексибилни. Користењето на замена на параметрите заедно со параметрите кои обезбедуваат разумни стандардни поставки ќе овозможи да се отфрлат дефинициите кога е потребно.

Испитување на датотеката со филтер

За да разбереме што се случува во нашата конфигурација, треба да ги разбереме филтерот и акционите датотеки, кои го вршат најголемиот дел од работата.

Датотеката со филтер ќе ги одреди линиите што fail2ban ќе ги бара во датотеките за евиденција за да ги идентификува навредливите карактеристики. Акциската датотека ги имплементира сите потребни дејства, од изградба на структура на заштитен ѕид кога ќе започне услугата, до додавање и бришење правила и уривање на структурата на заштитниот ѕид кога услугата ќе престане.

Ајде да ја погледнеме датотеката со филтер што ја повика нашата услуга SSH во конфигурацијата погоре:

  1. sudo nano /etc/fail2ban/filter.d/sshd.conf
[INCLUDES]

before = common.conf

[Definition]

_daemon = sshd
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via \S+)?\s*$
        ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$
        ^%(__prefix_line)sFailed \S+ for .*? from <HOST>(?: port \d*)?(?: ssh\d*)?(: (ruser .*|(\S+ ID \S+ \(serial \d+\) CA )?\S+ %(__md5hex)s(, client user ".*", client host ".*")?))?\s*$
        ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
        ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
        ^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$
        ^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$
        ^%(__prefix_line)sUser .+ from <HOST> not allowed because not in any group\s*$
        ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
        ^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$
        ^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$
ignoreregex =

Заглавието на секцијата [INCLUDES] одредува други датотеки со филтри што се читаат пред или по оваа датотека. Во нашиот пример, датотеката common.conf се чита и се става пред другите линии во оваа датотека. Ова поставува некои параметри што ќе ги користиме во нашата конфигурација.

Следно, имаме дел [Definition] кој ги дефинира вистинските правила за нашите совпаѓања на филтри. Прво, го поставивме името на демонот што го следиме со користење на параметарот _daemon.

После тоа, поминуваме низ вистинската дефиниција failregex, која ги поставува шемите што ќе се активираат кога ќе се најде соодветна линија во датотеката за евиденција. Ова се редовни изрази што се совпаѓаат врз основа на различните грешки и неуспеси што може да се исфрлат кога корисникот не се автентицира правилно.

Делови од линијата како %(__prefix_line)s ќе бидат заменети со вредноста на поставувањето на параметарот во датотеката common.conf што ја набавивме. Ова се користи за усогласување на различни водечки информации што оперативните системи ги пишуваат во датотеките за евиденција кога користат стандардни методи. На пример, некои линии од /var/log/auth.log може да изгледаат вака:

May  6 18:18:52 localhost sshd[3534]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.79.130.213 
May  6 18:18:54 localhost sshd[3534]: Failed password for invalid user phil from 101.79.130.213 port 38354 ssh2
May  6 18:18:54 localhost sshd[3534]: Received disconnect from 101.79.130.213: 11: Bye Bye [preauth]

Нагласениот дел е стандардна шема што оперативниот систем ја вметнува за да обезбеди повеќе контекст. После тоа, постојат неколку различни начини на кои услугата за заштитен ѕид iptables ги запишува обидите за неуспех во дневникот.

Гледаме два одделни неуспеси во првите два реда погоре (грешка при автентикација на PAM и грешка во лозинката). Правилните изрази дефинирани во филтерот се дизајнирани да одговараат на која било од можните линии на неуспех. Не треба да приспособувате ниту една од овие линии, но треба да бидете свесни за потребата да ги фатите сите записи во дневникот што означуваат грешка во неовластена употреба за апликацијата што се обидувате да ја заштитите ако некогаш треба сами да креирате датотека за филтрирање .

На дното, можете да видите параметар ignoreregex, кој моментално е празен. Ова може да се користи за да се исклучат поспецифични обрасци кои обично се совпаѓаат со услов за неуспех во случај да сакате да го негирате активирањето за неуспех за fail2ban за одредени сценарија. Нема да го прилагодуваме ова.

Зачувајте ја и затворете ја датотеката кога ќе завршите со нејзиното испитување.

Испитување на Акциската датотека

Сега, ајде да погледнеме во акциската датотека. Оваа датотека е одговорна за поставување на заштитниот ѕид со структура која дозволува модификации за забрана на малициозни хостови и за додавање и отстранување на тие хостови по потреба.

Дејството што го повикува нашата SSH услуга се нарекува iptables-multiport. Отворете ја поврзаната датотека сега:

  1. sudo nano /etc/fail2ban/action.d/iptables-multiport.conf

Со отстранети коментари, оваа датотека изгледа отприлика вака:

[INCLUDES]
before = iptables-blocktype.conf

[Definition]
actionstart = iptables -N fail2ban-<name>
                iptables -A fail2ban-<name> -j RETURN
                iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

actioncheck = iptables -n -L <chain> | grep -a 'fail2ban-<name>[ \t]'

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>

actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>

[Init]
name = default
port = ssh
protocol = tcp
chain = INPUT

Датотеката започнува со набавка на друга акциона датотека наречена iptables-blocktype.conf која го дефинира параметарот blocktype, кој го конфигурира ограничувањето што ќе се постави кога клиентот е забранет. Стандардно, blocktype е поставен да одбива пакети и да одговара на пинг испратени од забранети клиенти со порака за отфрлање дека пристаништето е недостапно. Ние ќе го користиме ова во нашите правила за забрана подолу.

Следно, доаѓаме до самите дефиниции на правилата. Дејството actionstart го поставува заштитниот ѕид iptables кога ќе се стартува услугата fail2ban. Создава нов синџир, додава правило на тој синџир за да се врати во синџирот на повикување, а потоа вметнува правило на почетокот на INPUT синџирот што поминува сообраќај што одговара на правилниот протокол и дестинации на пристаништето на новиот синџир.

Тоа го прави со користење на вредностите што ги донесовме со акција што ја дефиниравме во нашата датотека jail.local. име се зема од заглавието на секцијата за секоја услуга. chain, protocol и port се земени од самата линија action во таа датотека.

Овде, сите параметри што се поставени од другата датотека се референцирани со вклучување на името на параметарот во аголни загради:

<param_name>

Кога ќе се префрлиме на придружната дефиниција actionstop, можеме да видиме дека командите на заштитниот ѕид спроведуваат пресврт на командите actionstart. Кога услугата Fail2ban ќе престане, чисто ги отстранува сите правила за заштитен ѕид што ги додаде.

Друго дејство наречено actioncheck осигурува дека е создаден соодветниот синџир пред да се обиде да додаде правила за забрана.

Следно, доаѓаме до вистинското правило за забрана, наречено actionban. Ова правило функционира со додавање ново правило на нашиот создаден синџир. Правилото се совпаѓа со изворната IP адреса на навредливиот клиент - овој параметар се чита од дневниците за овластување кога ќе се достигне лимитот maxretry. Тој го воспоставува блокот дефиниран со параметарот blocktype што го добивме во делот [INCLUDE] на врвот на датотеката.

Правилото actionunban го отстранува ова правило. Ова се прави автоматски со fail2ban кога ќе истече времето за забрана.

Конечно, доаѓаме до делот [Init]. Ова само обезбедува некои стандардни поставки во случај да се повика акциската датотека без да се префрлат сите соодветни вредности.

Како услугата Fail2ban ги обработува конфигурациските датотеки за да имплементира забрани

Сега кога ги видовме спецификите, ајде да го разгледаме процесот што се случува кога ќе започне fail2ban.

Вчитување на почетните конфигурациски датотеки

Прво, главната датотека fail2ban.conf се чита за да се одредат условите под кои треба да работи главниот процес. Ако е потребно, ги создава датотеките со сокет, pid и дневник и почнува да ги користи.

Следно, fail2ban ја чита датотеката jail.conf за детали за конфигурацијата. Ова следи со читање, по азбучен ред, сите датотеки пронајдени во директориумот jail.d што завршуваат на .conf. Ги додава поставките пронајдени во овие датотеки во неговата внатрешна конфигурација, давајќи им предност на новите вредности во однос на вредностите опишани во датотеката jail.conf.

Потоа бара датотека jail.local и го повторува овој процес, приспособувајќи ги новите вредности. Конечно, повторно го пребарува директориумот jail.d, читајќи ги датотеките по азбучен ред што завршуваат на .local.

Во нашиот случај, имаме само датотека jail.conf и датотека jail.local. Во нашата датотека jail.local, треба само да ги дефинираме вредностите што се разликуваат од датотеката jail.conf. Процесот fail2ban сега има збир на директиви вчитани во меморијата кои претставуваат комбинација од сите датотеки што ги нашол.

Го испитува секој дел и бара директива enabled=true. Ако најде еден, ги користи параметрите дефинирани во тој дел за да изгради политика и да одлучи кои дејства се потребни. Сите параметри што не се наоѓаат во делот на услугата ги користат параметрите дефинирани во делот [DEFAULT].

Парсирање на акционите датотеки за да се одредат почетните дејства

Fail2ban бара директива action за да открие која скрипта за акција да повика за да ги спроведе политиките за забрана/одбранување. Ако некој не се најде, се враќа на стандардното дејство утврдено погоре.

Директивата за акција се состои од името на акционите датотеки што ќе се читаат, како и речник со клучна вредност што ги пренесува параметрите потребни за тие датотеки. Вредностите на овие често имаат форма на замена на параметри со упатување на поставките конфигурирани во делот на услугата. На клучот „име“ обично му се пренесува вредноста на специјалната променлива __name__ која ќе биде поставена на вредноста на заглавието на делот.

Потоа Fail2ban ги користи овие информации за да ги пронајде поврзаните датотеки во директориумот action.d. Прво ја бара поврзаната акциона датотека што завршува на .conf, а потоа ги менува информациите пронајдени таму со сите поставки содржани во придружната датотека .local исто така пронајдена во Директориум action.d.

Ги анализира тие датотеки за да ги одреди дејствата што треба да ги преземе. Ја чита вредноста actionstart за да ги види дејствата што треба да ги преземе за да ја постави околината. Ова често вклучува создавање на структура на заштитен ѕид за да се приспособат на правилата за забрана во иднина.

Дејствата дефинирани во оваа датотека ги користат параметрите што ѝ се пренесени од директивата action. Ќе ги користи овие вредности за динамички да ги креира соодветните правила. Ако одредена променлива не е поставена, може да ги погледне стандардните вредности поставени во акциската датотека за да ги пополни празнините.

Парсирање на датотеките со филтри за да се одредат правилата за филтрирање

Параметрите за услугата во датотеките jail.* ја вклучуваат и локацијата на датотеката за евиденција, како и механизмот за гласање што треба да се користи за проверка на датотеката (ова е дефинирано со задниот параметар). Исто така, вклучува филтер што треба да се користи за да се утврди дали линијата во дневникот претставува дефект.

Fail2ban бара во директориумот filter.d за да ја пронајде соодветната датотека со филтер што завршува на .conf. Ја чита оваа датотека за да ги дефинира шемите што може да се користат за усогласување на навредливите линии. Потоа бара соодветна датотека со филтер што завршува со .local за да види дали некој од стандардните параметри е препишан.

Ги користи регуларните изрази дефинирани во овие датотеки додека ја чита датотеката за евиденција на услугата. Ја пробува секоја линија failregex дефинирана во датотеките filter.d наспроти секоја нова линија запишана во датотеката за евиденција на услугата.

Ако регуларниот израз врати совпаѓање, тој ја проверува линијата со регуларните изрази дефинирани со ignoreregex. Ако и ова се совпаѓа, fail2ban го игнорира. Ако линијата се совпаѓа со израз во failregex, но не се совпаѓа со израз во ignoreregex, внатрешен бројач се зголемува за клиентот што ја предизвикал линијата и поврзан временски печат е создадена за настанот.

Кога ќе се достигне временскиот прозорец поставен од параметарот findtime во датотеките jail.* (како што е определено со временскиот печат на настанот), внатрешниот бројач повторно се намалува и настанот повеќе не се смета за релевантно за политиката за забрана.

Ако, со текот на времето, се евидентираат дополнителни неуспеси за автентикација, секој обид го зголемува бројачот. Ако бројачот ја достигне вредноста поставена од параметарот maxretry во конфигурираниот временски прозорец, fail2ban воведува забрана со повикување на акцијата actioncheck за услугата како што е дефинирано во action.d/ датотеки за услугата. Ова е за да се утврди дали дејството actionstart ја постави потребната структура. Потоа го повикува дејството actionban за да го забрани клиентот навредлив. Поставува временски печат и за овој настан.

Кога ќе помине времето што беше одредено со параметарот bantime, fail2ban го одбранува клиентот со повикување на акцијата actionunban.

Заклучок

Досега имате прилично длабинско разбирање за тоа како функционира fail2ban. Кога отстапувате од стандардната конфигурација, корисно е да знаете како функционира fail2ban за да се манипулира со неговото однесување на предвидлив начин.

За да дознаете како да ги заштитите другите услуги со fail2ban, можете да прочитате Како да заштитите сервер Nginx со Fail2Ban на Ubuntu 22.04.