Назад | Перейти на главную страницу

Защита SSH-сервера от брутфорса

У меня есть небольшой сервер SVN, старый dell optiplex, работающий под управлением Debian. У меня нет таких высоких требований к моему серверу, потому что это всего лишь небольшой сервер SVN ... но я хочу, чтобы он был безопасным.

Я только что обновил свой сервер на более новый и лучший optiplex и начал немного изучать старый сервер. Снес после возникновения проблем. Когда я проверяю журналы, они полны попыток перебора, и каким-то образом кому-то удалось войти в мою машину. Этот человек создал дополнительный том под названием «knarkgosse» с двумя директориями «root» и «swap1» или что-то в этом роде. Не знаю, почему и что они делают, но точно хотят, чтобы это не повторилось. Я нахожу это немного странным, потому что я меняю свой пароль каждые несколько месяцев или около того, а пароли всегда представляют собой случайные буквы и числа, соединенные вместе ... не так-то просто подобрать грубую силу.

Я знаю, что могу запретить пользователю root вход в систему и использовать sudoers ... и изменить порт SSH, но что еще я могу сделать?

Итак, у меня есть несколько вопросов:

  1. Как я могу предотвратить вход в систему в течение 5 минут после X неудачных попыток. Или замедлять попытки после каждой неправильной попытки?

  2. Есть ли какой-то центральный черный список, к которому может подключиться сервер? Черный список, в котором отслеживаются «небезопасные» IP-адреса, которым никогда не должен быть предоставлен доступ?

  3. Что еще я могу сделать, чтобы обезопасить свой сервер?

Как я сказал ранее, я запускаю Debian 5 с Apache (проблема пользователя с www-данными?), Svn, mysql, php, phpmyadmin, hudson. Он находится в домашней сети с переадресацией портов на 80, 443, 8080, 8180, 23 и 22.

Fail2ban и Стук порта должен удовлетворить большинство ваших потребностей.

Также рекомендуется изменить порт SSH и разрешить только аутентификацию на основе ключей.

Можно утверждать, что вы можете достичь точки уменьшения отдачи при добавлении дополнительных мер безопасности, но, опять же, вам решать, когда вы «достаточно защищены».

Также неплохо запретить вход в систему с правами root.

Ничто не заменит безопасные пароли И аутентификацию по ключу. Что, как говорится, Fail2Ban - отличный инструмент для запрета IP-адресов пользователей, которые пытаются пройти аутентификацию слишком много раз. Он также доступен как готовый пакет для большинства дистрибутивов. Будьте осторожны, вы можете случайно получить бан, поэтому убедитесь, что у вас тоже есть IP-адрес из белого списка для восстановления или легкий доступ к консоли ...

В Fail2Ban есть несколько хороших примеров того, как настроить все, что вы просили ... однако у него нет универсального хранилища плохих адресов. Я не думаю, что где-нибудь есть такой репозиторий из-за простоты получения другого IP (обновление DHCP / атаки бот-сети / и т. Д.). Я бы также отключил вход через ssh, используя обычные имена пользователей типа «администратор» (root / admin / administrator / sysop / и т. Д.), Поскольку они наиболее часто используются.

Я остановил атаки методом перебора с помощью:

Здесь предлагается ряд хороших предложений. Я со всем уважением предлагаю сделать это относительно безопасным с помощью трех вещей:

  1. Запустите sshd на произвольном высоком порту. Боты обычно используют только порт 22 и варианты порта 22, например 2222.
  2. Отключите аутентификацию на основе пароля в конфигурации sshd:

UsePAM нет

  1. Аутентифицируйтесь только на этом сайте с помощью предварительно общих пар ключей SSH. Man on ssh-keygen, чтобы начать работу с аутентификацией на основе PKI.

Надеюсь это поможет.

Я всегда был большим поклонником CSF / LFD который может блокировать IP-адреса людей, пытающихся выполнить брутфорс, сканирование портов и некоторые другие параметры. По сути, это огромная Perl-оболочка для IP-таблиц, но файл конфигурации несложно читать, и документация неплохая.

Вы также можете посмотреть sshguard. Я не использовал его, но слышал хорошие отзывы.

Источники:
http://isc.sans.edu/diary.html?storyid=9370

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

"Sshguard отслеживает серверы по их активности регистрации. Когда журналы сообщают, что кто-то делает Плохую вещь, sshguard реагирует, блокируя его / ее / ее на некоторое время. У Sshguard есть обидчивый характер: когда непослушный тык настаивает на том, чтобы беспокоить ваш хост, он реагирует тверже и тверже ".

У меня есть SSH-сервер, подключенный к Интернету через порт по умолчанию, и я никогда не испытывал проблем.

  • tcp_wrappers (то есть hosts.allow hosts.deny) для SSH .. Я не думаю, что есть SSH, который не поддерживает скомпилированную в нем поддержку
  • iptables в сочетании с tcp_wrappers устранил около 99% моих попыток случайного сканирования портов / брутфорса ... единственная проблема в том, что вам нужно знать, откуда вы будете подключаться, чтобы разрешить эти диапазоны IP / IP ... Я просто сделал поиск популярных провайдеров в моем районе, чтобы увидеть их диапазоны IP и разрешить их ... большинство сканирований, похоже, прибывают из далеких стран :)
  • PermitRootLogin без пароля (то есть только пары ключей RSA / DSA, зашифрованные парольной фразой) прекрасно работает для автоматизированных задач .. когда я вхожу в систему для взаимодействия, я, очевидно, использую свою учетную запись (обычную), которая настроена с доступом sudo
  • sudoers
  • постоянные обновления .. Я часто обновляю этот ящик со всеми обновлениями безопасности / критическими обновлениями
  • изменение пароля / парольной фразы
  • время от времени запускайте chkrootkit, чтобы проверить, нет ли у меня проблем ... (есть несколько, которые выполняют эту функцию)

Надеюсь, поможет!

Есть лучший способ сделать это: использование fail2ban означает, что вам нужно добавить приложение, и оно работает на уровне приложения.

Если вы используете iptables, он более эффективен, поскольку работает на сетевом уровне, и вам не нужно устанавливать дополнительное приложение.

Используйте последний модуль iptables http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT

Опция (которая будет использоваться в дополнение к другим мерам безопасности) - это sshd прослушивать порт, отличный от 22. Я сам не пробовал, но слышал, что это снижает количество атак с использованием чистой силы, совершаемых ботами.

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

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

DenyHosts, http://denyhosts.sourceforge.net/, это хороший проект, с которым мне повезло. Если вы настроите denyhosts на синхронизацию, он будет загружать новые IP-адреса для добавления в список запретов, которые должны были перебрать другие системы с помощью denyhosts. Он также истекает IP-адреса, которые некоторое время не пытались перебором.

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

Что для меня было эффективным:

  1. Как говорили другие, нет входа в систему root, PasswordAuthentication установлено значение no (только вход с ключами) в sshd_config

  2. Только одному или двум пользователям разрешено входить в систему через ssh, и у них есть квази-непонятные имена, которых нет в общих списках имен пользователей инструмента грубой силы (т.е. не «admin», «apache», «web» или « Джонни")

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

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

  5. И мой любимый: модуль активного ответа OSSEC для блокировки ряда условий грубой силы и предупреждений о других ошибках. Он обнаруживает x недопустимых входов в систему за y промежуток времени, а затем блокирует (с помощью команды iptables firewall-drop) на определенный период времени. Я блокирую уже часов на 12 ради забавы. :)

Единственное, что я делаю здесь, чтобы не блокировать слишком много неправильных вещей, - это то, что в /etc/ossec.conf я устанавливаю активный ответ на высокий уровень (которого нет в конфигурации по умолчанию), а затем пройдите через sshd_rules.xml и установите правила, которые я хочу заблокировать до этого уровня, и при необходимости измените пороговые значения для блокировки и предупреждения.

Если вы используете Apache, вы также можете блокировать вещи, которые нарушают правила apache. Я не блокирую их только из-за проблемы с NAT, я хочу подумать о блокировке всего университета или чего-то подобного. :) Кроме того, вы можете написать собственные правила для блокировки при определенных условиях в файлах журнала, что может быть очень полезно.