Первоочередная защита ssh Ubuntu сервера
Заметка для настроек нового 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