Как защитить сервер ubuntu от атак brutforce ssh?

17

У меня есть мои пароли в безопасности, но я слышал, как люди жалуются на то, что сервер резко падает, когда происходит атака грубой силы. Как я могу защитить свой сервер ubuntu 10.10 от таких атак? Для этого есть профиль apparmor? Или каким-то другим способом обратиться к нему?

    
задан Dziamid 27.03.2011 в 14:37
источник

7 ответов

16

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

Проверьте это замечательное руководство для разных подходов (включая аутентификацию RSA): Ссылка

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

Вот решение, которое я использую:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Как сказано здесь : это позволит подключить три порта 22 от любого заданного IP-адреса внутри 60-секундный период и требуют 60 секунд последующих попыток подключения, прежде чем он снова возобновит подключение. Параметр -rttl также учитывает TTL дейтаграммы при совпадении пакетов, чтобы попытаться смягчить атаки на поддельные адреса источника.

Как сказано в упомянутом руководстве, лучше использовать белый список, чтобы отделить доверенных пользователей от этих правил:

iptables -N SSH_WHITELIST

Затем добавьте доверенные хосты:

iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT

И после этого сделайте следующие правила:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
    
ответ дан Pedram 27.03.2011 в 15:25
источник
7

Я получаю ssh-атаки грубой силы на своих серверах со скоростью от 1 до 2 в день. Я установил denyhosts (пакет ubuntu: denyhosts). Это очень простой, но эффективный инструмент для этой цели: по существу он периодически проверяет ваши журналы, чтобы обнаруживать атаки с использованием грубой силы, и помещает IP-адреса, откуда эти атаки попадают в ваш файл /etc/hosts.deny. Вы не услышите от них снова, и ваша нагрузка должна быть значительно уменьшена. Он очень настраивается через его конфигурационный файл /etc/denyhosts.conf, чтобы настроить такие проблемы, как количество ошибочных попыток для атаки и т. Д.

Благодаря своей прозрачной работе вы можете легко увидеть, что происходит (уведомление по электронной почте: «ага, другая подлая атака сорвана!») и отменить ошибки из-за того, что ваши пользователи неоднократно опечатывают свои пароли.

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

Кроме того, ограничение скорости нового соединения в iptables может быть лучшим выбором, а затем запретить доступ через hosts.deny. Итак, взгляните на fail2ban. Но если вы знаете, что ваша главная задача ssh - ваша главная проблема (вручную просмотрите /var/log/auth.log, чтобы определить это), пойдите с этим очень легким и малоэффективным инструментом.

    
ответ дан DrSAR 27.03.2011 в 22:12
6
  1. Измените порт sshd на что-то нестандартное
  2. Используйте knockd для реализации системы для порта-детонации
  3. Использовать iptables recent и hashlimit для ограничения последовательных попыток SSH.
  4. Не используйте пароли, но вместо этого используйте ключи SSH.
ответ дан pepoluan 28.03.2011 в 09:11
3

Прежде всего, вы должны не использовать пароли и вместо этого использовать ключи. Нет необходимости использовать пароль. Если это сработает для вас, вы можете настроить OpenSSH-сервер, чтобы не реагировать на вход в систему.

Ссылка

Использование fail2ban также может быть вариантом.

Ссылка

    
ответ дан ddeimeke 27.03.2011 в 15:00
0

Насколько широко распространен сервер в сети? Возможно, вы можете поговорить с сетевым администратором и проверить, можно ли контролировать и ограничивать доступ к сети на сервер. Даже если логины входа в систему безопасны, кажется, что сервер может пострадать от простой атаки DoS / DDoS.

    
ответ дан bitwelder 27.03.2011 в 15:12
0

Альтернативой fail2ban является CSF: ConfigServer Security & amp; Брандмауэр .

Он поставляется с LFD: Daemon Failure Login, который может обнаруживать несколько неудачных попыток входа в систему для различных служб и блокирует нарушающий IP-адрес (временно или постоянно).

У него есть другие возможности, которые могут помочь в атаках наводнений и, возможно, обнаружить вторжения.

Недостатки:

  • Вы должны использовать CSF в качестве брандмауэра, чтобы LFD выполнял свою работу. Поэтому, если у вас есть существующий брандмауэр, вам нужно будет заменить его CSF и переносить конфигурацию.
  • Он не упакован для Ubuntu. Вам придется доверять автоматическим обновлениям с configserver.com или отключать автоматические обновления.
  • Я слышал, что он довольно популярен, поэтому умные злоумышленники, вероятно, знают, как отключить обнаружение вторжений до их обнаружения!
ответ дан joeytwiddle 17.01.2016 в 11:34
0

Вы намерены разрешить услугу SSH для всего мира? Или просто членам команды в определенных местах? Мой ответ немного зависит от серьезности вашей задачи.

В любом случае вам нужно сделать все, чтобы убедиться, что сервер SSH не разрешает вход в систему для пользователя root.

  1. В файле / etc / ssh / sshd_config убедитесь, что вы никогда не разрешаете вход в корневой каталог, кроме ключа SSH.

В моих системах у меня есть эта настройка

PermitRootLogin without-password

, но я замечаю, что в новом Ubuntu они имеют

PermitRootLogin prohibit-password

Если вы читаете «man sshd_config», я думаю, это означает, что этот новый «запрет-пароль» означает одно и то же и, безусловно, более очевидно по смыслу. Это НЕ по умолчанию для некоторых Linux-систем, но, вероятно, должно быть.

Теперь о вашей проблеме. Имеет ли ваш системный сервер только некоторые пользователи в определенных местах? Сделайте это!

  1. отредактируйте /etc/hosts.deny и вставьте

    ВСЕ: ВСЕ

Затем отредактируйте /etc/hosts.allow и укажите IP-номера или диапазон, который позволит разрешить использование SSH. Нотация там немного запутанна, потому что если вы хотите разрешить все системы с IP-номерами, такими как 111.222.65.101 - 111.222.65.255, вы помещаете такую ​​запись в hosts.allow

ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.

Это мощное решение. Если ваши пользователи могут быть перечислены диапазоном IP, сделайте это!

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

Обратите внимание на проблему, которую вы создаете для себя. Если вы хотите открыть FTP-сервер, веб-сервер или еще что-то, вам нужно будет сделать записи в хостах.

Вы можете достичь той же основной цели, сражаясь с iptables и брандмауэром. В каком-то смысле это предпочтительное решение, потому что вы блокируете врагов на внешней границе. Ubuntu имеет «ufw» (несложный брандмауэр), а «man ufw» - множество примеров. Я бы предпочел иметь хороший графический интерфейс, чтобы пройти через это, мне не нужно делать это все время. Может быть, другие могут сказать нам, есть ли сейчас.

  1. Другие сообщения здесь предлагают использовать открытый ключ SSH только для ваших пользователей. Это, безусловно, поможет, ценой сложности и разочарования для ваших пользователей. В нашей лаборатории 15 компьютеров. Пользователи идут среди компьютеров. Требование аутентификации ключа SSH вызовет большую проблему, потому что люди переходят с одного компьютера на другой.

Другой источник разочарования произойдет, когда некоторые пользователи накапливают разные ключи ssh для разных серверов. Поскольку у меня есть ключи SSH для примерно 12 различных проектов, теперь ssh терпит неудачу, потому что у меня слишком много открытых ключей (требуется либо «ssh -o PubkeyAuthentication = false», либо создание записи в файле .ssh / config. Это PITA)

  1. Если вы должны оставить сервер открытым для SSH из большого мира, то определенно вы должны использовать процедуру отклонения, чтобы блокировать места, которые часто пытаются войти в систему. Для этого есть 2 хорошие программы, те, которые мы использовали denyhosts и fail2ban. Эти программы имеют настройки, которые позволяют вам запрещать правонарушителей в течение длительного времени.

В наших системах Centos Linux я заметил, что они отказались от пакета denyhosts и предлагают только fail2ban. Мне понравилось denyhosts, потому что он создал список проблемных диапазонов пользователей / ip, а затем в hosts.deny, этот список был отмечен. Вместо этого мы установили fail2ban, и все в порядке. Я понимаю, что вы предпочтете блокировать этих плохих пользователей на внешнем краю сервера, поэтому блокировщики на основе ip-таблиц, например fail2ban, на самом деле лучше. Denyhosts работает на вторичном уровне, после того как враги получили прошлые iptables, они затем отклоняются демоном sshd.

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

ответ дан pauljohn32 30.07.2016 в 18:42