В этой статье мы вновь вернемся к теме безопасности сервера и расскажем, как, хотя бы частично, защитить свой хост с открытыми портами управления при помощи программы Fail2ban. Стоит заметить, что держать порты управления открытыми для Мира, без острой необходимости - это не очень хорошая идея.
Основное ее предназначение Fail2ban — защита хоста от несанкционированного доступа, что возможно благодаря тщательному отслеживанию сетевой активности на основных портах и чтению журналов записей (лог-файлов). Программа особенно эффективна против так называемых brute-force атак, поскольку она нейтрализует атакующего таким образом, что все пакеты, отправленные с устройства, IP-адрес которого по той или иной причине попал в черный список, отбрасываются. Блокировка настраивается путем внесения изменений в правила iptables.
Fail2ban для Proxmox
Защита веб-интерфейса с помощью fail2ban
apt-get install fail2ban
Создайте, если он не существует, файл jail.local (настройки в этом файле имеют приоритет над идентичными настройками jail.conf. Используйте jail.conf в качестве шаблона, копируя и активируя в jail.local то, что вас интересует. Обратите внимание, что jail.conf может быть перезаписан обновлениями пакета fail2ban, jail.local - нет!)
Добавьте в конец этого файла /etc/fail2ban/jail.local следующую строку:
[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
# 1 hour
bantime = 3600
Создайте файл /etc/fail2ban/filter.d/proxmox.conf:
[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =
Вы можете протестировать свою конфигурацию, пытаясь войти в систему с помощью графического интерфейса пользователя с неправильным паролем или неправильным пользователем, а затем ввести команду:
fail2ban-regex /var/log/daemon.log /etc/fail2ban/filter.d/proxmox.conf
У вас должно быть * как минимум * «Failregex: 1 total» вверху раздела «Результаты» (и «1 соответствует» внизу).
Для VPS с дебиан или убунту:
1. Для установки программы Fail2ban выполните следующие команды:
sudo apt-get update sudo apt-get install fail2ban
2. Для того, чтобы установленное программное обеспечение работало должным образом, вам необходимо внести поправки в конфигурационный файл. По умолчанию таковым является /etc/fail2ban/jail.conf.
Однако разработчики крайне не рекомендуют редактировать его напрямую, чтобы избежать осложнений при работе с сервером. Поэтому создайте локальную копию данного файла командой:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Далее вам нужно будет выполнять редактирование только /etc/fail2ban/jail.local. Он будет подключен системой автоматически и имеет высший приоритет при исполнении.
3. Откройте файл jail.local для редактирования одной из команд: Если вам удобнее работать с редактором nano:
sudo nano /etc/fail2ban/jail.local
Если для вас предпочтительнее редактор vi:
sudo vi /etc/fail2ban/jail.local
Обратите внимание на секцию [DEFAULT].
Она содержит в себе основные правила, заданные по умолчанию для Fail2ban.
ignoreip — значения этого параметра говорят о том, какие IP-адреса блокироваться не будут вовсе. Если вы хотите, чтобы Fail2ban игнорировал при проверке несколько IP-адресов, их необходимо указать в значении ignoreip через пробел.
bantime — данный параметр означает время в секундах, в течение которого подозрительный IP будет заблокирован. Изначально его значение составляет 10 минут.
findtime — определяет промежуток времени в секундах, в течение которого программой будет определяться наличие подозрительной активности.
maxretry — допустимое число неуспешных попыток получения доступа к серверу. При превышении указанного значения IP попадает в бан.
Ниже будут представлены другие секции, при помощи которых можно настроить защиту различных сервисов, установленных на ваш виртуальный сервер, например, ssh, ftp и прочих. Подробная процедура их настройки будет рассмотрена в конце данной статьи в разделе «Настройка Fail2ban».
4. После редактирования jail.local обязательно сделайте перезапуск Fail2ban командами
sudo service fail2ban restart tail /var/log/fail2ban.log
4. После правки конфигурационного файла выполните перезапуск Fail2ban командой
sudo service fail2ban restart
Настройка Fail2ban
Первым делом настройте защиту своего VPS по протоколу SSH при помощи программы Fail2ban. Для этого найдите в файле jail.local секцию [ssh].
Она должна быть активна по умолчанию. Тем не менее, на всякий случай, убедитесь, что в значении параметра enabled установлено true, а не false.
Укажите значения параметров, на основании которых Fail2ban должен выполнять отслеживание активности:
filter — фильтр, который будет использоваться. По умолчанию это /etc/fail2ban/filter.d/sshd.conf;
action — действия, которые будет выполнять Fail2ban при обнаружении атакующего IP-адреса, все правила реагирования на действия злоумышленника описаны в файле /etc/fail2ban/action.d. Соответственно, в качестве значения параметра action не может быть указана информация, которой нет в файле /etc/fail2ban/action.d;
logpath — полный путь к файлу, в который будет записываться информация о попытках получения доступа к VPS.
findtime — время в секундах, в течение которого наблюдается подозрительная активность;
maxretry — разрешенное количество повторных попыток подключения к серверу;
bantime — промежуток времени, в течение которого попавший в черный список IP будет оставаться заблокированным.
Стоит обратить внимание на тот факт, что вовсе необязательно прописывать значения вышеуказанных параметров в каждой секции. Если их не упоминать, в действие вступят настройки, указанные в главном разделе [DEFAULT]. Главное, чтобы для переменной enabled было указано значение true.
Защита протокола SSH
Рассмотрим применение параметров реагирования более детально. Пример конфигурации Fail2ban на порту SSH:
[ssh] enabled = true port = ssh filter = sshd action = iptables[name=sshd, port=ssh, protocol=tcp] sendmail-whois[name=ssh, dest=****@yandex.ru, sender=fail2ban@***.ru] logpath = /var/log/auth.log maxretry = 3 bantime = 600
Запись выше означает, что, если выполнено более 3 неудачных попыток подключения к VPS через основные порты SSH, то IP-адрес, с которого выполнялась авторизация, попадет в бан на 10 минут. Правило запрета будет добавлено в iptables. В то же время владелец сервера получит уведомление на e-mail, указанный в значении переменной dest, о том, что указанный IP был заблокирован за попытку получения несанкционированного доступа по протоколу SSH. Также в сообщении будет указана WHOIS информация о заблокированном IP. Пример такого уведомления от Fail2ban:
Hi, The IP 61.147.103.113 has just been banned by Fail2Ban after 3 attempts against SSH. Here are more information about 61.147.103.113: % [whois.apnic.net] % Whois data copyright terms http://www.apnic.net/db/dbcopyright.html % Information related to '61.147.0.0 - 61.147.255.255' inetnum: 61.147.0.0 - 61.147.255.255 netname: CHINANET-JS descr: CHINANET jiangsu province network descr: China Telecom descr: A12,Xin-Jie-Kou-Wai Street descr: Beijing 100088 country: CN admin-c: CH93-AP tech-c: CJ186-AP mnt-by: MAINT-CHINANET mnt-lower: MAINT-CHINANET-JS mnt-routes: maint-chinanet-js changed: hostmaster@ns.chinanet.cn.net 20020209 changed: hostmaster@ns.chinanet.cn.net 20030306 status: ALLOCATED non-PORTABLE source: APNIC role: CHINANET JIANGSU address: 260 Zhongyang Road,Nanjing 210037 country: CN phone: +86-25-86588231 phone: +86-25-86588745 fax-no: +86-25-86588104 e-mail: ip@jsinfo.net remarks: send anti-spam reports to spam@jsinfo.net remarks: send abuse reports to abuse@jsinfo.net remarks: times in GMT+8 admin-c: CH360-AP tech-c: CS306-AP tech-c: CN142-AP nic-hdl: CJ186-AP remarks: www.jsinfo.net notify: ip@jsinfo.net mnt-by: MAINT-CHINANET-JS changed: dns@jsinfo.net 20090831 changed: ip@jsinfo.net 20090831 changed: hm-changed@apnic.net 20090901 source: APNIC changed: hm-changed@apnic.net 20111114 person: Chinanet Hostmaster nic-hdl: CH93-AP e-mail: anti-spam@ns.chinanet.cn.net address: No.31 ,jingrong street,beijing address: 100032 phone: +86-10-58501724 fax-no: +86-10-58501724 country: CN changed: dingsy@cndata.com 20070416 changed: zhengzm@gsta.com 20140227 mnt-by: MAINT-CHINANET source: APNIC % Information related to '61.147.0.0/16AS23650' route: 61.147.0.0/16 descr: CHINANET jiangsu province network country: CN origin: AS23650 mnt-by: MAINT-CHINANET-JS changed: ip@jsinfo.net 20030414 source: APNIC % This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (UNDEFINED) Regards, Fail2Ban
В качестве значения переменной sender после fail2ban@ укажите домен либо хостнейм VPS.
Важно! Для того чтобы сообщение о блокировке злоумышленника отправлялось на ваш e-mail, необходимо наличие почтового сервера на VPS.
Дополнительно для защиты SSH активируйте следующую секцию:
[ssh-ddos] enabled = true port = ssh filter = sshd-ddos logpath = /var/log/auth.log maxretry = 2
Для хранения больших списков заблокированных IP-адресов можно использовать комбинацию Netfilter/Iptables и IPsets. Чтобы настроить работу Fai2ban таким образом, активируйте раздел [ssh-iptables-ipset4]:
[ssh-iptables-ipset4] enabled = true port = ssh filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/auth.log findtime = 300 maxretry = 3 bantime = 600
После правки конфигурационного файла сохраните внесенные изменения.
Запускаем Fail2ban командой:
service fail2ban start
Перезапуск Fail2ban выполняем командой:
service fail2ban restart
Выключаем Fail2ban командой:
service fail2ban stop