Каковы возможные проблемы безопасности с демоном SSH?

14

Я хотел бы иметь возможность SSH к моему офисному ПК Ubuntu 10.04 снаружи. Таким образом, я думаю запустить демон SSH на ПК. Какие проблемы с безопасностью, возможные сбои, конкретные параметры конфигурации и т. Д. Я должен знать?

В случае, если это имеет значение: это по сути только для моего собственного использования, я не думаю, что другие люди будут его использовать; это Ubuntu 10.04 ПК в среде Windows 7 / Vista / XP.

эв-уш
источник
1
Возможно, вы захотите также установить OpenVPN и создать VPN-туннель на вашем ПК для вашего ssh-соединения. Таким образом, вам не нужно открывать свой ssh-порт для всего мира.
Linker3000
@ Linker3000 Спасибо! Я подумаю об этом - хотя у меня был довольно неприятный опыт с VPN некоторое время назад.
ev-br
@Zhenya Если вы не укажете свое «@» и имя пользователя, они получат уведомление о том, что вы отвечаете на них. ;) Так что вы получите комментарий, когда я использую @Zhenya, но не когда я использую @ Zhenya
BloodPhilia
@Zhenya А теперь ты делаешь это снова XD
BloodPhilia
@Linker, не могли бы вы немного рассказать, почему OpenVPN более безопасен, чем SSH?
Арджан

Ответы:

20

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

Есть несколько мер безопасности, которые вы можете предпринять, ниже приведены некоторые из тех, которые я всегда предпринимаю при настройке сервера SSH, и некоторые дополнительные.

  1. Используйте надежный пароль, состоящий как минимум из, скажем, 10 заглавных и строчных букв, цифр и других символов.

  2. Тюрьма пользователей в их домашнем каталоге. Заключенные в тюрьму пользователи не смогут получить доступ / редактировать файлы, которые находятся за пределами их домашнего каталога. Таким образом, ваш пользователь не сможет получить доступ / редактировать ключевые системные файлы. В Интернете можно найти множество учебников о том, как посадить в тюрьму пользователя. Большинство из них используют JailKit . Пример такого урока можно найти здесь . Кроме того, вы также можете использовать встроенную ChrootDirectoryдирективу OpenSSH-сервера . Пример учебника по этому вопросу можно найти здесь .

  3. Установите Fail2Ban . Fail2Ban - это программа, которая проверяет журналы аутентификации на предмет неправильных записей. Когда достигается определенный лимит, он добавляет блок брандмауэра для этого определенного IP-адреса в течение заданного промежутка времени. В Интернете также есть несколько учебных пособий о том, как настроить Fail2Ban с SSH, например, этот . На домашней странице Fail2Ban также есть несколько хороших и полных HOWTO.

  4. Отключить root-вход через SSH. Это пользователь, который имеет доступ практически ко всем файлам в вашей системе, поэтому рекомендуется отключить его вход в оболочку. В последних версиях Ubuntu пользователь root автоматически отключается, но в любом случае не мешает отключить SSH-доступ. Это делается путем редактирования файла /etc/ssh/sshd_config. Найдите следующую строку и убедитесь, что перед ней нет #.

    #PermitRootLogin no
    
  5. Используйте нестандартный порт (например, не 22). Это можно сделать либо с помощью переадресации портов в маршрутизаторе (например, 16121 -> 22 вместо 22 -> 22), либо с помощью демона SSH, который прослушивает другой порт. Это сделает вашу службу SSH менее легко обнаруживаемой для злоумышленников. Это делается путем редактирования файла /etc/ssh/sshd_config. Найдите следующую строку и измените 22 на любой порт, который вы хотите. Не забудьте перенаправить правильный порт в маршрутизаторе впоследствии.

    Port 22
    
  6. Не используйте пароли для входа в систему. Помимо паролей, SSH также позволяет входить в систему с использованием закрытых ключей. Это означает, что ключ хранится на вашем компьютере, на котором вы получаете доступ к SSH машины SSH. При попытке подключения клиент SSH использует ключ для входа на сервер, а не с помощью аутентификации по паролю. Ключи аутентификации намного надежнее криптографически, чем пароли, и поэтому их не так легко взломать. В Интернете также есть несколько учебных пособий о том, как настроить аутентификацию на основе ключей с помощью SSH, например, этот пример . (Если вы используете SSH из Windows с PuTTY, проверьте эту ссылку для получения информации о PuTTY.) После настройки аутентификации на основе ключей вы можете отключить аутентификацию по паролю, отредактировав файл /etc/ssh/sshd_config. Найдите следующую строку и убедитесь, что перед ней нет #.

    #PasswordAuthentication no
    
  7. При желании, как @ Linker3000 упомянул в своем комментарии, вы можете настроить VPN-туннель для ПК, к которому вы хотите получить доступ через SSH, а затем запретить доступ к локальной сети на SSH-сервере. Таким образом, ни одно внешнее устройство без VPN-подключения не сможет получить доступ к вашему SSH-серверу. Это можно сделать, запретив ВСЕ хосты и затем разрешив входить только IP-адресам локальной сети. Это делается путем редактирования /etc/hosts.denyи добавления следующего:

    sshd: ALL
    

    и /etc/hosts.allowдобавить следующее:

    sshd: 192.168.1.*
    

    где IP совпадает с номером вашей локальной сети. *является подстановочным знаком, поэтому все IP-адреса, начинающиеся с, 192.168.1.будут приняты. Если это не сработает, ваш дистрибутив может использовать sshвместо sshd. В этом случае вы должны попробовать ssh: 192.168.1.*и ssh: ALLвместо этого.

  8. Вы можете разрешить только определенные хосты, сделать то же самое с и /etc/hosts.allowи /etc/hosts.denyкак описано в 6, но /etc/hosts.allowдобавьте следующую строку и каждый хост разрешите разделить пробелами:

    sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
    
  9. Разрешить только определенным пользователям доступ к вашему SSH-серверу. Это делается путем редактирования файла /etc/ssh/sshd_config. Найдите следующую строку и убедитесь, что перед ней нет #. Если его не существует, создайте его. Например, если вы хотите разрешить только Джон, Том и Мэри, добавьте / отредактируйте эту строку:

    AllowUsers john tom mary
    

    Вы также можете запретить определенных пользователей, например, если вы хотите запретить доступ к Джону, Тому и Мэри, добавьте / отредактируйте эту строку:

    DenyUsers john tom mary
    
  10. Разрешить протокол SSH2 только для входящих соединений. Есть две версии протокола SSH. SSH1 подвержен проблемам безопасности, поэтому рекомендуется использовать SSH 2. Это может быть вызвано путем редактирования файла /etc/ssh/sshd_config. Найдите следующую строку и убедитесь, что перед ней нет #. Если его не существует, создайте его.

    Protocol 2,1
    

    удалить, 1, так что линия будет

    Protocol 2
    
  11. Не разрешайте пользователям входить в систему без пароля. Это может быть вызвано путем редактирования файла /etc/ssh/sshd_config. Найдите следующую строку и убедитесь, что перед ней нет #. Если его не существует, создайте его.

    PermitEmptyPasswords no
    
  12. И хотя это просто и, возможно, само собой разумеется, но доказало свою решимость во многих случаях, обновляйте свое программное обеспечение. Регулярно обновляйте установленные пакеты / программное обеспечение.


= после редактирования файла конфигурации SSH не забудьте перезапустить демон, чтобы применить изменения. Перезапустите демон, выполнив:

sudo /etc/init.d/ssh restart

или

sudo /etc/init.d/sshd restart

в зависимости от того, какой дистрибутив Linux вы используете.

BloodPhilia
источник
2
sudo service ssh restartна Ubuntu.
ulidtko
@ulidtko Этот вопрос был объединен с более общим вопросом, поэтому я сделал свой ответ более общим и подходящим для разных распределений. Это будет работать практически на всех дистрибутивах, но вы правы.
BloodPhilia
@BloodPhilia Большое спасибо за такой подробный и доступный ответ! Еще пара вопросов по вашим вопросам: 1. В чем преимущество заключения пользователей в тюрьму перед ограничением разрешений? Скажем, входя в систему как «пользователь», у меня есть доступ только для чтения к вещам за пределами моего / home, но нет доступа на запись или выполнение [согласно стандартному Ubuntu, я полагаю]. Это лучше / хуже тюрьмы? 2. Где обычно находятся журналы аутентификации? Я хотел бы иметь возможность просматривать их вручную / через grep время от времени.
ev-br
@BloodPhilia 4. Если я заставлю sshd прослушивать нестандартный порт на сервере, например, 1234, то как можно подключиться к этому серверу из командной строки linux на клиенте? Я имею в виду, нужна ли стандартной команде ssh какой-то переключатель?
ev-br
1
@ulidtko: с Upstart sudo restart ssh.
Hello71
7

Несколько советов:

  1. Используйте аутентификацию на основе ключей, которая намного безопаснее, чем пароли
  2. Только SSH 2
  3. Отключить root-логины
  4. Для параноика измените порт из стандартного порта 22
  5. Для удобства используйте инструмент для сопоставления вашего IP-адреса с DNS-именем, таким как Dyndns или тому подобное. Вы можете долгое время пользоваться одним и тем же IP-адресом, но когда вам понадобится один раз, и вам понадобится новый.
  6. Конечно, разрешите через брандмауэр только порт, необходимый для SSH (порт 22 или нестандартный, если вы выберете).
Брайан
источник
1
По поводу 5: Если у вас есть учетная запись электронной почты на машине за пределами вашего дома, вы можете настроить работу cron для периодической отправки сообщения с вашей домашней машины на этот адрес. Ваш домашний IP будет в заголовках. Не так удобно, как DNS, но удобно.
garyjohn
Вы также можете связаться с вашим Интернет-провайдером и узнать цену на статический IP-адрес. Это, безусловно, самое простое решение из всех, но обычно оно дороже, чем динамический DNS
Стин Шютт,
2

Основной риск - забыть, что вы используете ssh-сервер, и поставить слабый пароль на учетную запись. Есть злоумышленники, которые систематически пытаются использовать общие имена учетных записей (например, webmasterи bob) и слабые пароли. Вы можете устранить этот риск, запрещая пароль логин (положить PasswordAuthentication noв sshd_config, и либо также ставить UsePAM Noили отключить аутентификацию пароля в настройках PAM для SSH). Промежуточной мерой является ограничение входа в ssh в белый список пользователей с AllowUsersили AllowGroupsв sshd_config.

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

Минимальное требование для использования ssh-клиента на компьютере - это уверенность в том, что не будет активного перехвата ssh-связи (атака типа «человек посередине» возможна, если она выполняется на клиентском компьютере - вы думаете, вы набираете команды в нетронутом ssh-клиенте, но на самом деле клиент точно передает ваши данные аутентификации, а затем вставляет в сообщение троянский конь). Это более слабое требование, чем полагать, что не будет отслеживания паролей (обычно это выполняется с помощью кейлоггера, но есть и другие, менее автоматизированные методы, такие как серфинг через плечо). Если у вас есть минимальное доверие, но вы все еще боитесь перехватчиков, вы можете использовать одноразовые пароли (OpenSSH поддерживает их через поддержку PAM).

Конечно, как и любая другая программа, которая взаимодействует с машинами вне вашего контроля (не только с сетевыми серверами, но и с клиентами), вы должны следить за обновлениями безопасности.

Жиль "ТАК - перестань быть злым"
источник
2

Три вещи пришли мне на ум:

  1. Если вы откроете порт 22 по умолчанию, то довольно скоро он будет обнаружен, и ваш компьютер будет забит атаками грубой силы. Я предлагаю вам настроить sshd для прослушивания какого-либо другого порта или для сопоставления портов на вашем брандмауэре. Хотя это не волшебная пуля, она, по крайней мере, сэкономит вам те же циклы ЦП.

    Порт 12345

  2. Явно отключите аутентификацию по паролю и используйте только ключи. Любой ключ будет лучше, чем самый сложный пароль, который вы можете запомнить.

    ПарольАутентификация нет

  3. Хотя в Ubuntu по умолчанию отключен пользователь root, явно отключите вход в систему root

    PermitRootLogin нет

shpokas
источник