- Что такое 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.
- Открываем
/etc/hosts.allow
и добавляем тудаSSHD: 192.168.1.1
где
192.168.1.1
— ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:SSHD: 192.168.0.0/16
- Открываем
/etc/hosts.deny
и добавляем туда:SSHD: ALL
Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.
Ещё один способ ограничения доступа по IP
Можно воспользоваться следующей директивой:
AllowUsers = *@1.2.3.4
Здесь мы разрешаем доступ только для IP 1.2.3.4
Авторизация SSH по ключам
Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.
Для настройки нам понадобится файловый менеджер, например, Far Manager с плагином WinSCP, и Putty
Итак, вот инструкция:
- Распаковываем архив, открываем PUTTYGEN:
- Вводим и выбираем всё как на скриншоте:
SSH-2 RSA
и ключ длиной2048
и жмём Generate
Во время генерации ключей водим мышкой по специальному полю под статусной строкой, чтобы пошла генерация ключей (она использует набор из координат мыши) - Теперь нужно заполнить
Key Passphrase
(это пароль для доступа к приватному ключу). Заполнять не обязательно, но его наличие повысит безопасность, так как любой, кто имеет доступ к приватному ключу, сможет с его помощью авторизоваться на сервере по ssh: - Сохраним приватный ключ где-нибудь в надёжном месте —
Save private key
. Назовём его, к примеру,sheensay.ru.ppk
- А вот публичный ключ нужно сохранить на сервере, куда устанавливаем доступ —
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
можно удалить - Осталось настроить подключение. Я пользуюсь Far Manager в связке с плагином WinSCP.
Far Manager 3
имеет встроенный NetBox, последователя WinSCP, так что, ничего дополнительно устанавливать не придётся.Открываем Far Manager, Alt + F1, выбираем
WinSCP
, далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл вD:/SSH/
При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу - Подключаемся. Если при генерации ключей вы вводили пароль, то в этом случае при подключении у вас будет запрашивать пароль к приватному файлу.
Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка 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
Свежие комментарии