Я очень взволнован. У меня есть небольшой веб-сервер, на котором размещена страница PhpMyAdmin (на которой находятся некоторые важные базы данных). Вчера я разместил на своем сервере полностью новую веб-страницу (но очень простой HTML-код и страница с таблицей стилей - это не то, о чем мир просто не заботится). Я никому об этом не сказал. Я просто зашел на свой сайт с компьютера моей матери, чтобы показать ей, как выглядит этот сайт. И со вчерашнего дня есть очень-очень странные IP-адреса, которые обращаются к моему веб-серверу (я вижу их в журналах доступа apache2).
Некоторые пытались получить доступ к каталогам, которых даже не существует: Вот журнал
Что это за каталоги / home, / login /, / vpn ??? Как видите, очевидно, что они вернули клиенту 404, но почему он пытался получить к нему доступ? И, на самом деле, это не очень важно, поскольку какой-то другой IP-адрес пытался получить доступ к PhpMyAdmin примерно 40 раз. Вот
И это всего лишь 50% IP этого парня. Как видите, я перепробовал все возможные пароли. К счастью, я не тупой (смеется) и я поставил надежный пароль (12 символов с цифрами, подписями ..), но что, если однажды этот хакер однажды? Потому что я использую один и тот же пароль для всех своих учетных записей на веб-сайте (к счастью, кроме электронной почты). Я попытался увидеть, откуда этот парень. Я искал на iplocation.com Вот результаты:
На моем сервере установлен fail2ban, но он работает только с ssh и apache. Я также искал файл .htpasswd, но я думаю, что это только для страниц apache.
Я очень взволнован, потому что мой сервер очень-очень маленький (четырехъядерный 1,5 ГГц и 4 Гб ОЗУ) и, конечно, он не может обрабатывать DDoS-атаки или что-то еще.
Что я могу сделать? Является ли хорошей идеей установка уровня защиты пароля fail2ban / second? Я также использую этот сервер как VPN и часто использую ssh. Как вы думаете, может ли хакер отслеживать мою активность и перехватывать пароли, которые я ввожу для доступа к VPN или SSH?
Этот пост я очень длинный, и мой английский ужасен, так что спасибо, если не уделили время, чтобы рассмотреть мою проблему
Любая помощь приветствуется
Климент
Частью наличия общедоступного сервера является то, что огромное количество зараженных машин постоянно пробуют огромное количество возможных ресурсов в надежде что-то использовать. Они попробуют использовать множество распространенных URL-адресов (например, /admin/
) в надежде найти уязвимое программное обеспечение. Все это автоматизировано, постоянно и обычно поступает из многих источников. Маловероятно, что вы стали результатом преднамеренной целевой атаки. Вы, вероятно, увидите это сканирование с этого конкретного IP-адреса сейчас и что-то подобное через несколько часов, дней или месяцев с другого IP-адреса. Возможно, вы унаследовали IP-адрес, который хочет атаковать какой-то конкретный человек, но более вероятное объяснение состоит в том, что ваш сервер подключен к сети, и эти огромные наборы компьютеров пытаются атаковать каждый сервер, который они могут найти.
Есть несколько советов, которые помогут вам снизить уязвимость. Включение двухфакторной аутентификации (которую поддерживает phpMyAdmin), запуск минимально возможного количества сервисов (например, не запускайте демон FTP, если вам это не нужно и т. Д.), А также регулярное обновление всего общедоступного программного обеспечения - все это вещи, которые могут помочь. Я не уверен в эффективности fail2ban; некоторые люди говорят, что это хорошо, потому что оно блокирует повторяющиеся попытки и может уменьшить количество попыток взлома вашей системы, другие могут возразить, что, поскольку атаки исходят из распределенного источника, блокировка IP-адресов по одному неэффективна. Лично мне нравится многоуровневая безопасность, и я думаю, что все, что снижает эффективность атаки, может помочь сделать мою систему более защищенной.
Что касается конкретно phpMyAdmin, у меня есть некоторые мысли. На одном из моих серверов я не разрешаю доступ к phpMyAdmin из общедоступного Интернета. Я настраиваю nginx для прослушивания только локальных подключений, затем я использую SSH-туннель для подключения к моему серверу, рассматривая его как поле перехода, поэтому nginx видит входящее соединение как исходящее от localhost. Таким образом, я не выставляю phpMyAdmin напрямую в Интернет. Опять же, я работаю слоями; если я оставлю свой phpMyAdmin незащищенным, тогда атака может попытаться подобрать пароль. Если вы оставите phpMyAdmin открытым, вам следует удалить анонимного пользователя MySQL и проверить все учетные записи пользователей, чтобы убедиться, что они необходимы и имеют надежные пароли. Возможно, вы захотите включить двухфакторную аутентификацию в phpMyAdmin.
Я также рекомендую не запускать VNC (или RDP) из общедоступного интерфейса. Я считаю, что вы должны туннелировать эти соединения через туннель SSH или VPN. Хотя существует множество реализаций каждого из них, и я недостаточно осведомлен о деталях каких-либо, чтобы прокомментировать здесь какое-либо конкретное решение, в целом эти протоколы исторически были сервисом высокого риска.
Вы спросили о fail2ban и сказали, что он работает только с SSH и Apache. Это хорошо; у вас есть другие запущенные службы? Ваш phpMyAdmin обслуживается через Apache (или любой другой веб-сервер, который вы используете), и большинство других страниц в вашем разделе журнала не существуют, так что конец вещей выглядит довольно безопасным. Если вы используете другие сервисы, вам следует позаботиться о том, чтобы их правильно защитить, но пока вы упомянули только SSH и Apache, и если вы предпримете шаги для их защиты, вы будете в гораздо лучшей форме, чем некоторые другие серверы. .
Еще один вариант, который вы могли бы рассмотреть, - это изменить порты, например, запустить SSH на порту 9999 или VNC на порту 10000 (просто чтобы придумать). Эти нестандартные порты в некоторой степени помогут снизить объем получаемого трафика, но, судя по моему опыту, обычно не являются очень сильной линией защиты. Основная причина заключается в том, что злоумышленники, вероятно, проводят полное сканирование портов, а не просто пробуют общие порты. Они могут сканировать все ваши доступные порты, и только злоумышленники приложат минимум усилий. Некоторые считают, что это еще один уровень безопасности. Мне лично этот метод безразличен.
Другой метод, который вы могли бы рассмотреть, называется стук порта. Быстрая версия этого заключается в том, что ваш сервер не будет принимать попытки подключения для служб (таких как SSH или VNC) до тех пор, пока вы сначала не получите доступ к определенному порту или серии портов. Это похоже на секретный стук, используемый для того, чтобы ваш сервер позволил вам войти; для злоумышленников порт VNC будет выглядеть закрытым, но если вы получите к нему доступ в правильной последовательности, вы сможете подключиться. Блокировка портов может быть еще одним инструментом многоуровневого подхода к безопасности. Его настройка требует определенных усилий, но преимущество состоит в том, что ваш сервер может избежать попыток подключения со стороны злоумышленников по большинству протоколов (конечно, вещи, которые вы хотите, чтобы публика обнаружила, например HTTP, будут исключены из правил блокировки портов).
У вас действительно должны быть уникальные надежные пароли для каждой службы. Вы можете использовать менеджер паролей или записную книжку, чтобы отслеживать их, но повторное использование паролей между службами, как правило, является плохой практикой безопасности.
Еще одна вещь, я большой поклонник полного отключения входа по паролю SSH и использования аутентификации на основе ключей. Криптография, связанная с угадыванием закрытого ключа, намного сложнее, чем взлом пароля. Использование аутентификации на основе ключей и отключение входа по паролю станет большим шагом на пути к более безопасному доступу по SSH.
Да, вы можете использовать аутентификацию по ключу, чтобы в конечном итоге усилить SSH.
Вот несколько альтернатив для смягчения атаки: 1. Используйте передачу порта через брандмауэр, чтобы замаскировать порт ssh и vpn. Например, 3390-> 22, а затем забанить 22. Неискушенный злоумышленник обнаружит, что ssh больше не на своем порту, и не будет тратить время на атаку защищенного сервера.
Установите fail2ban, если вы не хотите использовать авторизацию ключей.
Заблокируйте вход root и вместо этого создайте пользователя, с которым вы знакомы - например, имя вашего питомца. Хакер столкнется с проблемой двойного угадывания вместо единственной проблемы. Сложность растет в геометрической прогрессии.
Однако эти два НЕ имеют прямого отношения к вашей проблеме. Основная проблема для вас заключается в том, может ли хакер использовать расширение PHP в качестве ступеньки для получения привилегий root, не зная вашего пароля root. Вы должны внимательно изучить пользователя, которого использует PHP - если он использует root, то стратегия хакера будет успешной, как только он нарушит систему PHP.
Традиционная стратегия включает в себя понижение уровня привилегий, например, предоставление пользователю ограниченных привилегий для выполнения работы. OpenVPN имеет возможность перейти к «никому» после того, как он настроит туннелирование и маршрутизацию, которые разрешено делать только пользователю root. Вы должны изучить, есть ли возможность, что PHP позволяет вам это сделать.
Другой альтернативой является использование SELinux, который блокирует подозрительные действия, даже если PHP не работает. PHP должен делать свою работу, и все, что сверх этого, запрещено.
После того, как вы защитили phpmyadmin, вы можете использовать тюрьму, подобную моей ниже, для запрета всех других крипов. Вы можете просто изменить его под свои нужды
[Definition]
badreqcustom =.*mysql.*|.*backup.*|.*wlwmanifest.*|.*xmlrpc.*|.*sleep.*|.*benchmark.*|.*when.*|.*then.*|.*schema.*|.*else.*|.*author.*
badreq = .*sql.*|.*adminer.*|.*alert.*|.*union.*|.*select.*|.*where.*|.*fetch.*|.*proxy.*
failregex = (?i)^<HOST> -.*"(GET|POST|HEAD|PUT).(?:%(badreq)s|%(badreqcustom)s).*".*".*".*".*".*$
ignoreregex = (?i)^<HOST> -.*"(GET|POST|HEAD|PUT).*(madmin|uid|gclid|/blog/|/photographers-directory/|/amasty_acart).*"$