Как остановить / предотвратить брутфорс SSH [закрыто]


22

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

У меня есть корневой сервер Ubuntu с панелью plesk.

Вчера мы с друзьями заметили, что качество речи на нашем TS3 стало очень плохим. Я отправил несколько пингов на сервер, и произошла очень большая потеря пакетов. После этого я немного погуглил и обнаружил, что есть auth.log. Я скачал его и немного прокрутил, а потом нашел это:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Кажется, кто-то пытался войти через SSH много раз. Я немного прокрутил и увидел, что этот кто-то пытается использовать много разных имен пользователей:student, tech, psi, news,...

Сотни этих логинов были отображены в файле.

Я посмотрел статистику трафика на сайте моего центра обработки данных. Это было только на 17 МБ в час. У меня есть 100Mbit Backbone, поэтому сама передача данных, похоже, не является проблемой.

На данный момент я никак не могу получить доступ к серверу.

Мой вопрос: как я могу получить доступ снова, как я могу подавить эту атаку и предотвратить последующие атаки?


Все еще изучаю мои вещи в этом отделе .... Но разве это не будет хорошим использованием для стука портов?
mjrider


Ответы:


37

Как получить доступ?

Непонятно, почему вы не можете получить доступ к своей учетной записи.

Если ваша машина подвергается атакам или высокой нагрузке, вам следует поговорить с вашим провайдером об ограничении доступа (ограничения IP) или отключении сервера (отключении от Интернета).

Вам также может потребоваться внеполосный доступ, с которым ваш провайдер может помочь.

Если кто-то скомпрометировал ваш сервер, вам может потребоваться восстановление из резервных копий или использование образа восстановления.

Как предотвратить атаки на ваш сервер, в частности SSH

лучший способ предотвратить грубые входы в систему?

Не позволяйте им добраться до вашей машины в первую очередь! Есть много способов остановить попытки перебора до того, как они попадут на ваш хост или даже на уровне SSH.

Сказав это, защита вашей операционной системы с помощью что-то вроде fail2ban - отличная идея. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban похож на DenyHosts ... но в отличие от DenyHosts, который ориентирован на SSH, fail2ban может быть настроен для мониторинга любой службы, которая записывает попытки входа в файл журнала, и вместо использования /etc/hosts.deny только для блокировки IP-адресов / хостов , fail2ban может использовать Netfilter / iptables и TCP Wrappers /etc/hosts.deny.

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

SSH:

  • Не разрешать пользователю root вход в систему
  • Не разрешать пароли ssh (используйте аутентификацию с закрытым ключом)
  • Не слушайте на каждом интерфейсе
  • Создайте сетевой интерфейс для SSH (например, eth1), который отличается от интерфейса, с которого вы обслуживаете запросы (например, eth0)
  • Не используйте общие имена пользователей
  • Используйте список разрешений и разрешайте только пользователям, которым требуется доступ по SSH
  • Если вам требуется доступ в Интернет ... Ограничьте доступ к конечному набору IP-адресов. Один статический IP-адрес идеален, однако его блокировка до xx0.0 / 16 лучше, чем 0.0.0.0/0.
  • Если возможно, найдите способ подключения без доступа к Интернету, таким образом вы можете запретить весь интернет-трафик для SSH (например, с помощью AWS вы можете получить прямое соединение в обход Интернета, оно называется Direct Connect)
  • Используйте программное обеспечение, как fail2ban, чтобы поймать любые атаки грубой силы
  • Убедитесь, что ОС всегда обновлена, в частности, пакеты безопасности и ssh

Заявка:

  • Убедитесь, что ваше приложение всегда обновлено, в частности пакеты безопасности
  • Заблокируйте страницы приложения "admin". Многие из приведенных выше советов относятся и к административной области вашего приложения.
  • Пароль Защитите вашу область администратора, что-то вроде htpasswd для веб-консоли спроецирует любые основные уязвимости приложений и создаст дополнительный барьер для входа
  • Заблокируйте права доступа к файлам. «Загрузите папки» известны тем, что они являются точками входа для всякого рода неприятных вещей.
  • Рассмотрите возможность размещения вашего приложения за пределами частной сети и предоставьте только ваш балансировщик внешней нагрузки и панель переключения (это типичная установка в AWS с использованием VPC)

1
Я установил Fail2ban через help.ubuntu.com/community/Fail2ban. Кажется, он очень мощный и удобный (Почтовые уведомления, ...)

Я получил сообщение от моего центра обработки данных: произошла флудатак (что это?), И это сделало соединение очень плохим для многих серверов. Это была не атака на мой сервер, особенно.


1
Интересный. Так что, похоже, мой центр обработки данных был целью атаки. Но знать, что меня обманывают, кроме того, тоже очень хорошо. И Fail2ban действительно хороший инструмент. Я прочитаю о Iptables и SSH Config в следующие дни и постараюсь сделать его намного более безопасным.

3
Сконфигурируйте openssh для прослушивания порта, отличного от 22, и настройте iptables для отбрасывания всего, что поступает на порт 22. Если вы не ожидаете, что ssh поступит из любой другой страны, кроме вашей родины, создайте черный список по адресу countryipblocks.net/country_selection. PHP и использовать его с iptables.
ThoriumBR

4

как я могу подавить эту атаку и предотвратить последующие атаки

Обычно я меняю ssh-порт по умолчанию с 22 на другой, например 1122. Это предотвращает многие автоматические атаки от ботов, но простое сканирование портов может обнаружить его. Так или иначе:

vi /etc/ssh/sshd_config

и измените порт 22 на порт 1122 , но этого недостаточно.

Автоматические правила IPTables на брутфорсе

я использую log2iptables https://github.com/theMiddleBlue/log2iptables вместо Fail2ban, потому что это простой скрипт Bash, который анализирует любой файл журнала с помощью регулярного выражения и выполняет iptables. Например, когда происходит 5 совпадений, log2iptables отбрасывает определенный IP-адрес. Это круто, потому что вы используете Telegram API и можете отправить мне сообщение на мой телефон, когда он обнаружит проблему :)

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


8
Из корреляции между URL-адресом проекта и вашим дескриптором SF я догадываюсь, что вы вовлечены в этот проект. Пожалуйста, ознакомьтесь с нашими рекомендациями по ссылкам на ваши собственные продукты, в частности, отметив требование, что « вы должны раскрывать свою принадлежность в своих ответах ».
MadHatter поддерживает Монику

1

Я только что собрал это, запускаю каждые 15 минут как cronjob и т.д .:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

Это мое альтернативное решение для SSH-атак. Идея состоит в том, чтобы продолжать закрывать демон SSH, если он не используется. Нет открытого порта, нет атаки. Можешь попробовать. Это открытый источник https://github.com/indy99/nnet_port_guard


1
Добро пожаловать в сбой сервера! Ваш ответ предполагает приемлемое решение вопроса, доступное через другой веб-сайт. Семейство веб-сайтов вопросов и ответов Stack Exchange обычно не одобряет такой тип ответа, поскольку другие веб-сайты могут перемещаться, удаляться или изменяться. Пожалуйста, прочитайте Как мне написать хороший ответ? и рассмотрите возможность пересмотра своего ответа, включив в него шаги, необходимые для решения проблемы. И не забудьте взять тур по сайту .
Пол

0

Автоматизированное решение для Centos / RHEL для блокировки плохих актеров

Вот скрипт для Centos, чтобы проверить ssh неудачные входы в систему для недействительных учетных записей пользователей и неверных паролей для действительных учетных записей. Если исходный IP-адрес ударил нас более 3 раз и его еще нет в списке запрещенных, он добавляется в список запрещенных. Я запускаю это каждые 15 минут из crontab рута. Я также запретил вход в систему root через ssh, поэтому эта комбинация хранит все в тайне.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

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