Главная » Linux Ubuntu/Mint » OpenSSH » Лучшие рекомендации по повышению безопасности для серверов OpenSSH
OpenSSH — это свободная реализация протокола SSH с открытым исходным кодом. OpenSSH рекомендуется для удаленного входа в систему, создания резервных копий, удаленной передачи файлов через scp или sftp и многого другого.
SSH идеально подходит для сохранения конфиденциальности и целостности данных, которыми обмениваются две сети и системы.
Тем не менее, основным преимуществом является аутентификация сервера с использованием криптографии с открытым ключом.
Время от времени ходят слухи об использовании OpenSSH нулевого дня. На этой странице показано, как обезопасить ваш сервер OpenSSH, работающий в Linux или Unix-подобной системе, для повышения безопасности sshd.
Здесь будет использовано в качестве примера имя пользователя vivek.
Умолчания OpenSSH:
Сервер OpenSSH поддерживает различные методы аутентификации. Рекомендуется использовать аутентификацию на основе открытого ключа. Сначала создайте пару ключей с помощью следующей команды ssh-keygen на локальном компьютере / ноутбуке:
DSA и RSA 1024-битные ssh-ключи считаются слабыми. Не используйте их. Ключи RSA выбираются вместо ключей ECDSA, когда обратная совместимость связана с клиентами ssh. Все ssh-ключи должны быть либо ED25519, либо RSA 4096. Не используйте любой другой тип.
$ ssh-keygen -t key_type -b bits -C "комментарий" $ ssh-keygen -t ed25519 -C "Вход в производственный кластер в xyz corp" $ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_aws _ $ (дата +% Y-% m-% d) -C "Ключ AWS для клиентов abc corp"
Затем установите открытый ключ с помощью команды ssh-copy-id:
$ ssh-copy-id -i /path/to public-key-file user@host $ ssh-copy-id user@remote-server-ip-or-dns-name $ ssh-copy-id vivek@server
Убедитесь, что логин на основе ssh-ключа работает:
$ ssh vivek@server
Подробнее об аутентификации на основе открытого ключа можно прочитать здесь.
Прежде чем мы отключим вход в систему от имени пользователя root, убедитесь, что обычный пользователь может войти в систему как пользователь root. Например, разрешите пользователю vivek войти в систему как пользователь root с помощью команды sudo.
Добавить пользователя vivek в группу sudo:
$ sudo adduser vivek sudo
Проверьте членство в группе с помощью команды id
$ id vivek
Подробнее о добавлении пользователя в группу sudo можно прочитать здесь.
Проверьте, что пользователь vivek может войти в систему как root или выполнить команду как root:
sudo -i $ sudo /etc/init.d/sshd status $ sudo systemctl status sshd
После подтверждения отключите root-вход, добавив или исправив следующие строки в sshd_config:
PermitRootLogin no ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
Все логины на основе пароля должны быть отключены. Разрешены только логины на основе открытого ключа. Добавьте/раскомментируйте следующее в ваш файл sshd_config:
AuthenticationMethods publickey PubkeyAuthentication yes
По умолчанию все пользователи системы могут войти через SSH, используя свой пароль или открытый ключ. Иногда вы создаете учетную запись пользователя UNIX / Linux для FTP или электронной почты. Однако эти пользователи могут войти в систему с помощью ssh. У них будет полный доступ к системным инструментам, включая компиляторы и языки сценариев, такие как Perl, Python, которые могут открывать сетевые порты и делать много других интересных вещей.
Разрешить только пользователю root, vivek и jerry использовать систему через SSH, добавьте следующее в sshd_config:
AllowUsers vivek jerry
В качестве альтернативы вы можете разрешить всем пользователям входить через SSH, но запретить доступ только нескольким пользователям, со следующей строкой в sshd_config:
DenyUsers root novivek nojerry
Вам необходимо явно запретить удаленный вход в систему из учетных записей с пустыми паролями, обновите sshd_config следующей строкой:
PermitEmptyPasswords no
Нельзя не подчеркнуть, насколько важно использовать надежные пароли пользователей и парольные фразы для ваших ключей. Атака грубой силой работает, потому что пользователь переходит к паролям на основе словаря.
Вы можете заставить пользователей избегать паролей против атаки по словарю и использовать утилиту Джона Риппера для обнаружения существующих слабых паролей. Вот пример генератора случайных паролей (поместите в ваш ~/.bashrc):
genpasswd () { местный l = $ 1 ["$ l" == ""] && l = 20 tr-dc A-Za-z0-9_ </ dev / urandom | head -c $ {l} | xargs }
Запустить его:
genpasswd 16
Выход — пароль из 16 символов:
uw8CnDVMwC6vOKgW
По умолчанию SSH прослушивает все доступные интерфейсы и IP-адреса в системе. Ограничьте привязку ssh-порта и измените ssh-порт (многие скрипты принудительного перебора пытаются подключиться только к TCP-порту 22). Чтобы привязать IP-адреса 192.168.1.5 и 202.54.1.5 к порту 300, добавьте или исправьте следующую строку в sshd_config:
Port 300 ListenAddress 192.168.1.5 ListenAddress 202.54.1.5
Более эффективный подход к использованию сценариев с упреждающими подходами, таких как fail2ban или denyhosts, когда требуется принять соединение с динамического IP-адреса в глобальной сети.
TCP Wrapper — это сетевая система ACL на основе хоста, используемая для фильтрации сетевого доступа в Интернет. OpenSSH поддерживает TCP-оболочки. Просто обновите файл /etc/hosts.allow следующим образом, чтобы разрешить SSH только с 192.168.1.2 и 172.16.23.12 IP-адреса:
sshd: 192.168.1.2 172.16.23.12
Пользователь может войти на сервер через ssh, и вы можете установить интервал простоя, чтобы избежать постоянно висящей сессии ssh. Откройте sshd_config и убедитесь, что настроены следующие значения:
ClientAliveInterval 300 ClientAliveCountMax 0
Вы устанавливаете интервал простоя в секундах (300 секунд == 5 минут). После того, как этот интервал прошел, пользователь будет автоматически «выгнан» (как вышедший из системы).
Запретите пользовательские файлы ~/.rhosts и ~/.shosts. Обновите sshd_config со следующими настройками:
IgnoreRhosts yes
SSH может эмулировать поведение устаревшей команды rsh, просто отключить небезопасный доступ через RSH.
Чтобы отключить аутентификацию на основе хоста, обновите sshd_config следующим параметром:
HostbasedAuthentication no
Рекомендуется использовать такие инструменты как apt-get, чтобы устанавливать последние обновления безопасности.
Рабочие станции и ноутбук могут работать без сервера OpenSSH. Если вы не предоставляете возможности удаленного входа в систему и передачи файлов по SSH, отключите и удалите сервер SSHD.
Пользователь Debian / Ubuntu Linux может отключить и удалить сервер SSHD с помощью команды apt-get:
$ sudo apt-get remove openssh-server
Вольный и сокращенный перевод этой статьи(англ.)