Тариф успешно добавлен в корзину
В корзину
url image

Повышение безопасности ssh

С чего начинается сервер? 
Со входа по SSH

 

Secure shell — основной инструмент для управления сервером. То, с чего начинается работа системного администратора.

По умолчанию служба работает на 22 порту и подвержена множеству опасностей: брутфорс паролей ботнетом, целенаправленному подбору хакерами и даже DDoS. А утечка паролей и потеря доступа к серверу может привести к катастрофическим последствиям для бизнеса и психики.

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

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

Конфиг SSH

Первым делом правим в конфиге демона SSH:

 /etc/ssh/sshd_config

И меняем дефолтные параметры:

Port 1480

Порт, на котором будет располагаться служба. Рекомендуется ставить значение выше 1024 — так как значения ниже зарезервированы определенными службами и чаще «пробиваются» сканерами портов. Максимальное возможное значение — 65535.
В этом случае при коннекте необходимо добавлять ключ -p, пример ssh -p 4596 sanya@188.120.242.222

PubkeyAuthentication yes

Разрешаем аутентификацию по ключам SSH. Рекомендуется использовать алгоритм Ed25519. В этом случае закрытый ключ хранится на вашем ПК, а открытый добавляется на сервер в файл .ssh/authorized_keys в директории нужного юзера.

PermitEmptyPasswords no
PasswordAuthentication no

Отключение авторизации по паролю — каким бы он не был надежным, всегда есть вероятность его подбора. Важно убедиться, что подключение по SSH-ключам работает, иначе подключиться к серверу без VNC или rescue вы не сможете.

ListenAddress 188.120.242.222

Если на сервере несколько IP-адресов, то этим параметром мы указываем, какой именно IP на сервере должна слушать служба.

LoginGraceTime 1m

По умолчанию при подключении по SSH у вас есть две минуты, чтобы ввести пароль. Если не успеете, то соединение будет прервано. Ставим минуту или даже тридцать секунд.

опционально:

PermitRootLogin no

Отключаем авторизацию суперпользователя root. Он имеет неограниченную власть над системой и именно к нему чаще всего пытаются подобрать пароль. Важно, чтобы в системе уже были созданы другие пользователи с sudo-правами, под которыми в дальнейшем будет осуществляться подключение по SSH.

AllowUsers Darya Tolik

Разрешаем доступ по SSH только определенным юзерам. Чтобы они имели возможность получить доступ к привилегиям суперпользователя, необходимо внести их в файл /etc/sudoers или добавить юзера в группу sudo. Например usermod -aG sudo Tolik.

ClientAliveInterval 600

Задается время (в секундах) бездействия сессии, после чего она будет прервана. Важно не ставить низкие значения, иначе кроме неудобств при работе вам это ничего не принесёт.

ClientAliveCountMax 0

Количество проверок активности сессии, тесно связанный с предыдущим параметром. Если в течение заданного количества попыток (по умолчанию три) сервер не получит ответа, то соединение завершится. Так как мы выставили значение ClientAliveInterval равное десяти минутам, то этот параметр можно выключить, задав ноль.

 

После всех настроек перезапускаем SSH ( текущая сессия при этом не обрывается):

service sshd restart

На выходе мы получаем нестандартный порт, который слушает определенный диапазон IP-адресов и доступ возможен только по ключу SSH или сверхнадежному паролю и не юзеру root. Как его сгенерировать и где хранить, можно прочитать в другой нашей статье

Фаервол

Помимо изменения настроек самой службы, следует также разрешить подключение только с определенных IP-адресов с помощью Iptables и блокировать слишком частые попытки авторизоваться с неправильным паролем используя Fail2ban.

Iptables

Утилита для управления брандмауэром netfiler. Установлена по умолчанию. Пример команды:

iptables -A INPUT -s  93.94.176.0/21 -p tcp --dport 22 -j ACCEPT

Которая разрешает подключение по 22 порту из указанной подсети — если вы меняли порт на предыдущем шаге, то следует заменить его и здесь.

Для остальных диапазонов IP подключение можно запретить правилом:

iptables -A INPUT  -p tcp -m tcp --dport 22 -j DROP

Если вы ранее изменяли порт SSH, то соответственно необходимо поправить и правило.

Fail2ban

Ставится командами apt/yum install fail2ban в зависимости от используемой ОС. Чтобы включить службу в автозагрузку используйте systemctl enable fail2ban

После установки защита SSH работает сразу. Можно подправить правила в файле /etc/fail2ban/jail.conf или создать отдельный конфиг /etc/fail2ban/jail.d/ssh.conf

В секции [ssh]  указываем желаемые параметры:

ignoreip — список адресов, которые не будут блокироваться при истечении неудачных попыток авторизации. Сюда следует добавить IP-адреса, к которым будете подключаться к серверу.

findtime интервал времени, в течение которого считаются попытки подключения. Стандартное значение — 10 минут, рекомендуем ставить значение меньше, например, 5 минут.

maxretry — собственно, количество неудачных попыток авторизации перед тем, как адрес будет заблокирован. Ставим 5.

bantime время, на которое будет блокироваться подозрительный адрес.

Пример настроек секции:

[sshd]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/auth.log
findtime = 300
maxretry = 5
bantime  = 7200

Если в течение пяти минут будет три неудачных попыток авторизации, то адрес, попавший под санкции, будет заблокирован на два часа.

Список заблокированных адресов можно будет посмотреть командой:

root@api:~# fail2ban-client status sshd

Пример вывода:

Status for the jail: sshd
|- Filter
|  |- Currently failed:    0
|  |- Total failed:    0
|  `- File list:    /var/log/ssh-auth.log
`- Actions
   |- Currently banned:    11
   |- Total banned:    34
   `- Banned IP list:    118.172.217.23 123.207.231.244 138.68.75.113 150.158.179.239 154.221.19.204 192.144.171.119 20.46.114.59 202.115.29.234 45.135.232.165 46.101.132.159

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

Двухфакторная аутентификация

2FA уже плотно вошла в нашу жизнь — это удобно и безопасно. Почему бы не сделать это и на сервере?
Вам нужно установить пакет libpam-google-authenticator — на современных ОС он доступен в штатных репозиториях. После установки пакета запускаем команду:

google-authenticator 

И утвердительно отвечаем на вопрос:

Do you want authentication tokens to be time-based (y/n) y

После чего появится окно с QR-кодом, кодом верификации и резервные пароли: 

Сохраняем код себе, добавляем ключ в приложение.

Далее последует вопрос, сохранить ли конфигурацию в файле .google_authenticator домашней директории. Отвечаем утвердительно на этот и все последующие вопросы.

После чего в конфиге /etc/pam.d/sshd добавляем строку:

auth required pam_google_authenticator.so

Меняем в /etc/ssh/sshd_config параметр ChallengeResponseAuthentication на yes

И перезапускаем SSH  командой service sshd restart

Теперь при подключении к серверу после ввода пароля будет запрашиваться код подтверждения.

Панели управления

Помимо самого сервера нужно также позаботиться и о доступах в личный кабинет и панель управления сервером. Имея доступ к VNC или кнопкам управления, злоумышленник может, например, переустановить ОС на сервере и все данные будут утеряны. Или бесконечно прожимать кнопку перезагрузки, что тоже неприятно. 

В панелях управления Billmanager/VMmanager/DCImanager/ISPmanager вы можете также настроить двухфакторную аутентификацию через Google Autentificator.

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!