Как защитить SSH с помощью fail2ban на Debian 7

Published by Leave your thoughts

Вступление

Сервер или компьютер, подключенный к сети, всегда подвержен определенному риску, ведь каждая машина, имеющая выход в интернет (и VPS не исключение), является потенциальной мишенью для атаки.

Хорошо сконфигурированный фаервол способен предотвратить много видов незаконного доступа; и все же определенные сервисы, необходимые для доступа на сервер и управления ним, остаются открытыми. SSH чаще всего используется для входа в удаленную систему, потому он – один из наиболее часто атакуемых сервисов.

К счастью, инструмент под названием fail2ban способен сдерживать подобные атаки. Его можно сконфигурировать таким образом, что он будет позволять законный вход в систему с помощью SSH, но блокировать те IP-адреса, которые не прошли аутентификацию после определенного количества попыток.

В данном руководстве описывается установка и конфигурирование этого программного обеспечения на сервере Debian 7.

1. Установка fail2ban

Debian содержит fail2ban в своем репозитории по умолчанию. Программу можно установить с помощью следующего набора команд:

sudo apt-get update
sudo apt-get install fail2ban

Это действие устанавливает fail2ban, а также запускает сервис с настройками по умолчанию.

2. Конфигурирование fail2ban

Конфигурации fail2ban хранятся в каталоге /etc/fail2ban. Конфигурационный файл, определяющий правила блокировки по умолчанию, называется jail.conf.

Поскольку fail2ban обновляет конфигурационные файлы, когда появляется новая версия программы, редактировать конфигурационный файл по умолчанию не стоит.

Сначала нужно скопировать данный файл в новое местоположение и только потом редактировать его:

cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo nano jail.local

Теперь можно изменить любые настройки по умолчанию, которые не подходят данному серверу.

Настройки по умолчанию

Раздел, начинающийся со слова [DEFAULT], содержит настройки по умолчанию, которые позже можно заменить индивидуальными конфигурациями.

В целом, конфигурация по умолчанию достаточно сильна. Большинство заданных значений хорошо подобрано. Тем не менее, некоторые области лучше сконфигурировать индивидуально.

Блокировка по умолчанию

Изменив несколько параметров, можно сконфигурировать блокировку fail2ban. Ниже приведены самые важные параметры:

  • ignoreip: данный параметр содержит список IP-адресов, которые нужно исключить из правил fail2ban. На внесенные в данный список адреса ограничения не распространяются, потому их нужно выбирать с умом.
    — IP адреса и диапазоны разделяются пробелом;
    — Нужно внести свой домашний или рабочий IP адрес в данный список, чтобы  случайно не заблокировать себя на своем же сервере при неудачном входе.
    — Это выглядит примерно так: «ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS»
  • bantime: это параметр задает количество времени, на протяжении которого клиент, не прошедший аутентификацию, будет заблокирован. Время указывается в секундах. Значение по умолчанию – 10 минут.
  • maxretry: параметр, задающий максимальное количество попыток входа перед блокировкой.

Определение действий блокировки

Fail2ban может блокировать не прошедшего аутентификацию клиента несколькими способами. Необходимые действия задаются при помощи следующих параметров:

  • banaction: данная настройка указывает конфигурационный файл, который нужно использовать в случае блокировки. Значение данного параметра ссылается на файл в каталоге /etc/fail2ban/action.d, который будет обрабатывать сам процесс блокировки. Значение по умолчанию использует фаервол iptables, чтобы заблокировать не прошедший аутентификацию IP на всех портах. Данные правила будут рассмотрены позже.
  • action: данный параметр указывает действие, которое должно быть выполнено в случае превышения максимального количества попыток входа. Обычно он вызывает скрипт «banaction» (как указано выше), после чего присваивает соответствующее значение переменным и передает их в скрипт. Значение по умолчанию, «action_», вызывает скрипт и передает ему имя, порт, протокол и последовательность. Оно не передает адрес электронной почты или строки журнала регистрации, как это делают некоторые другие значения.

Настройка Email-оповещений

В разделе настроек по умолчанию можно сказать fail2ban отправлять электронное оповещение в случае применения блокировки.

Если на машине настроен почтовый сервер, fail2ban может отправлять извещения на внешний адрес. В противном случае, эти извещения можно получать на локальную учетную запись Unix.

Существует два соответствующих параметра:

  • destemail: данная опция указывает адрес электронной почты, на который в случае блокировки будет отправлено оповещение. Значение по умолчанию «root@localhost» доставит сообщение на учетную запись root данного компьютера. При наличии почтового сервера лучше изменить значение по умолчанию на внешний почтовый адрес.
  • mta: определяет почтовый агент, который будет использоваться для доставки извещения. Если  почтовый сервер настроен с sendmail, оставьте значение по умолчанию (sendmail). Если почтового сервера нет, но нужно получать извещения о блокировке на учетную запись пользователя, измените «sendmail» на «mail».

Чтобы настроить электронную почту, нужно отредактировать параметр «action», как уже было указано. Замените «action» значением «action_mw» или «action_mwl», чтобы получать информацию, переданную в скрипт «banning».

Извещения, отправленные на локальную почту, можно просмотреть, введя:

sudo nano /var/mail/mail

Настройка доступа

Ниже в файле можно найти раздел с таким названием:

[application_name]

Нужно уметь расшифровывать данные параметры.

Параметр «filter» указывает файл в каталоге /etc/fail2ban/filter.d. Это говорит fail2ban, как анализировать лог-файл программы для неудачных попыток аутентификации.

Переменная «logpath» содержит путь к лог-файлу сервисов, который fail2ban будет анализировать.

Здесь можно переопределить любой из других параметров по умолчанию. К примеру, опция по умолчанию «maxretry» для Debian отличается от этой опции для SSH .

3. Конфигурирование Iptables

Данное руководство не рассматривает конфигурации iptables подробно, но оно охватывает конфигурационный файл, определяющий поведение фаервола. Это поможет понять, как fail2ban выполняет блокировку.

Откройте файл, указанный в конфигурационном файле jail под параметром «banaction»:

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf

Здесь можно увидеть фактическое действие, выполняемое fail2ban при необходимости заблокировать IP. Для выполнения правил fail2ban использует программное обеспечение Iptables.

При запуске fail2ban вызывает данные строки:

actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN   # questionable usefulness
iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

Это разворачивает среду для передачи трафика через фильтр.

Программа Iptables управляет трафиком при помощи так называемых «цепочек». Каждая из таких цепочек применяет правила на весь входящий трафик, чтобы решить, разрешен он или нет.

Первая строка, «iptables -N fail2ban-<name>», создает новую цепочку по имени «fail2ban-», добавляя затем имя сервиса. Она будет содержать правила, блокирующие определенные IP-адреса.

Следующая строка, «iptables -A fail2ban-<name> -j RETURN», добавляет в только что созданную цепочку правило, которое говорит iptables вернуть управление цепи, которая вызвала эту цепочку.

Последняя строка, «iptables -I <chain> -p <protocol> -m multiport —dports <port> -j fail2ban-<name>», добавляет правило в строку INPUT (указана в файле jail.local), которая немедленно передает управление новой цепочке fail2ban.

Итак, в данный момент входящий трафик обрабатывается цепочкой INPUT. На этом этапе она обнаруживает правило, передающее управление цепочке fail2ban. Первое правило в этой цепочке передает управление обратно той цепи, которая ее вызвала, то есть – цепочке INPUT .

Как можно видеть, сейчас управление просто передается туда и обратно, и ничего больше не происходит. Тем не менее, это создает поток управления, который разместит дополнительные правила. При необходимости запретить IP-адрес нужно просто внести в цепочку fail2ban другое правило перед правилом, передающим управление обратно цепи INPUT .

Дополнительные действия для деактивации правил fail2ban при остановке сервиса можно увидеть здесь:

actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name>

Данное действие в основном только обращает все созданные правила.

При блокировке клиента применяется следующее правило:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

Это говорит iptables не принимать пакетов от этого IP-адреса, что также предотвращает любую попытку этого адреса пройти аутентификацию снова.

По истечении времени блокировки данное правило снимает её:

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

Чтобы просмотреть выполняющиеся правила и запрещенные на данный момент IP-адреса, введите:

sudo iptables -L

Все заблокированные клиенты (если таковые есть) будут выведены в конце файла.

4. Перезапуск fail2ban

После внесения любых изменений в конфигурационный файл нужно перезапустить fail2ban, чтобы изменения вступили в силу.

Для этого можно использовать команду:

sudo service fail2ban restart

Чтобы протестировать новые правила, можно создать копию сервера и нарочно допустить ошибку при входе в систему столько раз, сколько это нужно, чтобы запустить правила блокировки. После этого при попытке подключиться по SSH даже не будет выведен запрос пароля.

При просмотре правил iptable на сконфигурированном хосте можно увидеть новое правило:

sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Chain fail2ban-ssh (1 references)
target     prot opt source               destination
DROP       all  --  xxx-xxxxxxxx.dyn.xxxxxxxxx.net  anywhere
RETURN     all  --  anywhere             anywhere

Новое правило – предпоследнее в данном списке.

Итоги

Теперь у сервера появился дополнительный уровень безопасности, так как его сложнее взломать во время атаки методом подбора паролей. Это отличное начало, но все-таки лучше совсем отключить аутентификацию по паролю и входить в систему при помощи ключей.

Tags: , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>