Недавно я проверял журналы доступа с некоторых серверов Linux, которые я поддерживаю, и я был очень удивлен попытками входа в систему SSH, с которыми сталкиваются эти серверы. Мои серверы имеют доступ к паролем отключены по умолчанию, поэтому только ранее зарегистрированные ключи SSH разрешены в систему. Но даже тогда количество попыток входа в систему было тревожным. Около 500 попыток в день. Я должен был что -то с этим сделать.
Говоря об этом с моими коллегами, один из них предложил инструмент под названием FAIL2BAN Анкет Он запускает фоновую службу, которая контролирует файлы журнала на вашем сервере и на основе подозрительных действий, таких как неудачные попытки входа в систему, он блокирует доступ от этих плохих участников, обновляя правила брандмауэра, чтобы отклонить любое соединение для своих IP -адресов.
Моя первая мысль была «Я должен быть осторожным, потому что я мог бы запретить себя и навсегда потерять доступ к своему серверу» Анкет Поэтому я очень внимательно начал процесс установки. К счастью, конфигурация по умолчанию блокирует доступ к IP -адресу в течение 10 минут, поэтому в худшем случае у меня было бы несколько минут, чтобы выпить кофе. Я также начал процесс на «мусорном» сервере, поэтому, если что -то пойдет не так, я мог бы просто выбросить его и начать заново.
Мы будем настраивать эти настройки для более надежной стратегии позже здесь, в этом посте.
Установка Fail2ban
Давайте начнем. Первый шаг — установить Fail2ban на вашем сервере (Ubuntu):
# Update dependencies apt update && apt upgrade -y # install fail2ban apt install fail2ban
Fail2ban поставляется с довольно прочной конфигурацией по умолчанию, но, поскольку наша цель — настроить ее на наши потребности, они рекомендуют нам скопировать файл конфигурации по умолчанию с помощью .local
расширение. Причина этого заключается в том, что если мы обновим Fail2ban, исходный файл конфигурации будет изменен, и мы потеряем нашу пользовательскую конфигурацию.
Поместите этих плохих парней в тюрьму
Файлы конфигурации расположены по адресу /и т. Д./Файт2бан
, Итак, давайте продолжим и создадим локальную копию этих файлов:
# Copy fail2ban default configuration cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local # Copy fail2ban jail configuration cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Fail2ban использует концепцию Тюрьмы
Для мониторинга конкретных услуг, таких как Nginx, SSH, Apache и т. Д. Каждая тюрьма указывает конфигурацию для конкретного приложения или службы, работающего на вашем сервере. По умолчанию sshd
Тюрьма активна.
Активация Fail2ban
Теперь, когда у нас есть Fail2ban, установлен и предварительно настроен по умолчанию, давайте начнем службу:
systemctl start fail2ban
Как только вы начнете Fail2ban, вы, возможно, уже увидите, как некоторые плохие парни заблокированы. Сначала давайте проверим, какие тюрьмы активны со следующей командой:
fail2ban-client status # You should see something like this as output: Status |- Number of jail: 2 `- Jail list: sshd
Итак, у нас есть Fail2ban, давайте проверим SSHD
Тюрьма со следующей командой:
fail2ban-client status sshd # You should see something like this as output Status for the jail: sshd |- Filter | |- Currently failed: 10 | |- Total failed: 511 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 9 |- Total banned: 77 `- Banned IP list: 218.255.86.106 222.186.31.83 85.209.48.228 180.166.184.66 218.92.0.220 109.255.185.65 150.158.178.137 111.231.132.94 66.70.130.149
В моем случае я мог сразу увидеть выгоду от Fail2ban. Через несколько минут у меня уже было запрещено несколько IP -адресов.
Давайте рассмотрим нашу IP -таблицу, чтобы увидеть, совпадают ли эти IP -адреса со следующей командой:
iptables -n -L # You should see something like this as output Chain f2b-sshd (1 references) target prot opt source destination REJECT all -- 103.100.211.72 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 66.70.130.149 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 111.231.132.94 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 150.158.178.137 0.0.0.0/0 reject-with icmp-port-unreachable REJECT all -- 109.255.185.65 0.0.0.0/0 reject-with icmp-port-unreachable
Это великолепно. Fail2ban обновляет наши правила IP -фильтра, которые предотвратят соединения от этих плохих актеров.
Изменение значения по умолчанию
Конфигурация по умолчанию блокирует эти IP -адреса в течение 600 секунд (10 минут). Это довольно хорошее начало, но мы можем добиться большего. В идеале, если некоторые из этих IP -адресов пытаются подключаться каждые 10 минут, мы могли бы заблокировать их для большего сплана или даже навсегда.
Следует учитывать, что если мы постоянно блокируем IPS, мы можем потенциально увеличить время поиска IP -таблицы, что означает, что подключение к нашему серверу может стать очень медленным, поскольку этот список заблокированных IPS может расти на неопределенный срок.
Чтобы помочь нам в этом, Fail2ban приходит с Recidive
которая является тюрьмой за свои журналы. Это работает так:
- Он изучает собственные журналы Fail2ban для запрещенных IP -адресов из других тюрьмов.
- Если эти IP -адреса встречаются в журналах более 5 раз в текущий день, он блокирует их в течение 1 недели.
Это звучит как хорошая стратегия. Наша IP -таблица не будет расти очень большой (в теории), потому что через 1 неделю она откажется и позволит этим IP -адресам снова подключаться. Если они снова действуют недобросовестно, они будут заблокированы, а цикл повторяется.
Итак, давайте активируем рецидивирующий
. Изменить файл /etc/fail2ban/jail.local
(Я использую Nano, но не стесняйтесь использовать другой текстовый редактор). Ищите следующий код:
# Jail for more extended banning of persistent abusers # !!! WARNINGS !!! # 1. Make sure that your loglevel specified in fail2ban.conf/.local # is not at DEBUG level -- which might then cause fail2ban to fall into # an infinite loop constantly feeding itself with non-informative lines # 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days) # to maintain entries for failed logins for sufficient amount of time [recidive] logpath = /var/log/fail2ban.log banaction = %(banaction_allports)s bantime = 1w findtime = 1d
Обратите внимание, что конфигурация уже на месте. Нам нужно только активировать:
# ... comments [recidive] # Include the next line to enable recidive enabled = true logpath = /var/log/fail2ban.log banaction = %(banaction_allports)s bantime = 1w findtime = 1d
Теперь нам нужно только перезагрузить обслуживание Fail2ban с:
systemctl restart fail2ban
Давайте проверем наш FAIL2BAN Статус, чтобы увидеть, какие тюрьмы запускаются после нашего обновления:
fail2ban-client status # You should see something like this as output Status |- Number of jail: 2 `- Jail list: recidive, sshd
Теперь это рецидивирующий
активен, вы можете проверить, были ли запрещены некоторые IP -адреса на всю неделю:
fail2ban-client status recidive # You should see something like this as output Status for the jail: recidive |- Filter | |- Currently failed: 25 | |- Total failed: 90 | `- File list: /var/log/fail2ban.log `- Actions |- Currently banned: 10 |- Total banned: 10 `- Banned IP list: 129.226.114.97 103.246.240.26 142.93.60.53 167.172.163.162 109.255.185.65 150.158.178.137 66.70.130.149 180.166.184.66 64.225.35.135 218.255.86.106
Теперь у нас есть Fail2ban Monitoring нашего SSH Access и полностью настроен.
Что делать, если я заблокирую себя
Вы должны быть очень осторожны с доступом вашего сервера с этого момента. Убедитесь, что у вас есть доступ с вашего компьютера, и я очень рекомендую Отключение доступа к паролю Анкет
Вы можете подождать по умолчанию 10 минут, или вы можете получить доступ с другого IP -адреса (например, маршрутизацию мобильного телефона) и удалить свой IP -адрес из BlockList со следующей командой:
fail2ban-client set jailname unbanip [IP_ADDRESS_HERE] # Here is how it could look like for you: fail2ban-client set sshd unbanip 103.1.1.103
Куда пойти отсюда
Fail2ban довольно обширный и поддерживает множество различных видов расширений, таких как ваши собственные тюрьмы. Хорошо, что удивительные люди во всем мире также любят делиться своим опытом, поэтому, если вы хотите настроить Fail2ban для другой сервисы, такой как Nginx, Digital Ocean имеет отличное руководство по этому поводу с пошаговым руководством.
Вы также можете прочитать больше об этом на FAIL2 Официальная страница
Оригинал: «https://dev.to/bpaulino0/hardening-your-server-security-with-fail2ban-3o1m»