Защитите SSH-соединение вашей системы Linux, чтобы защитить вашу систему и данные. Системным администраторам и домашним пользователям необходимо укреплять и защищать компьютеры, подключенные к Интернету, но SSH может быть сложным. Вот десять простых способов защитить ваш SSH-сервер.
Основы безопасности SSH
SSH означает Безопасная оболочка . Имя «SSH» используется как синонимы для обозначения самого протокола SSH или программных инструментов, которые позволяют системным администраторам и пользователям устанавливать безопасные соединения с удаленными компьютерами с использованием этого протокола.
Протокол SSH - это зашифрованный протокол, предназначенный для обеспечения безопасного соединения в незащищенной сети, такой как Интернет. SSH в Linux построен на портативной версии OpenSSH проект. Он реализован в классическая модель клиент-сервер , с SSH-сервером, принимающим соединения от SSH-клиентов. Клиент используется для подключения к серверу и для дисплей сеанс удаленному пользователю. Сервер принимает соединение и выполняет сессия.
В своей конфигурации по умолчанию SSH-сервер будет прослушивать входящие соединения по протоколу управления передачей ( TCP ) порт 22. Поскольку это стандартизированный, известный порт , это цель для субъекты угрозы а также вредоносные боты .
Злоумышленники запускают ботов, которые сканируют диапазон IP-адресов в поисках открытых портов. Затем порты проверяются на предмет наличия уязвимостей, которые можно использовать. Думать: «Я в безопасности, плохие парни могут целиться в большие и лучшие цели, чем я», - это ложные доводы. Боты не выбирают цели на основании каких-либо заслуг; они методично ищут системы, которые могут взломать.
Вы называете себя жертвой, если не обезопасили свою систему.
Трение безопасности
Нарушение безопасности - это раздражение - любой степени - которое пользователи и другие пользователи будут испытывать, когда вы реализуете меры безопасности. У нас долгие воспоминания, и мы можем вспомнить, как знакомили новых пользователей с компьютерной системой и слышали, как они с ужасом спрашивают, неужели они действительно пришлось ввести пароль каждый раз они вошли в систему на мэйнфрейме. Для них это было проблемой безопасности.
(Кстати, изобретение пароля приписывают Фернандо Х. Корбато , еще одна фигура в пантеоне компьютерных ученых, совместная работа которых способствовала обстоятельствам, которые привели к рождению Unix .)
Введение мер безопасности обычно сопряжено с некоторыми трениями. Владельцы бизнеса должны за это платить. Пользователям компьютеров, возможно, придется изменить свои привычные методы или запомнить другой набор деталей аутентификации, или добавить дополнительные шаги для успешного подключения. Системным администраторам придется проделать дополнительную работу по внедрению и поддержанию новых мер безопасности.
Усиление и блокировка Linux или Unix-подобной операционной системы может стать очень сложной задачей, очень быстро. Здесь мы представляем набор простых в реализации шагов, которые повысят безопасность вашего компьютера без необходимости использования сторонних приложений и без рывков через ваш брандмауэр.
Эти шаги не являются последним словом в безопасности SSH, но они позволят вам значительно продвинуться вперед по сравнению с настройками по умолчанию и без особых проблем.
Использовать протокол SSH версии 2
В 2006 году протокол SSH был обновлен с версии 1 до версия 2 . Это был значительный апгрейд. Было внесено так много изменений и улучшений, особенно в отношении шифрования и безопасности, что версия 2 не имеет обратной совместимости с версией 1. Чтобы предотвратить подключения от клиентов версии 1, вы можете указать, что ваш компьютер будет принимать подключения только от клиентов версии 2.
Для этого отредактируйте
/ и т.д. / SSH / sshd_config
файл. В этой статье мы будем часто этим заниматься. Всякий раз, когда вам нужно отредактировать этот файл, используйте следующую команду:
sudo gedit / etc / ssh / sshd_config
Добавьте строку:
Протокол 2
И сохраните файл. Мы собираемся перезапустить процесс демона SSH. Опять же, мы будем много делать это на протяжении всей статьи. Это команда, которую нужно использовать в каждом случае:
sudo systemctl перезапустить sshd
Давайте проверим, что наши новые настройки действуют. Мы переключимся на другую машину и попробуем использовать SSH на нашей тестовой машине. И мы будем использовать
-1
(протокол 1) вариант для принудительного
ssh
команда для использования протокола версии 1.
ssh -1 [email protected]
Отлично, наш запрос на подключение отклонен. Убедимся, что мы все еще можем подключиться к протоколу 2. Мы будем использовать
-2
(протокол 2) вариант доказательства факта.
ssh -2 [email protected]
Тот факт, что SSH-сервер запрашивает наш пароль, является верным признаком того, что соединение установлено и вы взаимодействуете с сервером. На самом деле, поскольку современные клиенты SSH по умолчанию используют протокол 2, нам не нужно указывать протокол 2, пока наш клиент обновлен.
ssh [email protected]
И наша связь принята. Таким образом, отклоняются только более слабые и менее безопасные соединения по протоколу 1.
Избегайте порта 22
Порт 22 - стандартный порт для соединений SSH. Если вы используете другой порт, это добавляет немного безопасности вашей системе. Безопасность через неизвестность никогда не считается настоящей мерой безопасности, и я выступал против нее в других статьях. Фактически, некоторые из более умных атакующих ботов проверяют все открытые порты и определяют, какую службу они несут, вместо того, чтобы полагаться на простой поисковый список портов и предполагать, что они предоставляют обычные службы. Но использование нестандартного порта может помочь снизить уровень шума и плохой трафик на 22-м порту.
Чтобы настроить нестандартный порт, отредактируйте файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Удалите хэш-код в начале строки «Порт» и замените «22» номером порта по вашему выбору. Сохраните файл конфигурации и перезапустите демон SSH:
sudo systemctl перезапустить sshd
Посмотрим, какой эффект это произвело. На другом компьютере мы будем использовать
ssh
команда для подключения к нашему серверу. В
ssh
команда по умолчанию использует порт 22:
ssh [email protected]
В нашем соединении отказано. Давайте попробуем еще раз и укажем порт 470, используя параметр -p (порт):
ssh -p 479 [email protected]
Наше соединение принято.
Фильтрация соединений с использованием TCP-оболочек
TCP Wrappers легко понять список контроля доступа . Он позволяет исключать и разрешать подключения на основе характеристик запроса на подключение, таких как IP-адрес или имя хоста. Оболочки TCP следует использовать вместе с правильно настроенным межсетевым экраном, а не вместо него. В нашем конкретном сценарии мы можем значительно упростить ситуацию, используя TCP-оболочки.
Оболочки TCP уже были установлены на машине Ubuntu 18.04 LTS, использованной для исследования этой статьи. Его нужно было установить на Manjaro 18.10 и Fedora 30.
Для установки в Fedora используйте эту команду:
sudo yum установить tcp_wrappers
Для установки на Manjaro используйте эту команду:
судо пасман -Сю тцп-врапперс
Здесь задействованы два файла. Один содержит разрешенный список, а другой - запрещенный. Отредактируйте список запретов, используя:
sudo gedit /etc/hosts.deny
Это откроет
gedit
редактор с загруженным в него файлом deny.
Вам нужно добавить строку:
ВСЕ: ВСЕ
И сохраните файл. Это блокирует любой доступ, который не был авторизован. Теперь нам нужно авторизовать соединения, которые вы хотите принять. Для этого вам нужно отредактировать разрешающий файл:
sudo gedit /etc/hosts.allow
Это откроет
gedit
редактор с загруженным в него файлом allow.
Мы добавили имя демона SSH,
SSHD
И IP-адрес компьютера, на котором мы собираемся установить соединение. Сохраните файл и посмотрим, действуют ли ограничения и разрешения.
Сначала мы попробуем подключиться с компьютера, которого нет в
hosts.allow
файл:
В соединении отказано. Теперь попробуем подключиться с машины по IP-адресу 192.168.4.23:
Наше соединение принято.
Наш пример здесь немного жесток - только один компьютер может подключиться. Оболочки TCP довольно универсальны и более гибки, чем эта. Он поддерживает имена хостов, подстановочные знаки и маски подсети принимать соединения из диапазонов IP-адресов. Вам предлагается проверьте страницу руководства .
Отклонять запросы на подключение без паролей
Хотя это плохая практика, системный администратор Linux может создать учетную запись пользователя без пароля. Это означает, что запросы на удаленное соединение от этой учетной записи не будут иметь пароля для проверки. Эти соединения будут приняты, но не аутентифицированы.
Настройки по умолчанию для SSH принимают запросы на подключение без паролей. Мы можем очень легко это изменить и обеспечить аутентификацию всех подключений.
Нам нужно отредактировать ваш файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку с «#PermitEmptyPasswords no.» Удалите хеш
#
с начала строки и сохраните файл. Перезапустите демон SSH:
sudo systemctl перезапустить sshd
Используйте SSH-ключи вместо паролей
Ключи SSH обеспечивают безопасные средства входа на сервер SSH. Пароли можно угадывать, взламывать или грубый . Ключи SSH не подвержены таким атакам.
Когда вы генерируете ключи SSH, вы создаете пару ключей. Один - это открытый ключ, а другой - закрытый ключ. Открытый ключ устанавливается на серверах, к которым вы хотите подключиться. Закрытый ключ, как следует из названия, хранится в безопасности на вашем компьютере.
Ключи SSH позволяют устанавливать соединения без пароля, что, как это ни парадоксально, более безопасно, чем соединения, использующие аутентификацию по паролю.
Когда вы делаете запрос на подключение, удаленный компьютер использует свою копию вашего открытого ключа для создания зашифрованного сообщения, которое отправляется обратно на ваш компьютер. Поскольку он был зашифрован вашим открытым ключом, ваш компьютер может расшифровать его с помощью вашего закрытого ключа.
Затем ваш компьютер извлекает некоторую информацию из сообщения, в частности идентификатор сеанса, шифрует ее и отправляет обратно на сервер. Если сервер может расшифровать его с помощью своей копии вашего открытого ключа, и если информация внутри сообщения совпадает с тем, что сервер отправил вам, ваше соединение будет подтверждено как исходящее от вас.
Здесь соединение с сервером по адресу 192.168.4.11 выполняется пользователем с ключами SSH. Обратите внимание, что они не запрашивают пароль.
ssh [email protected]
Ключи SSH заслуживают отдельной статьи. К счастью, у нас есть для вас. Вот как создать и установить ключи SSH .
СВЯЗАННЫЕ С: Как создать и установить ключи SSH из оболочки Linux
Отключить аутентификацию по паролю полностью
Конечно, логическим продолжением использования ключей SSH является то, что если все удаленные пользователи вынуждены их принять, вы можете полностью отключить аутентификацию по паролю.
Нам нужно отредактировать ваш файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с «#PasswordAuthentication yes». Удалите хеш
#
с начала строки измените «да» на «нет» и сохраните файл. Перезапустите демон SSH:
sudo systemctl перезапустить sshd
Отключить пересылку X11
Пересылка X11 позволяет удаленным пользователям запускать графические приложения с вашего сервера в сеансе SSH. В руках злоумышленника или злоумышленника графический интерфейс может облегчить их злонамеренные цели.
Стандартная мантра в области кибербезопасности: если у вас нет веской причины включить ее, выключите ее. Мы сделаем это, отредактировав файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с «# X11Forwarding no.» Удалите хеш
#
с начала строки и сохраните файл. Перезапустите демон SSH:
sudo systemctl перезапустить sshd
Установите значение тайм-аута простоя
Если к вашему компьютеру установлено SSH-соединение и на нем не было активности в течение определенного периода времени, это может представлять угрозу безопасности. Есть вероятность, что пользователь покинул свой рабочий стол и занят в другом месте. Любой, кто проходит мимо их стола, может сесть и начать пользоваться своим компьютером, а через SSH - вашим компьютером.
Намного безопаснее установить лимит тайм-аута. Соединение SSH будет прервано, если неактивный период совпадет с лимитом времени. Мы еще раз отредактируем ваш файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с «#ClientAliveInterval 0». Удалите хеш
#
с начала строки измените цифру 0 на желаемое значение. Мы использовали 300 секунд, что составляет 5 минут. Сохраните файл и перезапустите демон SSH:
sudo systemctl перезапустить sshd
Установите предел попыток ввода пароля
Определение ограничения на количество попыток аутентификации может помочь предотвратить попытки подбора пароля и атаки методом перебора. После обозначенного количества запросов аутентификации пользователь будет отключен от SSH-сервера. По умолчанию ограничений нет. Но это быстро исправляется.
Опять же, нам нужно отредактировать файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с «#MaxAuthTries 0». Удалите хеш
#
с начала строки измените цифру 0 на желаемое значение. Мы использовали 3 здесь. После внесения изменений сохраните файл и перезапустите демон SSH:
sudo systemctl перезапустить sshd
Мы можем проверить это, попытавшись подключиться и намеренно введя неверный пароль.
Обратите внимание, что число MaxAuthTries оказалось на единицу больше, чем разрешенное пользователю количество попыток. После двух неудачных попыток наш тестовый пользователь отключается. Это было с MaxAuthTries, установленным на три.
Отключить вход в систему с правами root
Это плохая практика - входить в систему как root на вашем компьютере Linux. Вы должны войти в систему как обычный пользователь и использовать
судо
для выполнения действий, требующих привилегий root. Более того, вы не должны позволять root входить в ваш SSH-сервер. Подключение должно быть разрешено только обычным пользователям. Если им нужно выполнить административную задачу, они должны использовать
судо
тоже. Если вы вынуждены разрешить пользователю root вход в систему, вы можете хотя бы заставить его использовать ключи SSH.
В последний раз нам придется отредактировать ваш файл конфигурации SSH:
sudo gedit / etc / ssh / sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с «#PermitRootLogin prohibit-password» Удалите хеш
#
с начала строки.
- Если вы хотите запретить пользователю root вход в систему, замените «prohibit-password» на «no».
- Если вы собираетесь разрешить пользователю root входить в систему, но заставить их использовать SSH-ключи, оставьте «prohibit-password» на месте.
Сохраните изменения и перезапустите демон SSH:
sudo systemctl перезапустить sshd
Последний шаг
Конечно, если вам вообще не нужен SSH на вашем компьютере, убедитесь, что он отключен.
sudo systemctl остановить sshd
sudo systemctl отключить sshd
Если вы не откроете окно, никто не сможет влезть.