установить Fail2Ban для защиты SSH на CentOS/RHEL 8

Fail2ban — это бес­плат­ный и широ­ко исполь­зу­е­мый инстру­мент предот­вра­ще­ния втор­же­ний с откры­тым исход­ным кодом, кото­рый мони­то­рит фай­лы жур­на­лов на нали­чие IP-адре­сов, кото­рые пока­зы­ва­ют вре­до­нос­ные при­зна­ки, такие как слиш­ком боль­шое коли­че­ство сбо­ев вво­да паро­лей и мно­гое дру­гое, и запре­ща­ет их доступ (обнов­ля­ет пра­ви­ла бранд­мау­э­ра для откло­не­ния этих IP-адре­сов). По умол­ча­нию Fail2ban постав­ля­ет­ся с филь­тра­ми для раз­лич­ных сер­ви­сов, вклю­чая sshd.

Установка Fail2ban на CentOS/RHEL 8

Пакет fail2ban отсут­ству­ет в офи­ци­аль­ных репо­зи­то­ри­ях, но досту­пен в репо­зи­то­рии EPEL. После вхо­да в систе­му перей­ди­те к интер­фей­су команд­ной стро­ки, а затем вклю­чи­те репо­зи­то­рий EPEL в сво­ей систе­ме, как пока­за­но ниже:

Или же:

После это­го уста­но­ви­те пакет Fail2ban, выпол­нив сле­ду­ю­щую команду:

Настройка Fail2ban для защиты SSH

Фай­лы кон­фи­гу­ра­ции fail2ban нахо­дят­ся в ката­ло­ге /etc/fail2ban/, а филь­тры хра­нят­ся в ката­ло­ге /etc/fail2ban/filter.d/ (файл филь­тра для sshd — /etc/fail2ban/filter.d/sshd.conf).

Гло­баль­ным фай­лом кон­фи­гу­ра­ции для сер­ве­ра fail2ban явля­ет­ся /etc/fail2ban/jail.conf, одна­ко не реко­мен­ду­ет­ся изме­нять этот файл напря­мую, так как он, веро­ят­но, будет пере­за­пи­сан или улуч­шен в слу­чае обнов­ле­ния паке­та в будущем.

В каче­стве аль­тер­на­ти­вы реко­мен­ду­ет­ся созда­вать и добав­лять свои кон­фи­гу­ра­ции в файл jail.local или отдель­ные фай­лы .conf в ката­ло­ге /etc/fail2ban/jail.d/. Обра­ти­те вни­ма­ние, что пара­мет­ры кон­фи­гу­ра­ции, уста­нов­лен­ные в jail.local, будут пере­опре­де­лять всё, что опре­де­ле­но в jail.conf.

Для этой ста­тьи мы созда­дим отдель­ный файл с име­нем jail.local в ката­ло­ге /etc/fail2ban/, как пока­за­но ниже:

Когда файл открыт, ско­пи­руй­те и вставь­те в него сле­ду­ю­щую кон­фи­гу­ра­цию. Pаз­дел [DEFAULT] содер­жит гло­баль­ные пара­мет­ры, а [sshd] содер­жит пара­мет­ры для sshd jail:

Давай­те крат­ко объ­яс­ним пара­мет­ры в при­ве­ден­ной выше конфигурации:

  • ignoreip: ука­зы­ва­ет спи­сок IP-адре­сов или имен хостов, кото­рые нель­зя забанить.
  • bantime: ука­зы­ва­ет коли­че­ство секунд, на кото­рое хост заба­нен (т.е. эффек­тив­ная дли­тель­ность бана).
  • maxretry: ука­зы­ва­ет коли­че­ство сбо­ев до того, как хост будет забанен.
  • findtimefail2ban забло­ки­ру­ет хост, если он гене­ри­ро­вал «maxretry» в тече­ние послед­них секунд «findtime».
  • Banaction: запрет действия.
  • backend: ука­зы­ва­ет бэк­энд, исполь­зу­е­мый для полу­че­ния моди­фи­ка­ции фай­ла журнала.

 

Таким обра­зом, при­ве­ден­ная выше кон­фи­гу­ра­ция озна­ча­ет, что если у како­го-то IP три­жды про­изо­шел сбой за послед­ние 5 минут, вы забло­ки­руй­те его на 6 часов и про­игно­ри­руй­те IP-адрес 192.168.56.2.

 

Затем запу­сти­те и акти­ви­руй­те сер­вис fail2ban. Про­верь­те, рабо­та­ет ли он, исполь­зуя сле­ду­ю­щую коман­ду systemctl:

Мониторинг проблемных и заблокированных IP-адресов с помощью fail2ban-client

После настрой­ки fail2ban для защи­ты sshd вы може­те отсле­жи­вать про­блем­ные и забло­ки­ро­ван­ные IP-адре­са с помо­щью fail2ban-client. Что­бы про­смот­реть теку­щее состо­я­ние сер­ве­ра fail2ban, выпол­ни­те сле­ду­ю­щую команду:


Что­бы кон­тро­ли­ро­вать sshd jail, запу­сти­те:

Что­бы раз­ба­нить IP-адрес в fail2ban (во всех jails и базе дан­ных), выпол­ни­те сле­ду­ю­щую команду:

Для полу­че­ния допол­ни­тель­ной инфор­ма­ции о fail2ban про­чи­тай­те сле­ду­ю­щие спра­воч­ные страницы: