OpenSSH. Настройка SSH сервера и клиента в Linux. Часть 2.

Всем привет!

В прошлый раз мы разобрались, что такое SSH и в чем ее преимущества, также мы реализовали самый простой пример SSH-сервера и клиента.

Сегодня я расскажу про более детальную настройку SSH-сервера.

Как гласит известная фраза, «в Linux все есть файл», поэтому для настройки SSH-сервера необходимо и достаточно отредактировать один конфигурационный файл. Его полный путь — /etc/ssh/sshd_config. Для редактирования откроем этот файл с правами суперпользователя любым текстовым редактором.

Перед редактированием сделаем на всякий случай backup файла:

sudo cp /etc/ssh/sshd_config{,.bak}

Теперь посмотрим его содержимое:

sudo nano /etc/ssh/sshd_config

После каждого изменения этого файла необходимо перезапустить ssh-сервер для применения наших изменений.

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

Port

Здесь прописывается, какой порт будет слушать наш сервер. По умолчанию он слушает 22 порт TCP/IP. Интересный факт, что можно указать несколько портов. Например:

Port 22
Port 120
Port 2239

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

ListenAddress

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

Общий вид настройки можно записать так:

ListenAddress host | IPv4_addr | IPv6_addr
ListenAddress [host | IPv4_addr | IPv6_addr]:port

Указывает сетевой адрес, на котором будет «слушать» сервер.
Если на сервере есть несколько сетевых интерфейсов, которые настроены на использования разных 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, то следует сделать так:

ListenAddress 192.168.0.2
ListenAddress 192.168.0.3

Здесь можно также указать порт. Например:

ListenAddress 192.168.0.2:222

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

Address Family

Указывает, какое семейство IP адресов должно быть использовано сервисом ssh. Возможные варианты:
“any” — любые
“inet” (только IPv4)
“inet6” (только IPv6)
По умолчанию — “any”.

Имеет смысл по возможности ограничить семейство обрабатываемых адресов реально используемыми, т. е. если вы используете только IPv4 — отключите IРv6, и наоборот.

Например, для разрешения IPv4 и запрета IPv6:

AddressFamily inet

Protocol

ssh может работать с протоколами SSH1 и SSH2. При этом использование небезопасного SSH1 крайне не рекомендуется. Заставить ssh работать только с протоколом SSH2 можно так:

Protocol 2

PermitRootLogin

Возможность авторизации под суперпользователем

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

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

PermitRootLogin no

PermitEmptyPasswords

Блокируем пустые пароли

PermitEmptyPasswords no

AllowUsers, AllowGroups

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

Для этого в конфигурационный файл sshd_config следует добавить определенных пользователей, существующих на сервере. В примере ниже это пользователи john, peter и michael, которым разрешен вход на сервер. Имя пользователей разделены пробелами.

AllowUsers john peter michael

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

AllowGroups developers administrators

DenyUsers, DenyGroups

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

DenyUsers apache boris

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

DenyGroups marketing hackers

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

LoginGraceTime

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

Для этого следует изменить параметр LoginGraceTime путем редактирования файла sshd_config, и указать там требуемое время. В примере ниже это 1 минута.

LoginGraceTime 1m

ClientAliveInterval

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

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

Используя Bash, вы можете достичь этого, изменив переменную окружения TMOUT.

В OpenSSH же это достигается путем комбинации параметров ClientAliveCountMax и ClientAliveInterval в конфигурационном файле sshd_config.

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

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

ClientAliveInterval 600
ClientAliveCountMax 0

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

Всем удачи и до скорых встреч на нашем блоге!

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s