Защита SSH от перебора паролей

Защита SSH — противодействие брутфорсу

После того как я приобрел свой виртуальный сервер стали напрашиваться незваные гости, стало происходить много попыток перебрать пароли для доступа по SSH, в логах /var/log/secure было множество записей о подключениях, поэтому я решил прибегнуть к защите SSH от взлома в целом.

1
2
3
4
5
Apr 20 21:29:01 mail sshd[31941]: reprocess config line 54: Deprecated option RSAAuthentication
Apr 20 21:29:01 mail sshd[31941]: reprocess config line 67: Deprecated option RhostsRSAAuthentication
Apr 20 21:29:01 mail sshd[31941]: Invalid user er from 129.71.186.71 port 58054
Apr 20 21:29:01 mail sshd[31941]: input_userauth_request: invalid user er [preauth]
Apr 20 21:29:01 mail sshd[31941]: Connection closed by 129.71.186.71 port 58054 [preauth]

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

Защита SSH — Генерируем ключи

Для работы по ключам необходимо их создать, это делается с помощью команды ssh-keygen, она предложит выбрать размещение и имя ключа, в большинстве случаев оставим это по умолчанию, генерируем их на своем ПК, а затем передадим публичный ключ на севрер:

1
2
3
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Для передачи на сервер буду использовать:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub youruser@remote.server.host

Если пути использовали по умолчанию, то при подключении ssh сам их подхватит.
Также можно создать файл с настройками для подключений, для удобства входа, в каталоге ~/.ssh/ создаем файл config с таким содержимым:

1
2
3
4
5
6
### Hosting
host hosting
    hostname krasnodar-it-service.ru
    port 22
    user root
    IdentityFile ~/.ssh/id_rsa

Теперь для подключения достаточно ввести:

1
ssh hosting

Защита SSH — Запрещаем вход по паролям

Запрешение входа по паролю

Для более полной защиты от брутфорса я вообще отключил вход по паролям, настраивается это в /etc/ssh/sshd_config, добавил опцию

1
PasswordAuthentication no

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

1
rooer@krasnodar-it-service.ru: Permission denied (publickey).

И в логах соответствующая запись:

1
Apr 21 11:42:37 mail sshd[1807]: Invalid user rooer from 129.71.186.71 port 55578

Защита SSH — Разрешить вход по паролю из локальной сети

Для выборочного входа по паролю можно указать список сетей из которых будет возможен такая авторизация, добавляем в конец конфигурационного файла /etc/ssh/sshd_config:

1
2
Match address <em>192.168.1.0</em>/24
 PasswordAuthentication yes

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

Настраиваем fail2ban

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

1
2
3
4
5
6
# "bantime" is the number of seconds that a host is banned.
bantime  = 240h

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 60m

Установка нестандартного порта

И завершающим шагом была смена порта:

1
Port 2222

В логах пропали записи о неудачных подключениях.

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.