Защита ssh в Ubuntu

Одна из самых важных вещей, которые нужно сделать сразу же после подключения сервера с Ubuntu к сети интернет — это, конечно же, защита от несанкционированного доступа к управлению сервером через ssh. Если этого не сделать, то очень быстро специально написанные программы, сканирующие глобальную сеть, обнаружат, что на вашем сервере открыт порт 22 и что для полного контроля над системой достаточно только подобрать пароль для пользователя root. Конечно, абсолютной защиты не существует, но максимально усложнить задачу злоумышленнику нам вполне по силам. Рассказ о методах защиты ssh я буду вести, учитывая возможные особенности как для полноценных выделенных серверов с Ubuntu, так и для VPS/VDS серверов.

Защищать доступ по ssh безусловно нужно. Если вы этого еще не делали, то просто загляните в файл /var/log/auth.log. Наверняка там есть записи о попытках несанкционированного доступа к системе.

1. Изменяем номер порта ssh. Самое простое и очевидное, что можно сделать. Для этого открываем в текстовом редакторе (например, в nano) файл /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

В одной из его первых строк находим директиву Port. Заменяем номер порта 22 на один из нестандартных портов, например, на 4118.

# What ports, IPs and protocols we listen for Port 4118

После этого перезапускаем ssh-сервер:

sudo service ssh restart

…и вполне предсказуемо теряем связь с сервером. Поэтому заново подключаемся по ssh, но теперь указываем в параметрах подключения новый порт, например, так:

ssh -p 4118 root@example.org

Смена номера порта ssh позволяет избавиться от большинства попыток перебора паролей автоматическими программами. Однако от более профессиональных попыток несанкционированного доступа к вашей системе этот шаг не спасет. Вместе с ним следует применять и другие методы защиты.

2. Отключаем учетную запись суперадминистратора (root). Сразу оговорюсь, что в Ubuntu учетная запись root по умолчанию отключена. Однако многие хостинг-провайдеры, у которых арендуются выделенные сервера, включают учетную запись root в операционных системах Ubuntu. Если вы используете выделенный сервер, то учетную запись root можно и нужно отключить. С точки зрения защиты ssh это усложнит перебор паролей — ведь кроме пароля теперь нужно будет знать еще и имя пользователя. Отключение учетной записи root в Ubuntu происходит при выполнении команды удаления пароля суперадминистратора:

sudo passwd -l root

Внимание! Перед отключением учетной записи администратора убедитесь, что у вас есть другая учетная запись с правами на выполнение команды sudo.

Поэтому на примере создания новой учетной записи test покажу как создать нового пользователя и наделить его правом выполнения команды sudo. Собственно, сначала создадим нового пользователя. Будем считать, что новый пользователь создается из-под учетной записи root, поэтому намеренно опускаю ключевое слово sudo перед командой adduser:

adduser test

Далее нужно узнать, кому в системе разрешено выполнять команды от имени суперпользователя, используя ключевое слово sudo. Для этого нам нужно заглянуть в файл visudo:

visudo

В этом файле вы можете обнаружить следующие строки:

# User privilege specification root ALL=(ALL) ALL # Allow members of group sudo to execute any command after they have # provided their password # (Note that later entries override this, so you might need to move # it further down) %sudo ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL

Строки, приведенные выше означают, что выполнять команды от имени суперадминистратора может пользователь root, а также пользователи, входящие в группы sudo и admin. Поэтому достаточно поместить нового пользователя в одну из этих групп. Файл visudo, тем временем, следует закрыть, не внося в него изменений. После этого добавим пользователя test в группу sudo:

usermod -a -G sudo test

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

id test

После этого закрываем сеанс ssh от имени пользователя root, входим в систему под пользователем test (помним, что поменяли номер порта в первом шаге) и отключаем учетную запись root:

logout ssh -p 4118 test@example.org sudo passwd -l root

Несмотря на то, что этот шаг, безусловно повышает безопасность доступа к серверу по ssh, оговорюсь, что некоторое дополнительное программное обеспечение (например, для управления и перезагрузки VPS/VDS сервера через веб-интерфейс) может требовать, чтобы учетная запись root была активной. При наличии такого программного обеспечения имеет смысл задать для пользователя root пароль понадежнее и не отключать эту учетную запись.

3. Настраиваем вход в систему по ключу и отключаем вход по паролю. Намного безопаснее использовать не пароли, а ключи RSA. Сначала нужно на клиентском компьютере, с которого вы будете заходить по ssh на удаленный сервер, сгенерировать закрытый и публичный ключи.

ssh-keygen

Ключи по умолчанию сохраняются в домашний каталог пользователя, в файлы ~/.ssh/id_rsa (закрытый ключ) и ~/.ssh/id_rsa.pub (публичный ключ). Для того, что авторизоваться на удаленном сервере по этому ключу, нужно передать на сервер свой публичный ключ. Это можно сделать с помощью команды scp:

scp -P 4118 test@example.org:~ ~/.ssh/id_rsa.pub

Это командой мы загрузим файл id_rsa.pub на сервер example.org в домашний каталог пользователя test. Также в этой команде указан нестандартный номер порта ssh: 4118. Затем уже на удаленном сервере нужно добавить содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys в домашнем каталоге того пользователя, под которым мы хотим войти в систему, используя сгенерированный нами ключ. После добавления в authorized_keys исходный файл с публичным ключом можно удалить.

sudo sh -c ‘cat ~/id_rsa.pub >> ~/.ssh/authorized_keys’ rm ~/id_rsa.pub

После этого разлогиниваемся на удаленном сервере командой logout и пытаемся зайти снова. Если сервер не спрашивает пароль, то все прошло успешно — и мы авторизовались с помощью секретного (закрытого) rsa-ключа ~/.ssh/id_rsa, находящего на нашем компьютере. Если авторизация по ключу не удается и сервер по прежнему спрашивает пароль, то с помощью ключа ‘-v’ включаем режим отладки ssh-соединения и разбираемся в причинах ошибки:

ssh -p 4118 -v test@example.org

После того как будет успешно настроена авторизация по ключам, следует отключить возможность авторизации по паролю. Для этого нужно найти в файле /etc/ssh/sshd_config директиву PasswordAuthentication и установить ее значение в ‘no’:

# Change to no to disable tunnelled clear text passwords PasswordAuthentication no

После этого остается только перезапустить ssh:

sudo service ssh restart

В силу особенностей VPS/VDS хостинга, которые я описывал на втором шаге, иногда требуется, что учетная запись root была активной, и чтобы можно было войти под пользователем root, используя пароль. Поэтому иногда способ защиты ssh путем отключения паролей и настройки входа по rsa-ключам неприменим.

4. Расставляем ловушки — настраиваем утилиту denyhosts. Утилита представляет собой python-скрипт, который анализирует файл /var/log/auth.log на наличие записей о несанкционированных попытках входа на сервер по ssh и добавляет ip-адреса, с которых осуществлялись эти попытки в файл /etc/hosts.deny (список ip-адресов, с которых запрещен вход по ssh). Утилита denyhosts — серьезный помощник в деле защиты ssh (да и других сервисов). При ее использовании задача подбора пароля усложняется до невозможности.

Сначала установим denyhosts из репозитория:

sudo aptitude install denyhosts

Сразу после установки утилита просканирует файл /var/log/auth.log и добавит ip-адреса, с которых осуществлялся подбор паролей, в /etc/hosts.deny. Наберитесь терпения, если в файле /var/log/auth.log уже много таких записей.

Сразу после установки denyhosts уже готово к работе, однако рекомендую обратить внимание на несколько настроек, которые находятся в файле /etc/denyhosts.conf.

Во-первых, это директива PURGE_DENY, которая определяет время, в течение которого следует хранить заблокированные ip в списке hosts.deny. По умолчанию эта директива содержит пустое значение, что означает, что список hosts.deny не очищается никогда.

Если ip-адрес туда попал, то больше нельзя будет зайти с него на этот сервер, используя ssh. Иногда это может привести к тому, что введя несколько раз неправильно свой пароль, мы можем заблокировать сами себе доступ к своему же серверу. Ситуация может усугубиться, если используется авторизация по ключам и выход в интернет осуществляется со статичного ip-адреса.

Поэтому рекомендую установить эту директиву в значение, равное нескольким часам.

PURGE_DENY = 3h

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

ADMIN_EMAIL = test@example.org

Для того чтобы новые настройки вступили в силу, нужно перезапустить службу denyhosts:

sudo service denyhosts restart

Найдено 5 похожих страниц:

Авторизация через сервис Loginza: Yandex Google Вконтакте Mail.ru Twitter Loginza MyOpenID OpenID WebMoney

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Оформить заявку
    X

    Привет дорогой друг

    У тебя установлено расширение AdBlock или подобное.
    Добавь мой сайт в белый список, и тем самым внесешь свой вклад в его развитие. Инструкция как отключить AdBlock