[...]Can the described setup (1) make the devices vulnerable, to which ports are forwarded (malware injection, data theft, …) or even (2) make other devices on the LAN vulnerable, that don’t have anything to do with the servers?
Sim e sim.
Is it safe[?]
Esta é provavelmente uma opinião pessoal, dependendo do que você chama de "seguro". Em termos práticos, no entanto, provavelmente há duas coisas a serem consideradas:
-
Os servidores modernos estão constantemente sob uma barragem de scripts de exploração automatizados (que geralmente é o modo como a maioria dos invasores tem como alvo as vítimas).
-
A maioria dessas ameaças pode ser mitigada com atualizações regulares de software, uma quantidade mínima de precaução e algumas configurações de segurança adequadas (que você pode pesquisar razoavelmente).
Resumindo, se você seguir esse caminho, você estará jogando sysadmin amadores para a sua rede (provavelmente lendo logs, verificando se há atualizações de software, etc.). Se você não se importa em assumir esse papel, pode estar relativamente seguro com uma configuração inicial. Caso contrário, os serviços tradicionais de terceiros podem ser mais sua velocidade.
My network setup is quite simple: one router, connects to the internet, all devices in the house directly connect to that router.
Isso pode ser relativamente seguro com as configurações de firewall corretas no lugar. Dito isso, você pode querer dedicar um PC barato (um antigo ou talvez até mesmo um Raspberry Pi) a um serviço de firewall com algo como pfsense .
Is it safe to forward ports like 80 to devices in such a LAN, or should I even refrain from registering the router’s public IP at a DDNS?
Isto é reconhecidamente anedótico, mas tendo tido uma configuração extremamente semelhante por anos para testes e uso pessoal, nunca tive um problema com a segurança.
Em relação ao Apache / Nginx e MySQL especificamente, assim como alguns pequenos detalhes:
-
Certifique-se de que o Apache / Nginx não esteja atuando como um proxy aberto (que está pronto para o abuso e faz do seu servidor um alvo). Esse perigo geralmente é mitigado com alguns comandos de configuração simples ( como os detalhados aqui para o Apache ).
-
Para o Apache, eu recomendaria a desabilitação de arquivos .htaccess.
-
Para o MySQL, um grande problema é usar ferramentas de administração baseadas em navegador, como o phpMyAdmin. Junto com o WordPress, ao revisar logs, este é um dos softwares mais atacados que já vi (provavelmente porque a injeção de SQL pode ser potencialmente tão poderosa). Qualquer aplicativo da web que se conecte a um banco de dados deve ser protegido adequadamente, mas executar ferramentas como essas está (potencialmente) pedindo problemas.
-
Observe que o acima mencionado anda de mãos dadas com a limitação do acesso ao servidor de banco de dados somente a computadores locais selecionados e permissões de banco de dados limitadas.
-
Os ataques de injeção de SQL podem ajudar a serem atenuados pelos WAF (Web Application Firewalls). Os serviços de terceiros, como o CloudFlare, oferecem esses tipos de serviços ( atualmente US $ 20 / mês com outros recursos também ) para um "set e esqueça "solução. No entanto, é bem fácil adicionar esse tipo de recurso por meio do Apache ou do Nginx com módulos como o ModSecurity .
Como última palavra, os princípios básicos para proteger seu servidor web e MySQL são bem documentados e geralmente bastante simples de pesquisar, por exemplo, "Como eu seguro o Apache no Linux" ou "Como eu evito ataques de injeção de SQL". Ambos trazem dicas comuns que impedirão a maioria dos usuários maliciosos de mexer com seus sistemas.
Você pode ter uma fantasia, é claro, e tentar adicionar segurança extra (como uma DMZ verdadeira), mas isso é potencialmente muito mais trabalhoso.