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

Материал из wiki.p3.ru

Настройки OpenSSH располагаются в файле /etc/ssh/sshd_config. В этой статье будет описано 7 параметров sshd_config, которые следует изменить. В самом конфигурационом файле все строки, которые начинаются с символа "#" являются комментариями и не учитываются. И используются значения по умолчанию. Обратите внимание на то, что закоментированные параметры указывают как раз это значение. К примеру, ssh_config содержит следующую строку. Она означает, что у параметра PubkeyAuthentication (авторизация по ключу) стоит значение "yes", и оно является значением по умолчанию.

vadim@sabinich:~$ grep -i pubkey /etc/ssh/sshd_config
#PubkeyAuthentication yes

Если потребуется изменить, то можно просто удалить "решетку", тем самым раскомментировав параметр и указать свое значение (к примеру с "yes" изменить на "no"), так как это представлено ниже:

vadim@sabinich:~$ sudo vi /etc/ssh/sshd_config
PubkeyAuthentication no

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


Отключение возможность авторизации под суперпользователем (PermitRootLogin)


По умолчанию зайти на удаленный сервер под пользователем root никто не запрещает. Но это не совсем безопасно. В место этого более правильно будет авторизовываться под пользовательской учетной записью и повышать свои привилегии с помощью команды 'su -', либо использовать 'sudo'.

Если в вашей организации несколько системных администраторов и все они подключаются к серверу под суперпользователем, то не всегда можно узнать кто из администраторов находится на сервере. Поэтому после отключения возможности авторизации напрямую под пользователем root, системные администраторы сначала будут заходить под своей учетной записью и только после этого получать привилегии суперпользователя; это облегчить аудит сервера и действий, которые производят сисадмины. Для отключения вышеописанной функции следует отключить параметр PermitRootLogin, установив значение “no”.

vadim@sabinich:~$ vi /etc/ssh/sshd_config
PermitRootLogin no


Предоставление доступа только указанным пользователям или группам (AllowUsers, AllowGroups)


По умолчанию авторизоваться может любой пользователь сервера. Лучше ограничить круг пользователей, которым разрешен доступ к ssh. Это может быть полезно, когда вы создаете некоторое количество пользователей системе, но разрешить доступ по ssh хотите только некоторым. Так же это можно использоваться совместно с NIS или openLDAP (или другие внешние приложения), которым требуется авторизация. Каждый из пользователей вашей компании может иметь учетную запись на серверах NIS, openLDAP и т.п, но на по ssh на некоторые сервера требуется пускать только определенных. Для этого в конфигурационный файл sshd_config следует добавить определенных пользователей, существующих на сервере. В примере ниже это пользователи vasya, petya и kolya, которым разрешен вход на сервер. Имя пользователей разделены пробелами.

vadim@sabinich:~$ vi /etc/ssh/sshd_config
AllowUsers ramesh john jason

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

vadim@sabinich:~$ vi /etc/ssh/sshd_config
AllowGroups deveopers administrators


Блокировка доступа определенным пользователям или группам (DenyUsers, DenyGroups)


В противовес параметра, разрешающего доступ определенным пользователям или группам, вы так же можете указать пользователей или группы, которым запрещен вход на сервер. Для этого следует добавить в конфигурационный файл sshd_config параметр DenyUsers, в котором через пробел указать тех пользователей, которым запрещен доступ на сервер. На примере ниже это системные cvs и apache, а так же вполне реальный borya.

vadim@sabinich:~$ vi /etc/ssh/sshd_config
DenyUsers cvs apache borya

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

vadim@sabinich:~$ vi /etc/ssh/sshd_config
DenyGroups marketing staff

Обратите внимание на то, что можно использовать комбинации запрещающих и разрешающих параметров: DenyUsers, AllowUsers, DenyGroups, и AllowGroups.


Изменение порта SSHD (Port)


По умолчанию, ssh работает на 22 порту. Основная масса атакующих не задумываясь пытается подключиться к этому порту и, используя словарный подбор имени пользователя и пароля, получить доступ к серверу. Если вы раскомментируете параметр Port и измените на что-либо другое, то это снизит интенсивность атак. К примеру, можно указать порт 222.

vadim@sabinich:~$ vi /etc/ssh/sshd_config
Port 222

Если журнальных файлах сервера (обычно, это /var/log/secure), вы увидете большое количество попыток авторизации, где в качестве имени пользователей указаны те, кого нет на сервере, и с тех IP-адресов, которые вам неизвестны, то будьте уверены это тот самый брут-форс о котором говорилось выше. Так же обратите внимание на то, при использовании данного способа, всем сотрудникам придется запоминать не только IP-адрес сервера, но и номер порта к которому следует подключаться.


Изменение времени ожидания авторизации (LoginGraceTime)


При попытке авторизоваться по ssh на сервер у вас есть 2 минуты, чтобы ввести логин и пароль. Если вы этого не сделаете, то соединение с сервером будет разорвано. 2 минуты ожидания авторизационных данных это довольно много. Следует ограничить до 1 минуты или даже до 30 секунд. Для этого следует изменить параметр LoginGraceTime путем редактирования файла sshd_config, и указать там требуемое время. В примере ниже это 1 минута.

vadim@sabinich:~$ vi /etc/ssh/sshd_config
LoginGraceTime 1m


Ограничение авторизации по интерфейсу (ListenAddress)


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

    eth0 – 192.168.0.1
    eth1 – 192.168.0.2
    eth2 – 192.168.0.3
    eth3 – 192.168.0.4

По умолчанию, ssh-сервер находится в состоянии ожидания подключения на всех IP-адресах. Если хотите, чтобы пользователи могли авторизовываться только на интерфейсах 2 и 3, то следует сделать так:

vadim@sabinich:~$ vi /etc/ssh/sshd_config
ListenAddress 192.168.0.2
ListenAddress 192.168.0.3


Рассоединение при отсутствии активности в шелле (ClientAliveInterval)


После того, как вы успешно авторизовались на сервер, вы можете захотеть сделать так, чтобы можно было разрывать соединение автоматически после того, как прошло некоторое время, в течение которого вы не производили никаких действий в консоли. Это обычно называется временем бездействия. В Bash, можно использовать переменную окружения TMOUT. В OpenSSH, это достигается путем комбинации параметров ClientAliveCountMax и ClientAliveInterval в конфигурационном файле sshd_config.

  • ClientAliveCountMax – Параметр указывает на полное количество сообщений, отсылаемого ssh-сервером для распознавания активности ssh-клиента. По умолчанию это 3.
  • ClientAliveInterval – Параметр указывает на время ожидания в секундах. После указанного времени ssh-сервер отошлет сообщение-запрос клиенту. По умолчанию значение этого параметра - 0. Т.е сервер не отсылает сообщение для проверки.

Для того, чтобы ваш ssh-клиент автоматически отключался после 10 минут (600 секунд), следует внести изменения в конфигурационный файл sshd_config следующим образом:

vadim@sabinich:~$ vi /etc/ssh/sshd_config
ClientAliveInterval 600
ClientAliveCountMax 0


Источник: http://sabini.ch/articles/sem-shagov-po-uluchsheniyu-bezopasnosti-ssh.html