[...]Может ли описанная настройка (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), но это потенциально намного больше работы.