Top.Mail.Ru

Настройка ограничения доступа к SSH серверу на Linux

Настройка ограничения доступа к SSH серверу на Linux

Узнайте, как ограничить доступ пользователей к SSH-серверу в Linux. Научитесь настраивать SSH доступ только для доверенных учетных записей через sshd_config, чтобы повысить безопасность вашего сервера.

Запись видеоурока во ВКонтакте

Запись видеоурока на RuTuBe

Запись видеоурока на YouTuBe



SSH доступ по умолчанию: скрытая угроза безопасности Linux

В процессе работы с Linux сервером, вы можете создавать различных пользователей в системе, однако, возникает вопрос, а могут ли они подключаться к нашему SSH серверу?

VPN \ Микротик \ PuTTY \ 192.168.0.14:54322 \ user-ubuntu \ Password

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

Анализ учетных записей для настройки SSH

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

less /etc/passwd

pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin

Тут, напротив некоторых учетных записей мы видим значения false и nologin, они говорят о том, что под данными учетными записями запрещено запускать оболочку, так как это системные учетные записи, необходимые для выполнения каких-то системных задач.

Однако, для новых пользователей, которых мы создали вручную, либо система их создала в процессе настройки какой-то службы, таких параметров нет.

it-skills:x:1000:1000:anton:/home/it-skills:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user-windows:x:1002:1002::/home/user-windows:/bin/bash
user-ubuntu:x:1003:1003::/home/user-ubuntu:/bin/bash
usr1cv8:x:998:1004:1C Enterprise 8 server launcher:/home/usr1cv8:/bin/sh
postgres:x:997:1005:Postgres Pro Server:/var/lib/postgresql:/bin/bash

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

Настройка SSH: директива AllowUsers для создания белого списка

Поэтому, нам необходимо указать каким конкретно пользователям разрешено подключаться по SSH к нашему серверу и от куда.

Для этого, добавим определенные правила в конфигурационный файл sshd_config

sudo nano /etc/ssh/sshd_config

Добавим следующую строчку:

AllowUsers (Разрешенные пользователи)

AllowUsers it-skills

Ctrl+O

Ctrl+X

sudo systemctl restart sshd

Попробуем подключиться под пользователем user-ubuntu

login as: user-ubuntu
user-ubuntu@192.168.0.14's password:
Access denied

Доступ запрещен, давайте посмотрим, что у нас появилось в логах

journalctl

Shift+g

ноя 05 13:08:10 ubuntu-srv sshd[87132]: User user-ubuntu from 192.168.1.254 not allowed because not listed in AllowUsers
ноя 05 13:08:13 ubuntu-srv sshd[87132]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.16>
ноя 05 13:08:15 ubuntu-srv sshd[87132]: Failed password for invalid user user-ubuntu from 192.168.1.254 port 55735 ssh2

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

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

Безопасность через неясность: почему SSH не сообщает об ошибках прямо?

Однако, это сделано намерено, согласно принципа "безопасность через неясность"

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

Еще один интересный нюанс, мы в логе получили сообщение "Failed password for invalid user user-ubuntu" которое говорит нам о том, что "ошибочный пароль для не существующего пользователя". Однако, пользователь существует и пароль верный, просто ему запрещено подключаться через SSH.

Дело в том, когда, при первоначальной проверке, система понимает, что пользователю user-ubuntu не разрешено подключаться через SSH, система автоматически считает этого пользователя не существующим, поэтому и появляется данное сообщение. Но, это не говорит о том, что вы ввели не верное имя пользователя или пароль.

journalctl -f

Если мы введем не верное имя пользователя, то в логах получим сообщение:

Invalid user 123 from 192.168.1.254 port 56144

вместо

User 123 from 192.168.1.254 not allowed because not listed in AllowUsers

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

Доступ к базовым модулям курса, вы можете получить совершенно бесплатно!

Мы поможем вам легко получить базовые навыки работы с Linux, без лишней теории и воды. Убедитесь, что осваивать новое может быть просто!

Получите бесплатный доступ к первым модулям курса.

Настройка SSH: директива DenyUsers для создания черного списка

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

sudo nano /etc/ssh/sshd_config

Добавим следующую строчку:

#AllowUsers it-skills

DenyUsers postgres usr1cv8 user-ubuntu user-windows user1

sudo systemctl restart sshd

journalctl -f

login as: user-ubuntu
user-ubuntu@192.168.0.14's password:
Access denied

И тут мы видим уже следующее сообщение:

ноя 05 14:11:36 ubuntu-srv sshd[88749]: User user-ubuntu from 192.168.1.254 not allowed because listed in DenyUsers
ноя 05 14:11:45 ubuntu-srv sshd[88749]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.254  user=user-ubuntu
ноя 05 14:11:47 ubuntu-srv sshd[88749]: Failed password for invalid user user-ubuntu from 192.168.1.254 port 56551 ssh2

И тут мы видим, что пользователю user-ubuntu не разрешено подключаться, потому что он состоит в списке запрещенных пользователей.

Однако, это еще не все, мы можем не только указать каким пользователям разрешено или запрещено подключаться, а еще и откуда именно!

sudo nano /etc/ssh/sshd_config

DenyUsers postgres usr1cv8 user-ubuntu@192.168.0.1 user-windows user1

Т.е. пользователю user-ubuntu запрещено подключаться по SSH к серверу только с машины 192.168.0.1. Это может быть вполне актуально, если у вас есть подозрение, что машина 192.168.0.1 заражена каким-то зловредном. Так мы можем блокировать запросы конкретно с этой машины, пока разбираемся с причиной подозрительной работы, а сотрудник может пересесть на соседнюю машину и продолжить работу.

Ограничение доступа по IP и сети

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

#DenyUsers postgres usr1cv8 user-ubuntu@192.168.0.1 user-windows user1

AllowUsers it-skills@192.168.0.11  it-skills@ubuntu-client.office.loc it-skills@192.168.1.0/24

Т.е. по данным правилам, под пользователем it-skills я могу подключаться к серверу через SSH, только со следующих устройств:

  • - машины 192.168.0.11
  • - на случай, если её IP изменится, то с указанного DNS имени машины, но, здесь у меня домена нет, поэтому отрабатывать это правило не будет, но знайте, что в домене можно и так сделать.
  • - машин из VPN сети 192.168.1.0/24

А конкретно в нашей ситуации, предлагаю разрешить подключаться пользователю it-skills из нашей рабочей сети и из сети VPN.

AllowUsers it-skills@192.168.0.0/24 it-skills@192.168.1.0/24

sudo systemctl restart sshd

login as: it-skills
it-skills@192.168.0.14's password:
Welcome to Ubuntu

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

И учитывайте, что эти правила действуют на все, что связанно с SSH, тот же scp, rsync и X11 forwarding, так как они используют службу SSH.