Sheensay → Серверная → SSH

SSH — настройка доступа к серверу, команды и подключение без паролей

18.04.2023


  • Что такое SSH
  • Настройка SSH
  • Как ограничить доступ по SSH
  • Сменить порт
  • Запретить связь по старому протоколу
  • Запретить авторизацию под root
  • Уменьшить число попыток авторизации
  • Уменьшить время ожидания авторизации
  • Закрыть доступ по IP
  • Ещё один способ ограничения доступа по IP
  • Авторизация SSH по ключам
  • Отключить авторизацию по паролю
  • Server refused our key — что делать, если не выходит авторизоваться по ключу в SSH
  • Fail2ban для защиты SSH сервера
  • Установка Fail2ban
  • Настройка Fail2ban
  • Как перезагрузить fail2ban
  • Как проверить fail2ban
  • Как сбросить бан fail2ban
  • Как перезагрузить SSH
  • Как сбросить бан fail2ban
  • Как перезагрузить SSH

Что такое SSH

SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.

Настройка SSH

Настройка будет происходить под выделенный сервер, VDS, VPS на Debian, Ubuntu. Конфигурационный файл располагается тут: /etc/ssh/sshd_config.
Если у вас обычный хостинг, всё и так должно быть настроено как надо, переходите к разделу авторизации по ключам.

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

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

Как ограничить доступ по SSH

Все изменения вносятся в /etc/ssh/sshd_config
Чтобы изменения вступили в силу, необходимо перезагрузить SSH

Сменить порт

Port 9724

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

Запретить связь по старому протоколу

Здесь мы определяем, что связь возможна только по протоколу v2

Protocol 2

Запретить авторизацию под root

PermitRootLogin no

По умолчанию no. Если yes, можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.

Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DO — подмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.

Уменьшить число попыток авторизации

MaxAuthTries 2

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

Уменьшить время ожидания авторизации

LoginGraceTime 30s

По умолчанию, 120 секунд может длиться сеанс авторизации. По истечению этого времени он обрывается. 2 минуты на авторизацию — это перебор, всё это время сервер держит связь открытой, что очень нерационально. Полминуты за глаза хватит.

Закрыть доступ по IP

Прежде чем настраивать ограничения по IP, убедитесь, что в случае ошибки в настройке и последующего бана собственного IP у вас останется альтернативный способ вернуть доступ к серверу

Если доступ нужен только вам, самым простым и надёжным будет закрыть доступ отовсюду, кроме вашего IP или, если он динамический, то диапазона IP.

  1. Открываем /etc/hosts.allow и добавляем туда
    SSHD: 192.168.1.1

    где 192.168.1.1 — ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:

    SSHD: 192.168.0.0/16
  2. Открываем /etc/hosts.deny и добавляем туда:
    SSHD: ALL

Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.

Ещё один способ ограничения доступа по IP

Можно воспользоваться следующей директивой:

AllowUsers = *@1.2.3.4

Здесь мы разрешаем доступ только для IP 1.2.3.4

Авторизация SSH по ключам

Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.

Для настройки нам понадобится файловый менеджер, например, Far Manager с плагином WinSCP, и Putty

Итак, вот инструкция:

  1. Распаковываем архив, открываем PUTTYGEN:
    Открываем PuTTY Key Generator

    Открываем PUTTYGEN (PuTTY Key Generator)

  2. Вводим и выбираем всё как на скриншоте: SSH-2 RSA и ключ длиной 2048 и жмём Generate
    Во время генерации ключей водим мышкой по специальному полю под статусной строкой, чтобы пошла генерация ключей (она использует набор из координат мыши)

    Генерируем ключи

    Генерируем ключи

  3. Теперь нужно заполнить Key Passphrase (это пароль для доступа к приватному ключу). Заполнять не обязательно, но его наличие повысит безопасность, так как любой, кто имеет доступ к приватному ключу, сможет с его помощью авторизоваться на сервере по ssh:
    Сохраняем ключи

    Сохраняем ключи

  4. Сохраним приватный ключ где-нибудь в надёжном месте — Save private key. Назовём его, к примеру, sheensay.ru.ppk
  5. А вот публичный ключ нужно сохранить на сервере, куда устанавливаем доступ — Save public key Назовём его sheensay.ru.pub. Авторизуемся по ssh по паролю и переходим в директорию пользователя, под которым будет происходить авторизация.

    В целях безопасности нежелательно работать под рутом, но я покажу пример команд для root, а вы уже скорректируете под своё имя пользователя

    Итак, копируем файл sheensay.ru.pub в /root/.ssh/.
    Далее нужно импортировать данные в файл authorized_keys

    ssh-keygen -i -f /root/.ssh/sheensay.ru.pub >> /root/.ssh/authorized_keys

    После sheensay.ru.pub можно удалить

  6. Осталось настроить подключение. Я пользуюсь Far Manager в связке с плагином WinSCP.

    Far Manager 3 имеет встроенный NetBox, последователя WinSCP, так что, ничего дополнительно устанавливать не придётся.

    Открываем Far Manager, Alt + F1, выбираем WinSCP, далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл в D:/SSH/
    При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу

    Настройка подключения по SSH

    Настройка подключения по SSH

  7. Подключаемся. Если при генерации ключей вы вводили пароль, то в этом случае при подключении у вас будет запрашивать пароль к приватному файлу.

Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка Server refused our key, то есть Сервер не принял наш ключ. В этом случае пройдитесь по всем пунктам последовательно и поищите ошибку

Отключить авторизацию по паролю

Теперь, когда всё настроено, совсем не лишним будет отключить авторизацию по паролю. Для этого внесём изменения в конфигурационный файл:

PasswordAuthentication no

Server refused our key — что делать, если не выходит авторизоваться по ключу в SSH

Бывает так, что сервер не принимает сгенерированный в Putty ключ и не хочет пускать к себе по SSH. Чтобы избежать этой проблемы, сначала авторизуемся на сервере с помощью пароля, а затем добавляем в /etc/sshd_config следующую конструкцию:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

После внесения изменений перезапускаем сервис SSH:

service sshd reload

Fail2ban для защиты SSH сервера

Самым действенным способом защиты SSH является защита от перебора паролей. Её может обеспечить утилита fail2ban.

Установка Fail2ban

apt update
apt install iptables -y && apt install fail2ban -y

Настройка Fail2ban

Удаляем дефолтный файл настроек fail2ban для Debian

cat /dev/null >/etc/fail2ban/jail.d/defaults-debian.conf

Затем, запускаем создание собственного файла настроек

nano /etc/fail2ban/jail.d/sshd.conf

Открывается редактор, туда вписываем следующее:
127.0.0.1/8 — меняете на свой IP (или диапазон, если IP динамический). Чтобы добавить несколько IP или диапазонов, указываем их через пробел.

[sshd]
enabled   = true
port      = 9724
filter    = sshd
ignoreip  = 127.0.0.1/8
logpath   = /var/log/auth.log
findtime  = 300 
maxretry  = 3
bantime   = 3600
  • port — по какому порту банить IP, попавший на bantime. Если на сервере нестандартный порт SSH, укажите его здесь
  • ignoreip — белый список IP, меняем на свои значения
  • findtime — время, в течение которого можно ошибиться не более maxretry раз
  • maxretry — максимальное число попыток авторизоваться по SSH в течение findtime
  • bantime — время бана

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

[sshlongterm]
enabled   = true
filter    = sshd
logpath   = %(sshd_log)s
banaction = iptables-allports
findtime  = 1d
maxretry  = 21
bantime   = 1w
  • banaction — как банить. Чтобы банить по всем портам, указываем iptables-allports, в таком случае, указывать port не обязательно

После внесения изменений нужно перезагрузить fail2ban

Как перезагрузить fail2ban

service fail2ban restart

Как проверить fail2ban

Чтобы проверить, верно ли работает fail2ban, можно запустить клиента и проверить статус sshd:

fail2ban-client status sshd

Если всё верно сделано, увидите надпись:

Status for the jail: sshd

Если что-то не так, то:

fail2ban                [1284]: ERROR   NOK: ('ssh',)
Sorry but the jail 'ssh' does not exist

В таком случае, вернитесь выше и перепроверьте шаги настроек

Как сбросить бан fail2ban

Сбрасывает все баны всех IP всех служб:

fail2ban-client unban --all

Если нужно сбросить конкретную службу, например SSH, и конкретный IP 1.2.3.4:

fail2ban-client set sshd unbanip 1.2.3.4

или все IP:

fail2ban-client set sshd unbanip --all

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

Как перезагрузить SSH

service sshd restart

или

/etc/init.d/ssh restart

Как сбросить бан fail2ban

Сбрасывает все баны всех IP всех служб:

fail2ban-client unban --all

Если нужно сбросить конкретную службу, например SSH:

fail2ban-client set sshd unbanip 1.2.3.4

или все IP:

fail2ban-client set sshd unbanip --all

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

Как перезагрузить SSH

service sshd restart

или

/etc/init.d/ssh restart



Так себеНеплохоНормальноХорошоОтлично (7 оценок, в среднем: 5,00 из 5)
Загрузка...


  • Установка и настройка Memcached
  • Как в htaccess запретить доступ по IP диапазону
  • WP-CLI — управление WordPress из консоли
  • Как обезопасить панель администратора WordPress
  • LEMP

Серверная far manager ssh

ssh

Свежие записи

  • Squid — свой собственный HTTP Proxy сервер
  • Как исправить ошибку «Обновить WordPress — В настоящий момент выполняется другое обновление»
  • Query Monitor
  • LEMP
  • Telegram

Свежие записи

  • Squid — свой собственный HTTP Proxy сервер
  • Как исправить ошибку «Обновить WordPress — В настоящий момент выполняется другое обновление»
  • Query Monitor
  • LEMP
  • Telegram

Свежие комментарии

  • Sheens к записи Что такое SSL и TLS, как установить и настроить
  • Геомант к записи Что такое SSL и TLS, как установить и настроить
  • Sheens к записи Last-Modified в WordPress
  • Артур к записи Last-Modified в WordPress
  • Sheens к записи EWWW Image Optimizer — плагин для сжатия png, jpeg, gif анимации без потери качества
  • Telegram
  • Вконтакте
  • Facebook
  • Twitter
  • Google+
  • Одноклассники
  • Мой Мир Mail.ru
  • RSS

Copyright © 2025 · Sheensay on Genesis Framework · WordPress · Log in