Тонкая настройка демона SSH на Linux VPS

SSH – это основной способ подключения к удаленным Linux- и Unix-подобным серверам с помощью командной строки. SSH обеспечивает безопасное соединение, которое позволяет запускать команды, взаимодействовать с системой и создавать туннели.

Большинство пользователей знают об основных принципах запуска и подключения к удаленному серверу. Обычно это делается с помощью такой команды:

ssh username@remote_server

Читайте также: Использование SSH для подключения к удаленному серверу на Ubuntu

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

Примечание: Руководство выполнено на сервере Ubuntu 12.04, но любой современный дистрибутив Linux должен работать аналогичным образом.

1: Конфигурационный файл SSHD

Основным конфигурационным файлом демона SSH является /etc/ssh/sshd_config.

Примечание: Не путайте этот файл с ssh_config, который определяет параметры клиентов.

Откройте файл в редакторе:

sudo nano /etc/ssh/sshd_config

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

Рассмотрим базовые опции в файле дистрибутива Ubuntu 12.04.

Порты и протоколы

  • Port 22: определяет порт, на котором демон SSH прослушивает соединения. По умолчанию SSH использует порт 22. Изменение номера порта может потенциально снизить количество вредоносных SSH-подключений.
  • Protocol 2: SSH поддерживает две версии протокола. Этот параметр рекомендуется оставить без изменений (если только вам не требуется поддержка клиентов, которые могут работать только с протоколом 1).

Ключи

  • HostKey /etc/ssh/ssh_host…: эти строки указывают ключи хоста сервера. Эти ключи помогают клиентам определить сервер. Если клиенты взаимодействовали с этим сервером ранее, они могут проверить подлинность соединения с помощью этих ключей.
  • UsePrivilegeSeparation yes: эта опция позволяет SSH порождать дочерние процессы с необходимым уровнем привилегий. Это помогает изолировать процессы и повысить безопасность.
  • KeyRegenerationInterval и ServerKeyBits: эти параметры влияют на ключ сервера, который создается для протокола SSH 1. Если все соединения вашего сервера привязаны к протоколу 2, оставьте эти параметры по умолчанию.

Логирование и ограничения

  • SyslogFacility и LogLevel: эти опции настраивают ведение логов. Первая опция определяет код объекта для сообщений логов, а вторая – уровень логирования (количество вносимых в лог данных).
  • LoginGraceTime 120: этот параметр указывает количество секунд ожидания входа в систему. Если в течение этого срока пользователь не смог войти, сервер сбросит соединение.
  • PermitRootLogin yes: эта опция управляет SSH-доступом пользователя root. Поскольку злоумышленники точно знают, что учетная запись root присутствует на сервере и предоставляет неограниченный доступ к машине, её часто пытаются взломать. После настройки учетной записи пользователя с привилегиями sudo рекомендуется установить здесь значение «no».
  • StrictModes yes: игнорирует любые файлы конфигурации пользовательского уровня с неправильными привилегиями. Если пользователь не ограничивает доступ к конфигурационным файлам, это снижает уровень безопасности. Лучше запретить доступ к файлу, пока пользователь не исправит привилегии.
  • IgnoreRhosts и RhostsRSAAuthentication: эти опции настраивают поддержку аутентификации rhost. Это синтаксис протокола 1, который не поддерживается протоколом 2.
  • HostbasedAuthentication no: это версия предыдущих опций, поддерживаемая протоколом 2. Она позволяет осуществлять аутентификацию на основе хоста подключаемого клиента. Обычно это допустимо только в изолированных средах, поскольку можно исходную информацию можно подделать. Вы можете указать информацию о хосте в файле /etc/ssh/shosts.equiv или в /etc/hosts.equiv (это выходит за рамки данного руководства).
  • PermitEmptyPasswords no: если поддерживается парольная аутентификация, эта опция ограничивает SSH-доступ для учетных записей, у которых нет пароля. доступ таких учетных записей подвергает огромному риску безопасность сервера. За редкими исключениями этот параметр всегда имеет значение no.
  • ChallengeResponseAuthentication: эта строка включает или отключает аутентификацию типа «запрос-ответ», которую можно настроить с помощью PAM. Это выходит за рамки настоящего руководства.

Отображение на экране

  • X11Forwarding yes: позволяет перенаправлять графические пользовательские интерфейсы X11 на клиентскую машину. Это означает, что вы можете запустить графическую программу на сервере и взаимодействовать с ней на клиенте. Клиент должен поддерживать оконную систему X.
  • X11DisplayOffset 10: смещение отображаемого числа sshd для форвардинга X11. Это смещение позволяет SSH порождать окна X11, чтобы избежать конфликтов с сервером X.
  • PrintMotd no: запрещает демону SSH читать и отображать сообщения дня. Иногда оно считывается оболочкой, поэтому вам также может понадобиться изменить настройки оболочки.
  • PrintLastLog yes: выводит информацию о последнем входе в систему.

Подключения и среда

  • TCPKeepAlive yes: настраивает отправку сообщений keepalive TCP на клиентский компьютер. Это может помочь серверу распознать проблемы и сбросить вредоносное соединение. Если эта опция отключена, соединения не будут сбрасываться.
  • AcceptEnv LANG LC_*: опция позволяет принимать определенные переменные среды клиентской машины. В этом конкретном случае принимаются переменные отчета, которые могут помочь корректно отобразить сеанс оболочки для клиента.
  • Subsystem sftp /usr/lib/openssh/sftp-server: настраивает внешние подсистемы, которые может использовать SSH (в данном примере поддерживается сервер SFTP, путь к которому указан в параметре).
  • UsePAM yes: указывает, что для аутентификации пользователей можно использовать PAM (Pluggable Authentication Modules).

2: Другие опции SSHD

Есть много других опций, которые может использовать SSH-демон. Некоторые из них могут быть полезны в большинстве случаев, а другие можно использовать только в определенных обстоятельствах. Рассмотрим основные опции.

Фильтрация пользователей и групп

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

  • AllowGroups: эта опция позволяет указать имена групп. Только пользователи, входящие в одну из этих групп, смогут входить в систему. Опция создает белый список групп, которым должен быть предоставлен доступ.
  • AllowUsers: работает аналогично предыдущей опции; указывает конкретных пользователей, которым разрешено входить в систему. Любой пользователь, не входящий в этот список, не сможет войти. По сути это белый список пользователей.
  • DenyGroups: эта опция создает черный список групп, которые не должны входить в систему. Пользователи, принадлежащие к этим группам, не будут иметь доступа.
  • DenyUsers: черный список пользователей. Указывает, какие пользователи не должны получать доступ к системе через SSH.

Кроме того, существуют другие ограничительные параметры. Они могут использоваться в сочетании с любым из вышеперечисленных параметров.

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

Дополнительные опции

Существует несколько параметров для настройки сетевого трафика, который будет прослушивать демон SSH:

  • AddressFamily: указывает, от каких адресов принимаются подключения. По умолчанию опция имеет значение «any»; для поддержки адресов IPv4 используется значение inet, а для адресов IPv6 – inet6.
  • ListenAddress: позволяет настроить SSH-демон для прослушивания определенного адреса и порта. По умолчанию демон будет слушать все адреса этого компьютера.

Доступны также параметры для настройки аутентификации на основе сертификатов, параметры ограничения подключения (ClientAliveCountMax и ClientAliveInterval), а также опции, которые могут изолировать вошедшего в систему пользователя в предварительно сконфигурированной среде chroot (опция ChrootDirectory).

3: Ограничение входа

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

Самый простой синтаксис выглядит примерно так:

AllowUsers demouser fakeuser madeupuser

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

Мы также можем использовать подстановочные символы и инвертированные параметры. Например, чтобы разрешить доступ всем, кроме пользователя john, можно ввести:

AllowUsers * !john

Эта строка сделает то же самое:

DenyUsers john

Вместо символа ? может стоять любой символ. Например, строка:

AllowUsers ?im

разрешит доступ в систему пользователям tim, jim, vim и т.п.

В определении пользователей можно использовать формат user@hostname, чтобы ограничить вход пользователю, который привязан к конкретному хосту.

AllowUsers demouser@host1.com fakeuser

Эта опция заблокирует доступ всем пользователям с именем fakeuser и пользователю demouser, если он принадлежит хосту host1.

Также ограничить доступ по хосту вне файла sshd_config через TCP-упаковщики. Это настраивается с помощью файлов /etc/hosts.allow и /etc/hosts.deny.

Например, ограничить доступ можно на основе трафика SSH; для этого нужно добавить такие строки в файл hosts.allow:

sshd: .example.com

Предположим, что в файле hosts.deny есть строка, которая выглядит так:

sshd: ALL

Она разрешит вход в систему только тем пользователям, которые приходят с домена example.com или субдомена.

4: Опция match

Опция match определяет шаблон критериев, согласно которому будут применяться или не применяться остальные параметры.

Опция Match содержит пары «ключ-значение». Она может использовать ключи User, Group, Host, Address. Их можно отделить друг от друга пробелами. Сами шаблоны отделяются запятыми. Также тут можно использовать подстановочные символы и инвертированные параметры.

Match User !demouser,!fakeuser Group sshusers Host *.example.com

Шаблон сработает только тогда, когда пользователь – не demouser или fakeuser, входит в группу sshusers и привязан к example.com  или поддомену.

Ключ Address может обрабатывать CIDR.

Читайте также: Сетевые технологии: IP-адреса, подсети и бесклассовая адресация CIDR

Параметры, которые соответствуют шаблонам Match, применяются условно. Область действия этих условных опций – до конца файла или до совпадения со следующим шаблоном. Поэтому значения по умолчанию рекомендуется помещать в начало файла, а исключения в конце.

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

Match User !demouser,!fakeuser Group sshusers Host *.example.com
AuthorizedKeysFile /sshusers/keys/%u
PasswordAuthentication yes
X11Forwarding
X11DisplayOffset 15

Чтобы увидеть полный список параметров Match, посмотрите справочную страницу sshd_config:

man sshd_config

Найдите раздел Match.

Заключение

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

Файл /etc/ssh/sshd_config позволяет управлять доступом к серверу. Умение настраивать SSH – очень важный навык для всех пользователей Linux.

Tags: , , ,

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