Даволі даўно на розных сайтах і форумах артыкула і тэмы, у якіх гаварылася пра шматлікія брутфорсу-нападах на wordpress-сайты. Нядаўна давялося сутыкнуцца з гэтай заразай. :)
У дадзеным пасце хацелася б расказаць аб сваім вопыце барацьбы з падборам пароля на сайтах, якія працуюць на WordPress. Адразу адзначу, што ўсе мае сайты працуюць на nginx + php-fpm .
У якасці інструкцыі ў аснову была ўзятая адзін артыкул. Аднак, апісаны рэцэпт давялося крыху мадыфікаваць пад спецыфіку сваіх атакавалых. :)
Настройка
Перш за ўсё неабходна ўсталяваць fail2ban. Гэта не павінна выклікаць цяжкасцяў.
aptitude install fail2ban
Пасля чаго ў канец канфігурацыйнага файла /etc/fail2ban/jail.conf дадаем наступнае:
[Nginx-wp-auth] enabled = true filter = nginx-wp-auth action = iptables-multiport [name = wp-auth, port = "http, https"] logpath = /var/log/nginx/*.access.log maxretry = 3 bantime = 3600
У дадзеным выпадку action будзе блакаваць доступ для парушальнікаў толькі па ўказаных пратаколах і пазначаць іх як wp-auth. У logpath паказваем шлях да логам.
Будуць аналізавацца ўсе логі, тыпу example.com.access.log. Для логаваў сайтаў на вордпресс можна задаць асаблівыя імёны, напрыклад, wordpress-example.com.access.log, каб аналізаваліся толькі гэтыя лог-файлы.
Максімальную колькасць спробаў аўтарызацыі для аднаго АйПі - тры. Час блакавання - гадзіну. Абодва гэтыя параметру можна падбіраць ў індывідуальным парадку.
Наступным крокам будзе стварэнне фільтра.
touch /etc/fail2ban/filter.d/nginx-wp-auth.conf
Падчас гэтага дзеяння ў мяне паўсталі складанасці: прыклад з арыгінальнай артыкула не працаваў. І яго прыйшлося змяніць. :)
[Definition] failregex = <HOST>. * / wp-login.php HTTP / 1.1 "200 <HOST>. * / Wp-login.php / HTTP / 1.1 "302 <HOST>. * / Wp-login.php HTTP / 1.0 "200 ignoreregex =
У першым параметры запісаныя ўсе супадзення, якія варта шукаць у лог-файлах. Тут трэба прааналізаваць запыты атакавалых ў логах вашага сервера і дадаць усе падазроныя, звязаныя з wp-login.php.
Другі параметр прызначаны для выключэнняў з першага радка. Ён не спатрэбіцца і застаецца пустым.
тэставанне
Пасля стварэння фільтра праверце яго працу камандай:
fail2ban-regex / var / log / nginx / example.com .access.log /etc/fail2ban/filter.d/nginx-wp-auth.conf
Выяўленыя супадзення будуць адлюстраваныя ў выніках тэсту. Напрыклад, так:
Running tests ============= Use regex file: /etc/fail2ban/filter.d/nginx-wp-auth.conf Use log file: /var/log/nginx/***.ru.access.log Results ======= Failregex | - Regular expressions: | [1]. * / Wp-login.php HTTP / 1.1 "200 | [2]. * / Wp-login.php / HTTP / 1.1 "302 | [3]. * / Wp-login.php HTTP / 1.0 "200 | `- Number of matches: [1] 1 match (es) [2] 0 match (es) [3] 0 match (es) Ignoreregex | - Regular expressions: | `- Number of matches: Summary ======= Addresses found: [1] 192.99.186.30 (Fri Jul 04 07:29:20 2014) [2] [3] Date template hits: 0 hit (s): MONTH Day Hour: Minute: Second 0 hit (s): WEEKDAY MONTH Day Hour: Minute: Second Year 0 hit (s): WEEKDAY MONTH Day Hour: Minute: Second 0 hit (s): Year / Month / Day Hour: Minute: Second 0 hit (s): Day / Month / Year Hour: Minute: Second 0 hit (s): Day / Month / Year Hour: Minute: Second 58 hit (s): Day / MONTH / Year: Hour: Minute: Second 0 hit (s): Month / Day / Year: Hour: Minute: Second 0 hit (s): Year-Month-Day Hour: Minute: Second 0 hit (s): Year.Month.Day Hour: Minute: Second 0 hit (s): Day-MONTH-Year Hour: Minute: Second [.Millisecond] 0 hit (s): Day-Month-Year Hour: Minute: Second 0 hit (s): TAI64N 0 hit (s): Epoch 0 hit (s): ISO 8601 0 hit (s): Hour: Minute: Second 0 hit (s): <Month / Day / Year @ Hour: Minute: Second> Success, the total number of match is 1
Праверка часопіса блакаванняў
Fail2ban будзе запісваць ўсе вырабляныя блакавання. Пры неабходнасці можна правяраць лог-файл /var/log/fail2ban.log на іх наяўнасць.
grep WARNING /var/log/fail2ban.log