
Как человек с ограниченными знаниями о сетевой безопасности, я хотел бы знать: «безопасно» ли запускать (1) сервер MySQL, (2) несколько контейнеров docker с произвольными службами и (3) apache или nginx в качестве обратного DNS в стандартной домашней локальной сети и выставлять их в Интернет? Моя сетевая настройка довольно проста: один маршрутизатор подключается к Интернету, все устройства в доме напрямую подключаются к этому маршрутизатору. Я могу использовать переадресацию портов и DDNS, чтобы любое устройство в локальной сети стало сервером. В настоящее время DMZ не настроена, и я не использую физический брандмауэр.
Безопасно ли перенаправлять порты типа 80 на устройства в такой локальной сети, или мне вообще следует воздержаться от регистрации публичного IP маршрутизатора в DDNS? Другими словами: может ли описанная настройка (1) сделать уязвимыми устройства, на которые перенаправляются порты (внедрение вредоносного ПО, кража данных, ...) или даже (2) сделать уязвимыми другие устройства в локальной сети, которые не имеют никакого отношения к серверам?
Конечно, это не производственная среда. Я просто часто работаю над несколькими проектами одновременно, к которым хочу иметь доступ извне дома, и не хочу платить большие деньги за AWS, GCP и т. д. Поэтому я хотел, чтобы серверы для MySQL, Mongo, Neo4J и т. д. всегда были в рабочем состоянии, а также развернуть некоторые из моих веб-приложений для личных демонстрационных и тестовых целей.
решение1
[...]Может ли описанная настройка (1) сделать уязвимыми устройства, на которые переадресованы порты (внедрение вредоносного ПО, кража данных и т. д.) или даже (2) сделать уязвимыми другие устройства в локальной сети, которые не имеют никакого отношения к серверам?
Да и да.
Это безопасно[?]
Это, вероятно, личное мнение, в зависимости от того, что вы называете "безопасным". Однако на практике, вероятно, есть две вещи, которые следует учитывать:
Современные серверыпостояннопод шквалом автоматизированных скриптов-эксплойтов (именно так большинство злоумышленников обычно выбирают своих жертв).
Большинство этих угроз можно устранить с помощью регулярных обновлений программного обеспечения, минимальных мер предосторожности и некоторых правильных настроек безопасности (которые вы можете изучить).
В итоге, если вы пойдете по этому пути, вы будете играть роль любительского системного администратора для своей сети (вероятно, читая логи, проверяя обновления ПО и т. д.). Если вы не против взять на себя эту роль, вы можете быть в относительной безопасности с домашней настройкой. В противном случае традиционные сторонние сервисы могут быть более быстрыми.
Моя сетевая конфигурация довольно проста: один маршрутизатор подключается к Интернету, все устройства в доме напрямую подключаются к этому маршрутизатору.
Это может быть относительно безопасно с правильными настройками брандмауэра. Тем не менее, вы можете захотеть выделить дешевый ПК (старый или, может быть, даже Raspberry Pi) для выполнения функций брандмауэра с чем-то вродеpfsense.
Безопасно ли перенаправлять порты типа 80 на устройства в такой локальной сети или мне вообще следует воздержаться от регистрации публичного IP-адреса маршрутизатора в DDNS?
Это, конечно, анекдот, но поскольку я годами использовал очень похожую установку для тестирования и личного использования, у меня никогда не возникало проблем с безопасностью.
Что касается конкретно Apache/Nginx и MySQL, то вот несколько небольших интересных фактов:
Убедитесь, что Apache/Nginx не действует как открытый прокси-сервер (что может стать причиной злоупотреблений и сделать ваш сервер мишенью). Эта опасность обычно смягчается с помощью некоторых простых команд конфигурации (такие как те, которые подробно описаны здесь для Apache).
Для Apache я бы рекомендовал отключить файлы .htaccess.
Для MySQL одной из больших проблем является использование инструментов администрирования на основе браузера, таких как phpMyAdmin. Наряду с WordPress, при просмотре журналов, это одно из наиболее атакованных программ, которые я видел (вероятно, потому что SQL-инъекция может быть потенциально очень мощной). Любое веб-приложение, подключающееся к базе данных, должно быть надлежащим образом защищено, но запуск таких инструментов (потенциально) напрашивается на неприятности.
Обратите внимание, что вышеизложенное идет рука об руку с ограничением доступа к серверу базы данных только для выбранных локальных компьютеров и ограниченными разрешениями на доступ к базе данных.
Атаки SQL-инъекции могут быть смягчены с помощью брандмауэров веб-приложений (WAF). Сторонние сервисы, такие как CloudFlare, предлагают такие сервисы (в настоящее время 20 долларов в месяц с другими функциями) для решения "установил и забыл". Однако довольно легко добавить такую функцию самостоятельно через Apache или Nginx с такими модулями, какModSecurity.
В заключение, основы защиты вашего веб-сервера и MySQL хорошо документированы и обычно довольно просты для изучения, например, «Как защитить Apache на Linux» или «Как предотвратить атаки с использованием SQL-инъекций». Оба они содержат общие советы, которые не позволят большинству злоумышленников вмешиваться в работу ваших систем.
Конечно, вы можете проявить фантазию и попытаться добавить дополнительную безопасность (например, настоящую DMZ), но это потенциально потребует гораздо больше работы.