Как я могу повысить безопасность SSH? Могу ли я потребовать ключ и пароль?

16

У меня небольшая сеть серверов, и я хотел бы повысить общую безопасность. У меня недостаточно времени / денег / паранойи для настройки VPN - как можно повысить безопасность моей системы?

Одной из причин может быть требование, чтобы пользователи отправляли свой ключ и вводили пароль. Это довольно сложно для Google, потому что все, что касается "ssh key password" - это sshing без пароля. :-)

Одна схема, с которой я всегда хотел поиграть, - требовать, чтобы входящие соединения исходили только из белого списка IP-адресов dyndns. Я знаю, что некоторые руководители службы безопасности рвались бы при мысли об этой идее, но в том-то и дело, что это значительно усложнит использование коробки.

Как вы думаете? Что еще там?

Джон Башир
источник
Вы также можете ограничить список пользователей, которым разрешено подключаться, используя директивы AllowUsers или DenyUsers. Подробнее об этом посте .
Фред

Ответы:

8

Логин с паролем и ключом такой же, как «просто с ключом». Во время создания ключа вам предлагается ввести кодовую фразу. Если вы оставите это поле пустым, пароль не будет запрашиваться. Если вы введете какую-нибудь фразу-пароль, вас будут спрашивать каждый раз, когда вы захотите войти в систему.

Если вы беспокоитесь о безопасности, рассмотрите некоторые из этих советов, упомянутых триллион раз на этом форуме:

  • Отключить логин ssh для пользователя root
  • Разрешить доступ по SSH только с определенных IP-адресов (iptables, hosts.allow, ...)
  • Переместить порт ssh на другой порт (больше неясности, чем безопасности, но это работает)
  • Отслеживайте попытки входа в систему за рубежом и реагируйте соответственно
  • Поддерживайте свою систему в актуальном состоянии

И т. Д.

Обновление: пожалуйста, обратитесь к ответу здесь, чтобы узнать, как запрашивать открытый ключ и пароль локальной системы для сервера OpenSSH.

mkudlacek
источник
Спасибо за все ваши советы, рассмотрим их. если требуются и ключ, и пароль, то, если эксплуататор узнает пароль (например, если пользователь использует его в другом месте, которое небезопасно), он не сможет войти без ключа, и если эксплуататор украдет ключ с компьютера пользователя они не могут войти, не зная пароля ... верно?
Джон Башир
12
Это не одно и то же. Если вам требуется только ключ, сервер не может применить политику надежности пароля для ключа. Неосторожный пользователь может иметь незашифрованный закрытый ключ, лежащий на клиенте, что делает ваш сервер уязвимым в случае кражи ключа.
200_успех
mkudlacek - я раньше не знал о hosts.allow - гуглил, кажется, моя идея белого списка dyndns не так уж и глупа, думаю, я попробую это.
Джон Башир
1
200_success - так возможно ли требовать и ключ, и пароль?
Джон Башир
Я также использую приложение DenyHosts, чтобы помочь заблокировать людей, которые продолжают пытаться войти и терпеть неудачу. Хороший маленький проактивный автоматизированный способ занесения в черный список людей ..
Джеймс Т Снелл
6

Одна идея, которая показалась мне интересной, - это стук портов - в основном, чтобы установить ssh-соединение, сначала нужно проверить последовательность других портов, прежде чем ssh-сервер подтвердит запрос на соединение. Если правильная последовательность портов не используется, ответ отсутствует, поэтому он выглядит так, будто сервер ssh не запущен. Последовательность портов настраивается и может использоваться совместно с вашими пользователями; все остальные фактически не смогут подключиться.

Я не пробовал это сам, но из того, что я слышал (что не так много, на самом деле), издержки незначительны, и это сильно снижает ваш профиль видимости.

weiji
источник
Я бы пошел с этим, если вы просто хотите «повысить общую безопасность», но вам, вероятно, следует попытаться решить конкретные проблемы безопасности.
Стефан Тиберг
Я использую это на всех сайтах, на которых я ssh, и это очень эффективно imho.
Sirex
Разве это не то же самое, что иметь пароль, который на 4 символа длиннее?
Джон Башир
на самом деле, нет. Всего 65536 портов и 26 букв. Также у вас есть последовательность стуков любой длины, и вы можете ограничить количество повторных попыток, используя стандартные методы брандмауэра. Это не безопасность как таковая, но приятно иметь.
Sirex
ну тогда 8 или 12 символов длиннее :-D
Джон Башир
3

Патчи, связанные с включением непосредственно в SSH, и множество актуальных обсуждений:

Это также можно сделать без изменений, используя скрипт проверки пароля в сочетании с использованием параметра ForceCommandконфигурации.

Наконец, хотя для него не существует модуля, если вы переместили аутентификацию с открытым ключом в PAM, то вам потребуется выполнить оба шага, прежде чем PAM сочтет аутентификацию успешной.

Джефф Ферланд
источник
2

Просто используйте

RequiredAuthentications publickey, password

в , sshd_configесли вы используете SSHd от ssh.com. Эта функция недоступна в OpenSSH.

Флавио Ботельо
источник
RequiredAuthenticationsэто определенно нестандартное расширение для OpenSSH
Hubert Kario
Вы знаете, какие реализации sshd поддерживают это?
Джон Башир
Сервер Tectia SSH поддерживает это. Кстати: используйте @nameOfUser при ответе на свои комментарии, таким образом, они будут уведомлены об ответе
Hubert Kario
Аналогичная функциональность поддерживается в OpenSSH начиная с
Сорен Лёвборг,
1

Вы также можете использовать одноразовые пароли для повышения безопасности. Это позволит пользователям входить в систему с небезопасного терминала, который может иметь кейлоггер, если они ранее сгенерировали следующий пароль. Также есть генераторы паролей, которые можно установить даже на старые телефоны Java MIDP, которые вы всегда носите с собой.

профессор Мориарти
источник
Да, на моем личном сервере я использую токен Yubikey в дополнение к своему паролю. Токен генерирует одноразовый пароль. Оба должны пройти проверку подлинности. В качестве альтернативы, я разрешаю обход пары пароль / otp, если вы аутентифицируетесь с ключом SSH. Yubikey дешев, и есть много программного обеспечения для его интеграции с Pam, расширяемой системой аутентификации Linux.
Мартейн Химельс
1

Я бы порекомендовал вам никогда не запускать sshd, rdp или подобные сервисы управления без ограничения IP. На самом деле, я бы предложил ограничить доступ к таким сервисам администраторам, подключающимся через VPN.

3molo
источник
1

Что касается вашего первоначального вопроса о требовании и ключа, и пароля, если вы используете RHEL или CentOS 6.3, это теперь возможно. В примечаниях к выпуску RHEL 6.3 описывают его, это дело Добавляя это в sshd_config

RequiredAuthentications2 publickey,password
Марк Маккинстри
источник
0

Я полностью согласен с 3моло. OpenSSH является SSH-сервером по умолчанию для Linux и Unix. У нас нет причин менять это, особенно в целях безопасности. VPN должно быть лучшим решением, которое может зашифровать наш трафик и обеспечить двухэтапную авторизацию пароля.

mcsrainbow
источник
0

Не знаю, почему никто не упомянул об этом, но вы должны убедиться, что вы генерируете ключи длиннее 1024 бит по умолчанию, которые больше не считаются безопасными

mnmnc
источник