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

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

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

У меня есть корневой сервер 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, так что передача данных сама по себе не проблема.

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

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

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

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

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

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

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

Как предотвратить атаки на ваш сервер, в частности 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-адрес идеален, однако блокировка его до x.x.0.0 / 16 лучше, чем 0.0.0.0/0
  • Если возможно, найдите способ подключения без доступа в Интернет, таким образом вы можете запретить весь интернет-трафик для SSH (например, с AWS вы можете получить прямое соединение в обход Интернета, это называется Direct Connect)
  • Используйте программное обеспечение, такое как fail2ban, чтобы отловить любые атаки методом перебора
  • Убедитесь, что ОС всегда в актуальном состоянии, в частности, пакеты безопасности и ssh

Заявка:

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

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

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

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

Я только что собрал это вместе, запускал каждые 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

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

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

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