Установка и настрйка Fail2ban — автоматической защиты сервера от попыток взлома
Продолжаем нашу нелёгкую, но пока неопасную борьбу с хакерами (Часть 1, Часть 2)
Постоянно следить живому человеку за роботами — дело утомительное и глупое: роботы не хотят ни есть ни спать. Поэтому нужно отправить робота на борьбу с роботами. В нашем случае это будет утилита Fail2ban
Для начала установим ее:
sudo apt-get install fail2ban
Далее идём в конфиг:
vi /etc/fail2ban/jail.conf
Прежде всего, если вы подключаетесь к серверу с другой машины, настройте whitelist — те адреса, которые fail2ban не заблокирует никогда.
Находим в разделе [DEFAULT] параметр ignoreip и добавляем туда свои адреса с маской.
Теперь нас интересуют следующие параметры (можно регулировать исходя из активности взломщиков):
maxretry — максимальное число неудачных попыток
findtime — время, в течение которого может быть произведено число попыток не более указанного. иначе —
bantime — время, на которое банится хост. По умолчанию — 600 секунд.
Таким образом, можно задать малое число maxretry (например 3 — стандартное число попыток залогиниться по ssh, по умолчанию в конфиге fail2ban — 5), но достаточно короткое findtime. Это позволит утилите быстрее реагировать на попытки взлома. Однако, в таком случае злоумышленник может делать множество попыток подбора пароля, если увеличит интервалы между ними, не опасаясь попасть в бан.
С другой стороны, можно задать большое число maxtry и при этом увеличить длительность findtime — это даст нам возможность более уверенно утверждать, что хост предпринимает злонамеренную активность в отношении нашего сервера. Такой хост, очевидно, подлежит и более длительному бану.
Так же эти глобальные параметры могут быть настроены для каждой из нижеследующих секций конфига.
В рамках данной статьи мы рассмотрим одну секцию:
[ssh-tcpwrapper] — именно она отвечает за мониторинг интересующей нас активности
enabled = false — ставим true
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=you@example.com] — если хотим чтобы уведомления падали на почту нужно её тут указать
ignoreregex = for myuser from
logpath = /var/log/sshd.log — меняем на наш лог /var/log/secure
После чего перезапускаем службу
sudo service fail2ban restart
и наслаждаемся не только автоматическим добавлением нежелательных хостов в бан, но и информированием об этом на электронную почту с автоматическим отсыланием вам (помните в настройках: sendmail-whois) whois информации о нежелательном хосте. То самое, что мы руками делали в первой части
Всё происходящее можно наблюдать в логах:
cat /var/log/fail2ban.log 2016-10-03 17:25:00,858 fail2ban.actions: WARNING [ssh-tcpwrapper] Ban 221.229.172.7 2016-10-03 17:25:00,991 fail2ban.actions: WARNING [ssh-tcpwrapper] Ban 220.169.242.158 2016-10-03 17:25:01,140 fail2ban.actions: WARNING [ssh-tcpwrapper] Ban 121.18.238.98
Чтобы убедиться что это не обман, заглянем в уже известный нам файл /etc/hosts.deny
ALL: 221.229.172.7
ALL: 220.169.242.158
ALL: 121.18.238.98
Эти три строчки были автоматически добавлены утилитой Fail2ban
В конце нужно упомянуть такую важную вещь как установка fail2ban в автозапуск после перезагрузки.
Для этого зайдите в файл
/etc/rc.local и впишите там в любое место (я вписал в конец) строку /etc/init.d/fail2ban start
Теперь, если это не критично, можно ребутнуть сервер и командой
service fail2ban status
убедиться что утилита сама запустилась сразу после перезагрузки.
Всем хорошего дня!