Конфигуриране на Fail2Ban на Linux за защита на SSH, Apache, MySQL, Exim

Fail2ban ви позволява да блокирате достъпа до сървъра или работещите услуги въз основа на анализа на регистрационните файлове и връзките. Fail2Ban може автоматично да създава правила за защитна стена, за да блокира конкретни IP адреси, ако действията от този IP адрес бъдат открити като подозрителни. И така, Fail2Ban може да защити вашия сървър от намиране на парола чрез SSH, DDoS атаки, експлоатират опити за експлоатация и извършване на забранени действия.

Всяка сървърна услуга, чиито портове са отворени към външния свят, е потенциално уязвима. Пристанищата на някои услуги могат да бъдат затворени, но не всички могат да направят това. Например, ако искате вашата SMTP пощенска услуга да работи пълноценно, не можете да я деактивирате или да блокирате порта на защитната стена и от време на време можете да видите в регистрационните файлове данни за опита за избор на парола за акаунта. Това се случва с други услуги..

Обикновено на всичките си сървъри затварям SSH достъп отвън, защото Свързвам се към сървърите си от статичния си IP адрес или чрез OpenVPN връзка. Но това не винаги е възможно. Подмяната на стандартни портове идва на помощ или конфигурира на сървъра за услуги fail2ban. В този пример ще покажем как да инсталирате и използвате fail2ban на CentOS, но можете да използвате тази инструкция и за други Linux дистрибуции..

Съдържание:

  • Инсталиране и първоначална настройка на Fail2Ban в CentOS 8/7
  • Използване на Fail2Ban за защита на SSH от проверка на паролата
  • Регистрация Fail2Ban
  • Осигуряване на Apache с Fail2Ban
  • Конфигуриране на пакети Fail2Ban и Nginx
  • Осигуряване на MySQL с Fail2Ban
  • Правила на Fail2Ban за Exim
  • Fail2Ban IP списък, IP деблокиране

Инсталиране и първоначална настройка на Fail2Ban в CentOS 8/7

Пакетът за инсталиране на fail2ban е в хранилището на Epel, ние ще го свържем:

# yum инсталирате epel-release -y

След като свържете хранилището, можете да инсталирате fail2ban чрез yum или dnf (в CentOS 8):

# yum инсталирате fail2ban -y

Както всяка друга услуга, fail2ban трябва да се добави към стартиране, така че да се стартира автоматично, когато системата се рестартира:

[root @ server ~] # systemctl активира fail2ban

Създаден symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.

офис fail2ban съхранява конфигурационни файлове в директория / и т.н. / fail2ban. Основен конфигурационен файл - /etc/fail2ban/jail.conf. Тъй като този файл може да бъде презаписан при актуализиране на услугата, за да работи, трябва да създадете файл jail.local. Също така файлове в директория /etc/fail2ban/jail.d/ може да се използва за отмяна на настройките в горните файлове. Файловете се прилагат в следния ред:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Използване на Fail2Ban за защита на SSH от проверка на паролата

Създайте файл и направете настройките:

# nano /etc/fail2ban/jail.local

И добавете съдържанието към него:

[DEFAULT] # Ban хостинг за един час: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enable = true

Тази конфигурация задава ново време за блокиране на IP адреси за всички услуги, задава използването IPTABLES за брави и защитата за sshd е разрешена.

За да използвате firewalld за филтриране, посочете:

banaction = firewallcmd-ipset

След промяна на настройките, рестартирайте услугата:

# systemctl рестартиране fail2ban

За да видите състоянието на fail2ban и да проверите списъка със защитени услуги, изпълнете командата:

[root @ server ~] # fail2ban-status на клиента

Състояние | - Брой на затвора: 1 '- Списък на затвора: sshd 

Можете да поискате текущото състояние на заключване на fail2ban за конкретна услуга:

# fail2ban-status на клиента sshd

Във файл jail.conf може да опише общи параметри, които няма да бъдат отменени jail.local.

Отключете линията:

ignoreip = 127.0.0.1/8

Променете следните стойности:
bantime = 10м - време, за което IP ще бъде блокиран
findtime = 10м - време, през което неуспешните опити за упълномощаване ще бъдат отчетени.
макретри = 3 - брой опити преди блокирането

За да получавате известия по имейл, трябва да конфигурирате следните опции:
destemail = [email protected] -получателят
sender = [email protected] - подател
mta = постфикс - SMTP услуга, чрез която изпраща

За да конфигурирате блокиране за отделни услуги във файла /etc/fail2ban/jail.local след блока [DEFAULT] се създава блок за желаната услуга, например, както при sshd. Добавете някои настройки към него:

[sshd] активиран = истински порт = ssh logpath =% (sshd_log) s

Посочихме кой порт да блокираме и къде да напишем блокиращите регистрационни файлове. Обърнете внимание на директорията /etc/fail2ban/filter.d, там са описани филтри, с помощта на които ще бъдат анализирани записите в дневника и да се провери дали този или онзи запис показва неуспешна автентификация. Ако изброите файловете в директория, можете да намерите правила за fail2ban за най-популярните услуги:
# ls /etc/fail2ban/filter.d

Файловете са описани много подробно и можете да изучавате какво трябва да разберете как се извършват проверките в журнала..

Регистрация Fail2Ban

За да проверите дневника fail2ban, изпълнете командата:

# journalctl -b -u fail2ban

Можете също да проверите дневниците в реално време:

# опашка -F /var/log/fail2ban.log

Изход на дневника:

2019-12-05 12: 13: 26,914 fail2ban.action [9750]: БЕЛЕЖКА [sshd] Възстановяване на бан 222.186.180.17 2019-12-05 12: 13: 26.930 fail2ban.action [9750]: БЕЛЕЖКА [sshd] Възстановяване на бан 222.186 .180.223 2019-12-05 12: 13: 26,944 fail2ban.action [9750]: ЗАБЕЛЕЖКА [sshd] Възстановяване на забрана 36.72.82.10 2019-12-05 12: 13: 26.958 fail2ban.action [9750]: ЗАБЕЛЕЖКА [sshd] Възстановяване Забрана 40.117.135.57 2019-12-05 12: 13: 26.973 fail2ban.action [9750]: БЕЛЕЖКА [sshd] Възстановяване на бан 45.55.155.224 2019-12-05 12: 13: 26,988 fail2ban.action [9750]: ЗАБЕЛЕЖКА [sshd ] Възстановяване на забрана 67.205.135.127 2019-12-05 12: 13: 27,003 fail2ban.action [9750]: ЗАБЕЛЕЖКА [sshd] Възстановяване на забрана 83.171.107.216 2019-12-05 12: 13: 43.362 fail2ban.filter [9750]: INFO [sshd] Намерено 183.87.134.98 - 2019-12-05 12:13:42 2019-12-05 12: 13: 45,571 fail2ban.filter [9750]: INFO [sshd] Намерено 183.87.134.98 - 2019-12-05 12 : 13: 45 2019-12-05 12: 15: 46,109 fail2ban.filter [9750]: INFO [sshd] Намерено 112.64.170.178 - 2019-12-05 12:15:45 2019-12-05 12: 17: 05,317 fail2ban.action [9750]: ЗАБЕЛЕЖКА [sshd] Unba n 222.186.175.216

Както виждате, fail2ban работи и периодично блокира или премахва блокиране за IP адреси.

За да проверите кои IP адреси са блокирани в iptables от fail2ban, направете:

# iptables -L

Както можете да видите, когато ssh е отворен навън, от време на време някой се опитва да вземе парола и да влезе. Ако проверите статистиката след известно време, можете да видите, че броят на блокираните IP адреси расте.

Осигуряване на Apache с Fail2Ban

Ако искате да персонализирате fail2ban за вашия apache (httpd), добавете следните настройки към jail.local:

# откриване на неуспешни опити за парола [apache] активиран = истински порт = http, https filter = apache-auth logpath = / var / log / httpd / error_log maxretry = 3 # блокира IP адреси, които директно имат достъп до скриптове с разширението php, asp, exe, pl, cgi, scgi [apache-noscript] активиран = истински порт = http, https filter = apache-noscript logpath = / var / log / httpd / error_log maxretry = 3 # откриване на опити за преливане на Apache [apache-overflows] enable = true port = http, https filter = apache-overflows logpath = / var / log / httpd / error_log maxretry = 2 # откриване на неуспешни опити за търсене в домашната директория на сървъра [apache-nohome] активиран = true port = http, https filter = apache -nohome logpath = / var / log / httpd / * error_log maxretry = 2

След като променим конфигурационния файл, рестартираме услугата и проверяваме състоянието:

[root @ server ~] # fail2ban-client status apache

Състояние на затвора: apache | - Filter | | - В момента не е успешно: 0 | | - Общо не е успешно: 0 | '- Списък с файлове: / var / log / httpd / error_log' - Действия | - В момента е забранен: 0 | - Общо забранено: 0 '- Забранен IP списък:

За теста инсталирах на сървъра Joomla, след което се опитах да отворя несъществуващ файл и fail2ban блокира ме:

[root @ server httpd] # fail2ban-client status apache-noscript

Състояние на затвора: apache-noscript | - Filter | | - В момента не е успешно: 1 | | - Общо не е успешно: 6 | '- Списък с файлове: / var / log / httpd / error_log' - Действия | - В момента забранени: 1 | - Общо забранени: 1 '- Забранен IP списък: *. *. *. *

Конфигуриране на пакети Fail2Ban и Nginx

Ако сте уеб сървър Nginx и сайтът има секции, изискващи разрешение, може да имате проблеми с опитите за изброяване на пароли. за fail2ban можем да определим да използваме файла Nginx-HTTP-auth.conf, По подразбиране той вече е описан в конфигурационния файл. /etc/fail2ban/jail.conf:

[root @ server ~] # cat /etc/fail2ban/jail.conf | grep nginx

[nginx-http-auth] logpath =% (nginx_error_log) s # За да използвате затвора 'nginx-limit-req', трябва да имате 'ngx_http_limit_req_module' # и да определите 'limit_req' и 'limit_req_zone', както е описано в nginx документация # http: / /nginx.org/en/docs/http/ngx_http_limit_req_module.html # или например вижте в „config / filter.d / nginx-limit-req.conf“ [nginx-limit-req] logpath =% (nginx_error_log) s [ nginx-botsearch] logpath =% (nginx_error_log) s logpath =% (nginx_access_log) s

Трябва ли да го включим в конфигурационния файл /etc/fail2ban/jail.local като добавите:

[nginx-http-auth] активиран = true

След всички настройки, не забравяйте да рестартирате услугата:

# systemctl рестартиране fail2ban

Осигуряване на MySQL с Fail2Ban

За да защитите MySQL, трябва да добавите отделен блок към конфигурационния файл jail.local:

[mysqld-auth] активиран = истински филтър = mysqld-auth порт = 3306 logpath = /var/log/mysql/error.log

Тази настройка ще ви предпази от намиране на парола за mysql потребителя (това е много честа сила).

Правила на Fail2Ban за Exim

За да конфигурирате защита за услугата Exim поща, направете следната конфигурация:

[exim] активиран = true filter = exim action = iptables-multiport [name = exim, port = "25,465,587"] logpath = / var / log / exim / mainlog

Така че можете да персонализирате fail2ban да работите с почти всички популярни услуги и вашият сървър ще стане възможно най-сигурен.

Fail2Ban IP списък, IP деблокиране

За да отключите IP, който е блокиран fail2ban, използвайте командата:

# fail2ban-client set SECTION изключване на IP - където SECTION е името на секцията в конфигурационния файл, според правилата на който вашият IP адрес е блокиран. Например:

# fail2ban-client set apache-noscript unbanip 185. *. *. *

Можете да добавите конкретни IP адреси към изключения от fail2ban (белият списък). За да направите това, в конфигурационния файл jail.conf въведете IP в реда:

ignoreip = 185. *. *. *

Като добавих моя IP адрес към изключенията, извърших няколко атаки като предишната и блокирането не се случи.

Както можете да видите, fai2ban е доста проста за настройка, но е доста ефективно средство за допълнителна защита на вашия сървър от натрапници. За Windows, за съжаление, не съм виждал безплатни програми с подобна функционалност (можете да опитате да блокирате IP адреси с помощта на PowerShell - вижте статията Защита на RDP от проверка с парола).