Первоочередная защита ssh Ubuntu сервера

Первоочередная защита ssh Ubuntu сервера
Photo by FlyD / Unsplash

Заметка для настроек нового VDS.

Создаем НЕ Root пользователя

Создаем нерутового пользователя, для интерактивного ввода используем команду adduser

adduser <username>

Добавляем пользователя в группу sudo:

usermod -aG sudo <username>

Редактируем ssd_config

Я не правлю дефолтовую конфигурацию, а создаю отдельный файл следующего содержания (не забудь изменить значения <port> и <username>:

#Локальная конфигурация SSHd

# What ports, IPs and protocols we listen for
Port <port>
Protocol 2

# Должен ли sshd разделять привилегии. Если да - то сначала будет создан непривилегированный дочерний
# процесс для входящего сетевого трафика. После успешной авторизации будет создан другой процесс с привилегиями
# вошедшего пользователя.
# UsePrivilegeSeparation yes

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 60
PermitRootLogin no
StrictModes yes

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes

# similar for protocol version 2
HostbasedAuthentication no

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Указывает, разрешено ли перенаправление графической  подсистемы X11.
X11Forwarding yes

# Указывает, должен ли sshd выводить на экран /etc/motd при интерактивном входе пользователя
PrintMotd no

# Указывает, должен ли sshd выводить на экран дату и время последнего севнса при интерактивном входе пользователя
PrintLastLog yes

# Указывает, нужно системе посылать TCP сообщения клиенту с целью поддержания соединения
TCPKeepAlive yes

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# Включает интерфейс PAM (Pluggable Authentication Module interface).Если задано значение "yes" - для всех типов
# аутентификации помимо обработки модуля сессии и аккаунта PAM будет использоваться аутентификация на основе
# запроса-ответа (ChallengeResponseAuthentication и PasswordAuthentication) Т.к. аутентификация запросов-ответов
# в PAM обычно выполняет ту же роль, что и парольная аутентификация, вам следует отключить либо PasswordAuthentication,
# либо ChallengeResponseAuthentication. Стоит отметить, что если директива UsePAM включена - вы не сможете запустить
# sshd от имени пользователя, отличного от root.
UsePAM yes

# Доступ определённыи пользователям
AllowUsers <username>

Сохраняю его под именем 10-sshd-savenkoff.conf, и загружаю в директорию /etc/ssh/sshd_config.d/, таким образом параметры указанной конфигурации перезапишут дефолтовые. Большинство параметров конфигурации подписано соответствующими комментариями. Для применения изменений потребуется перезагрузка sshd одной из команд (Для systemctl):

sudo systemctl restart ssh

Для более старых версий системы:

sudo service ssh restart
#ИЛИ
sudo service sshd reload

Установка Fail2Ban

Обновляем пакеты, устанавливаем, запускаем, добавляем в автозапуск:

sudo apt-get update
sudo apt install fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

При необходимости необходимо создать свой конфигурационный файл, так как /etc/fail2ban/jail.conf - системный файл конфигурации, который обновляется вместе с программой, поэтому использовать его в качестве основного файла с параметрами блокировки не рекомендуется.

Создаем файл в каталоге конфигураций fail2ban с именем сервиса, либо общий, для ssh можно сделать такой:

sudo nano /etc/fail2ban/jail.d/50-sshd.conf

с примерно следующим содержимым:

[sshd]
enabled   = true
port      = <port>
maxretry  = 5
findtime  = 1h
bantime   = 1d
ignoreip  = 127.0.0.1/8 ::1 192.168.1.1/24

Блок позволяет включить защиту для SSH сервиса, где:

  • enabled — обязательный параметр, определяющий включение или отключение секции;
  • port — порт, используемый службой, в данном случае SSH, так как в конфигурации для SSH мы изменили стандартный порт, его так же следует прописать здесь;
  • maxretry — количество неудачных попыток в течение периода findtime, после которых будет выполнена блокировка;
  • findtime — период, в течение которого действие (в данном случае — неудачная попытка подключения) должно повториться определенное количество раз (maxretry), после чего будет выполнена блокировка;
  • bantime — продолжительность бана в секундах, то есть период, на который подозрительный IP-адрес будет заблокирован;
  • ignoreip — это «белый список» IP-адресов, то есть те адреса, которые не будут заблокированы при неудачных попытках подключения.

После создания файла конфигурации fail2ban следует перезапустить, и проверить состояние его работы:

sudo systemctl restart fail2ban
sudo systemctl status fail2ban

Получить информацию по работе fail2ban для ssh можно командой:

sudo fail2ban-client status sshd