Я новичок в сетевом администрировании, поэтому, пожалуйста, учтите, что у меня пока нет большого опыта.
У меня есть корневой сервер 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 МБ в час. У меня 100 Мбит Backbone, так что сама передача данных, похоже, не является проблемой.
На данный момент я никак не могу получить доступ к серверу.
Мой вопрос: как мне снова получить доступ, как я могу подавить эту атаку и предотвратить последующие атаки?
решение1
Как получить доступ?
Непонятно, почему вы не можете получить доступ к своему аккаунту.
Если ваш компьютер подвергся атаке или высокой нагрузке, вам следует поговорить с вашим провайдером об ограничении доступа (ограничения по 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 для веб-консоли выявит все уязвимости базового приложения и создаст дополнительный барьер для входа
- Заблокируйте права доступа к файлам. «Папки загрузки» печально известны тем, что являются точками входа для всякого рода гадостей.
- Рассмотрите возможность размещения вашего приложения в частной сети и предоставления доступа только к внешнему балансировщику нагрузки и Jumpbox (это типичная настройка в AWS с использованием VPC).
решение2
как я могу подавить эту атаку и предотвратить последующие атаки
Обычно я меняю порт ssh по умолчанию с 22 на другой, например 1122. Это предотвращает многие автоматические атаки со стороны ботов, но простое сканирование портов может их обнаружить. В любом случае:
vi /etc/ssh/sshd_config
и редактироватьПорт 22кПорт 1122, Но этого недостаточно.
Автоматические правила IPTables при брутфорсе
я используюlog2iptables https://github.com/theMiddleBlue/log2iptablesвместо Fail2ban, потому что это простой скрипт Bash, который разбирает любой файл журнала с помощью регулярного выражения и выполняет iptables. Например, когда происходит 5 совпадений, log2iptables отбрасывает определенный ip-адрес. Это круто, потому что использует API Telegram и может отправить мне сообщение на мой телефон, когда он находит проблему :)
надеюсь это поможет!
решение3
Я только что собрал это, запускаю каждые 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
решение4
Это мое альтернативное решение для атак SSH. Идея в том, чтобы закрывать демон SSH, если он не используется. Нет открытого порта — нет атаки. Можете попробовать. Он с открытым исходным кодом https://github.com/indy99/nnet_port_guard