Самый надёжный способ защиты от взлома SSH - это ограничение доступа к 22 порту сервера по ip адресу. Но для этого у вас должен быть статичный внешний (белый) ip адрес. Подобную блокировку можно сделать с помощью iptables.
Но если нужно обезопасить сервер, к которому подключается большое количество пользователей, то выдача разрешений на доступ по ip будет довольно трудоёмким занятием. В таком случае и нужен Fail2Ban.
Но если нужно обезопасить сервер, к которому подключается большое количество пользователей, то выдача разрешений на доступ по ip будет довольно трудоёмким занятием. В таком случае и нужен Fail2Ban.
Установка Fail2Ban
Для её установки Fail2Ban на CentOS (7-ой версии) необходимо выполнить команду:yum install fail2ban
На Ubuntu:
apt install fail2ban
После установки стоит поставить опцию автоматического включения при старте системы. В CentOS:
chkconfig fail2ban on
На Ubuntu:
systemctl enable fail2ban
Настройка Fail2Ban
По умолчанию после установки Fail2Ban находится буквально в нерабочем состоянии. Включается он через файл конфигурации. А точнее через его копию, которую надо предварительно создать. Для этого выполните команду:cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
После чего в файле jail.local
необходимо будет изменить настройки. Через него можно включить защиту от подбора пароля на разные программы: от ssh до exim.
Fail2Ban работает через файлы логов. То есть он непрерывно отслеживает факты неудачных попыток входа через лог файлы программ. И делает выставляет блокировку на ip адреса злоумышленников через iptables.
После установки пакета необходимо перейти в файл конфигурации /etc/fail2ban/jail.local
(его мы создали ранее копированием). Через него происходит всё управление условиями блокировок. В начале файла перечислены общие директивы, которые могут быть переопределены в блоках отдельных программ ниже.В файле конфигурации одной из первых записана директива "bantime". Она определяет период времени, на который блокируется ip адрес, с которого совершались попытки неудачного входа:
# "bantime" is the number of seconds that a host is banned.
bantime = 3600
По умолчанию это один час (значение указывается в секундах - 3600). Если вы точно знаете, что никогда не будете ошибаться, то стоит поставить это значение на большее. К примеру, увеличить до 10 часов.Следующие значимые параметры - это период фиксации "findtime" и количество неудачных попыток "maxretry". По умолчанию эти директивы имеют такие значения:
# A host is banned if it has generated "maxretry" during the last "findtime" seconds.
findtime = 3600
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
- эти настройки означают, что будут заблокированы все, кто ввёл неверный пароль три раза (и более) в течение одного часа (3600 секунд). Если вы не ошибаетесь при вводе пароля, то стоит поднять значение findtime на порядок (до 10 часов) и уменьшить maxretry до 2, чтобы максимально замедлить процесс подбора пароля.После перечисления общих настроек в файле конфигурации
/etc/fail2ban/jail.local
идут блоки для отдельных программ. Директивы в них могут перезаписывать общие. Попробуем активировать и настроить защиту для SSH.
Защита SSH
Для активации защиты SSH необходимо поставить директивуenabled = true
в блок [sshd], чтобы получилось так:
[sshd]
enabled=true
И перезапустить сервис (либо запустить start, если он ещё не работал):
systemctl restart fail2ban
Скорость запуска зависит от размера файла логов, которые программа читает при каждой загрузке. Обратите внимание, что если ранее вы допускали ошибки при входе на сервер через SSH и это осталось в логах, то во время перезагрузки Fail2Ban вы будете заблокированы по ip.Чтобы показать какие именно "ловушки" активированы, необходимо воспользоваться командой "fail2ban-client status":
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Если нужно посмотреть состояние определённой ловушки, к примеру для sshd, то её надо указать после этой команды:
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| `- Total failed: 3648
`- Actions
|- Currently banned: 14
|- Total banned: 346
`- Banned IP list: список_заблокированных_ip_адресов
Чтобы разблокировать ip адрес, необходимо выполнить команду:
fail2ban-client set sshd unbanip ip_адрес
- где вместо "ip_адрес" в конце укажите ip, который нужно разблокировать.