Защита SSH-сервера от взлома


14

У меня есть маленький 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.


Ответы:


17

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

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

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

Это также хорошая идея, чтобы запретить вход в систему root.


2
Я использую denyhosts, но это почти то же самое, что и fail2ban afaik.
pfyon

Fail2Ban звучит знакомо ... Я посмотрю на это.
Пол Пилен

1
+1 Fail2Ban, 5 неудачных попыток = 5-минутная блокировка IP. Если у вас нет смехотворно простого пароля, он никогда не будет взломан со скоростью 1 пароль в минуту.
Крис С

@Chris S Да, это один из моих любимых. Скрипт Дети обычно не знают, как бороться с таймаутами ...
gWaldo

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

7

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

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


Отличный ответ. Я полностью согласен с вами жирным шрифтом ... поэтому буквы сочетаются с цифрами паролей. Аутентификация по ключу - это слишком много для этого сервера ... но хорошая идея. Я сейчас установил Fail2ban, не похоже, что мне нужно его перенастроить, и поскольку этот маленький svn-сервер дома, я имею легкий доступ к нему (учитывая, что он находится в задней части моего гардероба = S) Thnx за ваш совет!
Пол Пилен

1
Spamhaus публикует список известных спамерских сетей. Это не распространяется на бот-сети, это просто известные «профессиональные» спаммеры: spamhaus.org/drop
Chris S


4

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

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

UsePAM нет

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

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


2
Для решения очень низких нагрузок я определенно запускаю ssh на нестандартном порту. Из того, что я видел, это приведет к потере попыток грубого подключения к вашему ssh-серверу на порядок. За недельный период один из моих серверов (использующий ssh ​​на стандартном порту) получил 134 недопустимых попытки подключения. В тот же период времени виртуальный экземпляр на том же сервере (запущенный ssh ​​на нестандартном порту) имел 0.
ДФ

1

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


Знаете ли вы, есть ли какой-нибудь способ оповещения (например, по электронной почте), когда на сервере предварительно выполняется сканирование портов?
Пол Пилен

1

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

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

http://www.sshguard.net/

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

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


Это звучит здорово ... Я посмотрю на это. Thnx
Пол Peelen

1

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

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

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


1

Есть лучший способ сделать это, использование 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

0

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

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


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

2
23 зарезервированный порт для telnetхотя. Часто лучше использовать не зарезервированные порты, например> 60 КБ. iana.org/assignments/port-numbers предоставляет список номеров зарезервированных портов.
ℝaphink

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

1
@ Пол: I don't use te[l]net on this machine- так держать. Несмотря на то, что вам нужен клиент telnet по разным причинам, нет причин запускать сервер telnet, когда у вас есть ssh. Открытые пароли по сети плохие .
mlp

0

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


В общем, я согласен с вашим решением. Я считаю, что это стандарт в компании, в которой я работаю ... но я не думаю, что это что-то для меня. Проблема в том, что я в основном использую свой MacBook Pro либо из дома (локальная сеть), с работы (статический IP) или в дороге (используя 3G модем / iPhone). Для последнего это проблема, если у меня нет VPN, который, как мне кажется, слишком излишний. Спасибо за ваш ответ ты.
Пол Пилен

0

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

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


0

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

  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, я хочу подумать о блокировании всего университета или чего-то еще. :) Кроме того, вы можете написать собственные правила для блокировки определенных условий в лог-файлах, что может быть очень полезным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.