Как установить и настроить Fail2Ban для защиты Linux-сервера
Это подробное руководство расскажет вам, что такое Fail2Ban, как его настроить и как использовать для обеспечения дополнительного уровня безопасности в вашей системе Linux.
Что такое Fail2Ban?
Если вы включили SSH, проверьте историю входов на ваш сервер Linux. Вы будете удивлены, увидев огромное количество IP-адресов, которые пытаются войти на ваш сервер через SSH.
Если у вас нет механизма для предотвращения таких попыток входа в систему, ваша система подвержена атаке методом перебора. По сути, скрипт/бот будет продолжать попытки подключения SSH к вашей системе, пробуя различные комбинации имени пользователя и паролей.
Именно здесь на сцену выходит такой инструмент, как Fail2Ban. Fail2Ban — это бесплатное программное обеспечение с открытым исходным кодом, которое помогает защитить ваш Linux-сервер от злонамеренного входа в систему. Fail2Ban заблокирует IP-адрес (на определенное время), если произойдет определенное количество неудачных попыток входа в систему.
Fail2Ban работает «из коробки» с базовыми настройками, но его также очень легко настроить. Вы можете настроить его по своему вкусу и создать фильтры и правила в соответствии с вашими потребностями.
Звучит интересно? Почему бы не протестировать Fail2Ban? Прочтите и следуйте остальной части статьи и попробуйте Fail2Ban самостоятельно.
Установка Fail2Ban в Linux
О популярности Fail2Ban можно судить по тому факту, что он доступен в официальных репозиториях всех основных дистрибутивов Linux. Это делает установку Fail2Ban простой задачей.
Установите Fail2Ban на CentOS и Red Hat
Вам необходимо быть пользователем root или sudo, чтобы установить новое программное обеспечение в вашей системе.
Вам необходимо убедиться, что ваша система обновлена и у вас установлен репозиторий EPEL.
sudo yum update && sudo yum install epel-release
Теперь вы можете установить Fail2Ban с помощью следующей команды:
sudo yum install fail2ban
Установите Fail2Ban в Ubuntu и Debian
Сначала убедитесь, что ваша система обновлена:
sudo apt update && sudo apt upgrade -y
Теперь установите Fail2Ban с помощью этой команды:
sudo apt install fail2ban
Понимание файла конфигурации Fail2Ban
В Fail2Ban есть два основных файла конфигурации: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Позвольте мне объяснить, что они делают.
/etc/fail2ban/fail2ban.conf: это файл конфигурации рабочих настроек демона Fail2Ban. Здесь определяются такие настройки, как уровень журнала, файл журнала, сокет и файл pid.
/etc/fail2ban/jail.conf: именно здесь происходит вся магия. Это файл, в котором вы можете настроить такие параметры, как время бана по умолчанию, количество попыток перед блокировкой IP-адреса, внесение IP-адресов в белый список, информацию об отправке почты и т. д. По сути, вы управляете поведением Fail2Ban из этого файла.
Теперь, прежде чем вы пойдете и измените эти файлы, Fail2Ban советует сделать копию с файлом .local для этих файлов conf. Это потому, что файлы конфигурации по умолчанию могут быть перезаписаны в обновлениях, и вы потеряете все свои настройки.
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь давайте разберемся с файлом Jail.conf. Если вы используете команду less для чтения этого большого файла, это может показаться довольно запутанным. Файл conf пытается все объяснить, используя слишком много комментариев. Итак, позвольте мне упростить это для вас.
Файл Jail.conf разделен на службы. Раздел [По умолчанию] есть и он относится ко всем сервисам. И тогда вы сможете увидеть различные сервисы с соответствующими настройками (если таковые имеются). Все эти услуги указаны в скобках. Вы увидите такие разделы, как [sshd], [apache-auth], [squid] и т. д.
Если я удалю комментарии, раздел по умолчанию будет выглядеть так:
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s
Позвольте мне рассказать вам значение некоторых из этих параметров.
Bantime: установите продолжительность бана. По умолчанию — 10 минут.
findtime: окно, в котором будет выполнено действие с IP-адресом. По умолчанию — 10 минут. Предположим, в 10:30 с определенного IP была предпринята неверная попытка входа в систему. Если тот же IP достигнет максимального количества повторов до 10:40, он будет забанен. В противном случае следующая неудачная попытка после 10:40 будет засчитана как первая неудачная попытка.
maxretry: количество неудачных попыток до того, как действие будет предпринято.
Usedns: настройка «предупреждение» пытается использовать обратный DNS для поиска имени хоста и запрета его использования с использованием имени хоста. Установка значения no приведет к блокировке IP-адресов, а не имени хоста.
destemail: адрес электронной почты, на который будут отправляться оповещения (необходимо настроить).
-
отправитель: имя отправителя в электронном письме с уведомлением.
mta: агент передачи почты, используемый для уведомлений по электронной почте.
Banaction: этот параметр использует файл /etc/fail2ban/action.d/iptables-multiport.conf для установки действия после максимального количества неудачных попыток.
протокол: тип трафика, который будет отброшен после запрета.
Если вы хотите внести какие-либо изменения для какой-либо тюрьмы (или для всей тюрьмы), например, максимальное количество повторных попыток, время бана, время поиска и т. д., вам следует отредактировать файл Jail.local.
Как использовать Fail2Ban для защиты сервера Linux
Позвольте мне показать вам некоторые способы использования Fail2Ban для повышения безопасности Linux.
Обратите внимание, что для запуска команд Fail2ban вам необходимо быть пользователем root или иметь доступ к sudo.
Включите Fail2Ban на своем сервере и проверьте все работающие джейлы.
Вы можете использовать команды systemd для запуска и включения Fail2Ban на вашем сервере Linux:
systemctl start fail2ban
systemctl enable fail2ban
Как только Fail2Ban включен, вы можете увидеть статус и активные клетки с помощью команды fail2ban-client:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Если вам интересно, sshd Jail включен по умолчанию.
См. журнал Fail2Ban.
Журнал Fail2Ban находится по адресу /var/log/fail2ban.log. Файлы журналов имеют следующий формат:
2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90
Вы можете видеть, что он идентифицирует IP-адреса и блокирует их, когда они пересекают порог максимального количества повторных попыток.
Посмотреть запрещенные IP-адреса Fail2Ban
Один из способов — проверить статус определенной тюрьмы. Для этой цели вы можете использовать клиент Fail2Ban.
fail2ban-client status <jail_name>
Например, если вам нужно просмотреть все неверные входы по ssh, запрещенные Fail2Ban, вы можете использовать это следующим образом. В выводе будет показано общее количество неудачных попыток и общее количество заблокированных IP-адресов.
root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150
Система, которая пытается войти через SSH после неудачного входа, должна получить подобную ошибку.
ssh: connect to host 93.233.73.133 port 22: Connection refused
Как навсегда забанить IP с помощью Fail2Ban
Теперь вы знаете, что бан IP, наложенный Fail2Ban, носит временный характер. По умолчанию это время составляет 10 минут, и злоумышленник может попытаться войти снова через 10 минут.
Это представляет угрозу безопасности, поскольку злоумышленники могут использовать сценарий, который пытается войти в систему через 10 минут.
Итак, как поставить постоянный бан с помощью Fail2Ban? На этот вопрос нет однозначного ответа.
Начиная с версии Fail2Ban 0.11, время блокировки будет рассчитываться автоматически, а время блокировки постоянных IP-адресов будет увеличиваться в геометрической прогрессии.
Но если вы проверите свою версию Fail2Ban, вы, вероятно, используете версию 0.10.
fail2ban-server --version
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).
В более ранних версиях вы могли использовать отрицательное время бана (bantime=-1), и это было бы эквивалентно перманентному бану, но если вы попробуете этот метод, вы, вероятно, увидите ошибку типа «Запуск error2ban: ERROR NOK: (' Образ диска базы данных искажен',)'.
Одним из не очень простых обходных путей было бы увеличить время бана примерно до 1 дня, 1 недели, 1 месяца или 1 года. Это может обойти проблему до тех пор, пока новая версия не станет доступна в вашей системе.
Как разбанить IP, заблокированный Fail2Ban
Сначала проверьте, блокируется ли IP или нет. Поскольку Fail2Ban работает с iptables, вы можете просмотреть iptables, чтобы просмотреть IP-адреса, запрещенные вашим сервером:
iptables -n -L
Возможно, вам придется использовать команду grep, если заблокировано слишком много IP-адресов.
Если вы обнаружите в выводе указанный IP-адрес, он забанен:
Итак, следующий шаг — выяснить, какая «тюрьма» запрещает указанный IP. Здесь вам придется использовать команду Grep с журналами Fail2ban.
Как вы можете видеть в выводе ниже, IP-адрес заблокирован sshd-тюрьмой.
root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
Теперь, когда вы знаете имя тюрьмы, блокирующей IP, вы можете разбанить IP с помощью клиентаfail2ban:
fail2ban-client set <jail_name> unbanip <ip_address>
Как внести IP в белый список в Fail2Ban
Будет нехорошо, если вы забаните себя, верно? Чтобы игнорировать блокировку IP-адреса в текущем сеансе Fail2Ban, вы можете внести IP-адрес в белый список с помощью такой команды:
fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>
Вы можете легко найти свой IP-адрес в Linux. В моем случае это было
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113
Если вы хотите навсегда внести IP-адрес в белый список, вам следует отредактировать файл конфигурации тюрьмы. Перейдите в указанный раздел тюрьмы и добавьте строку ignoreip следующим образом:
ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>
Если вы хотите внести в белый список IP-адреса всех тюрем в вашей системе, было бы лучше отредактировать файл /etc/fail2ban/jail.local и добавить строку в раздел DEFAULT, как мы видели выше.
Вам придется перезапустить Fail2Ban, чтобы изменения вступили в силу.
Как посмотреть белый список IP по джейлу
Вы можете увидеть все IP-адреса, внесенные в белый список тюрьмы, с помощью этой команды:
fail2ban-client get <JAIL_NAME> ignoreip
Он должен показать все IP-адреса, которые Fail2Ban игнорирует для этой тюрьмы:
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113
Как удалить IP из белого списка Fail2Ban
Если вы удаляете IP-адрес из белого списка определенной тюрьмы, вы можете использовать эту команду:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
Если вы хотите навсегда удалить IP-адрес, вам следует отредактировать файл /etc/fail2ban/jail.local.
Что еще?
С Fail2Ban вы можете сделать гораздо больше. Это руководство дает вам основы для начала работы с Fail2Ban. Я не затронул такие темы, как действия, почтовые уведомления, фильтры и т. д.
Как только вы ознакомитесь с основами Fail2Ban, вы сможете начать изучать его подробнее. А пока просто поиграйте с этим и добавьте дополнительный уровень безопасности к SSH на вашем Linux-сервере.