Я новичок в сетевом администрировании, поэтому учтите, что у меня еще нет опыта.
У меня есть корневой сервер 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:
Заявка:
как я могу подавить эту атаку и предотвратить последующие атаки
Обычно я меняю порт ssh по умолчанию с 22 на другой, например 1122. Это предотвращает множество автоматических атак со стороны бота, но простое сканирование портов может обнаружить его. Тем не мение:
vi /etc/ssh/sshd_config
и редактировать Порт 22 к Порт 1122, Но этого недостаточно.
я использую 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