Защита SSH на VPS-сервере: защищаем shell-доступ от взлома и брутофорса.

Многие владельцы сайтов, самостоятельно администрирующие собственные VPS, особенно начинающие, часто сталкиваются с попыткой взлома серверов, путём перебора паролей по SSH.

Особенно это заметно и актуально сразу после развёртывания VPS, когда сервер ещё не защищён файерволлом, а SSH толком не настроен и не сконфигурирован (с дефолтным конфигом).

Тут-же, многочисленные боты начинают ломиться в сетевой интерфейс по 22 порту, под root-ом, и пытаются впарить свой пароль, методом тупого перебора.

И всё-бы ничего, т.к. по дефолту после установки системы пароль даётся рандомный и десятизначный, но всё же мизерная вероятность «угадать» существует, и её нельзя сбрасывать со-счетов.

К тому же, постоянная попытка установить соединение отражается в логах, и те от этого меньше не становятся, а наоборот, растут и распухают.

Кому — как, но меня такое положение дел бесит.

В интернете есть куча различных способов борьбы с таким явлением, как взлом ssh, от самых примитивных, до самых, мягко говоря, неординарных и спорных, как-то: создание целой кучи правил и цепочек в iptables, запись в отдельный файл, анализ этого файла утилитой failtoban, создание отдельных изоляторов и правил, с последующим дописыванием новых правил в iptables, блокирующих выявленные ip…

Лично у меня такие сложности и такая бурная деятельность вызывают только недоумение – зачем городить целый огород, когда всё можно сделать намного проще, и более эффективно?

В этой статье я хочу описать комплекс мероприятий, состоящий из максимально простых и логичных действий, которые позволят защитить сервер VPS в общем, и ssh в частности, превратив его в неприступную крепость.

Необходимы всего три простых действия, чтобы предотвратить 99% всех посягательств на вашу виртуальную собственность, и ещё несколько, которые повысят уровень безопасности до стадии «паранойя».

  1. Меняем 22 порт, указанный по дефолту в конфигурационном файле /etc/ssh/sshd_conf на произвольный, в диапазоне от 1000 до 10000 (ниже порты зарезервированы, выше не имеет смысла) – например, 9876 или что-то в этом роде. Боты просто не будут знать, куда ломиться, и это отсечёт 95-99% всех попыток соединения к shell.
  2. Остаются прошаренные умники, которые любят сканировать порты, и ломиться в открытые, особенно нестандартные, и незарезервированные за приложениями. Для таких мы пишем в iptables простое правило, ЗАПРЕЩАЮЩЕЕ доступ к нашему новому порту, ВСЕМ, кроме нас любимых. Для этого вполне достаточно, узнать собственный ip (подсеть своего провайдера), и вписать эту подсеть в правило.
  3. Включаем в конфиге авторизацию по ключам, и отключаем – по паролю. Это одновременно избавить нас от гемора вдалбливать или копипастить пароль каждый раз при авторизации.

Всё, теперь авторизоваться сможет только обладатель ключей авторизации, только из нашей подсети, и только по определённому порту, известному только нам. Всем остальным путь в святая святых будет попросту закрыт. И заметьте – никаких лишних телодвижений, сложных цепочек, и кучи правил, блокирующих отдельные ip!

Всё это замечательно, но нет предела совершенству, и я предлагаю ещё чуть-чуть повысить безопасность, до уровня «совсем».

Для этого делаем следующее:

  1. В конфиге ssh указываем конкретный сетевой интерфейс, который будет слушать демон SSH. Этот интерфейс/IP выделяем только для администрирования сервера (ssh, БД MySQL, и пр.), и не вешаем на него никакие домены. Для сайтов и доменных имён выделяем дополнительные IP, к которым их и привязываем. Таким образом, доступ к этому интерфейсу/IP имеем только мы, с публичных IP средства администрирования VPS недоступны.
  2. Опять-же, в конфиге ssh – ЗАПРЕЩАЕМ авторизацию для root, разрешаем только одному пользователю, имеющему права sudo. Результат: для внесения глобальных изменений на сервере надо будет не только авторизоваться по ключу под пользователем (root запрещён), но и знать его пароль, для выполнения sudo-команд.
  3. Про такие мелочи, как Protocol 2, UseDNS no, запрет авторизации с пустым паролем, и отключение ipv6, вообще молчу.

Итого: редактированием всего одного конфигурационного файла – sshd_config – и добавлением одного правила в iptables – мы делаем наш VPS-сервер невидимым и надёжно защищённым для злоумышленников, и удобным в администрировании для себя.

Если вам необходима грамотная настройка выделенного VPS-сервера под любые нужды (web, почта, VPN и пр. под любые проекты), его администрирование или защита от атак, взломов и посягательств – вы всегда можете обратиться за этими услугами ко-мне, по адресам, указанным на странице Контакты.

Более подробную информацию вы можете получить на странице Услуги.