Как остановить / предотвратить брутфорс 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, поэтому сама передача данных, похоже, не является проблемой.
На данный момент я никак не могу получить доступ к серверу.
Мой вопрос: как я могу получить доступ снова, как я могу подавить эту атаку и предотвратить последующие атаки?
5 ответов
Как получить доступ?
Непонятно, почему вы не можете получить доступ к своей учетной записи.
Если ваша машина подвергается атакам или высокой нагрузке, вам следует поговорить с вашим провайдером об ограничении доступа (ограничения 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)
как я могу подавить эту атаку и предотвратить последующие атаки
Обычно я меняю 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
Автоматизированное решение для 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
Это мое альтернативное решение для SSH-атак. Идея состоит в том, чтобы продолжать закрывать демон SSH, если он не используется. Нет открытого порта, нет атаки. Можешь попробовать. Это открытый источник https://github.com/indy99/nnet_port_guard