
Como alguém com conhecimento bastante limitado sobre segurança de rede, gostaria de saber: É «seguro» executar (1) um servidor MySQL, (2) alguns contêineres docker com serviços arbitrários e (3) um apache ou nginx como DNS reverso , em uma LAN doméstica padrão e expô-los à Internet? Minha configuração de rede é bastante simples: um roteador se conecta à internet, todos os dispositivos da casa se conectam diretamente a esse roteador. Posso usar o encaminhamento de porta e DDNS para permitir que qualquer dispositivo na LAN se torne um servidor. Atualmente não há DMZ configurado e não estou usando um firewall físico.
É seguro encaminhar portas como 80 para dispositivos nessa LAN ou devo evitar registrar o IP público do roteador em um DDNS? Em outras palavras: A configuração descrita pode (1) tornar vulneráveis os dispositivos, para os quais as portas são encaminhadas (injeção de malware, roubo de dados, …) ou mesmo (2) tornar vulneráveis outros dispositivos na LAN, que não têm nada a ver? fazer com os servidores?
Claro, este não é um ambiente de produção. Costumo trabalhar em vários projetos ao mesmo tempo, que desejo alcançar de fora da minha casa, e não quero pagar grandes quantias de dinheiro por AWS, GCP, etc. Então, eu queria ter servidores para MySQL, Mongo , Neo4J, etc. sempre em funcionamento, e também implantar alguns de meus aplicativos da web para demonstração pessoal e fins de teste.
Responder1
[...] A configuração descrita pode (1) tornar vulneráveis os dispositivos, para os quais as portas são encaminhadas (injeção de malware, roubo de dados, …) ou ainda (2) tornar vulneráveis outros dispositivos na LAN, que não possuem nada a ver com os servidores?
Sim e sim.
É seguro[?]
Esta é provavelmente uma opinião pessoal, dependendo do que você chama de "seguro". Em termos práticos, contudo, há provavelmente duas coisas a considerar:
Servidores modernos sãoconstantementesob uma enxurrada de scripts de exploração automatizados (que geralmente é a forma como a maioria dos invasores visa as vítimas).
A maioria dessas ameaças pode ser atenuada com atualizações regulares de software, um mínimo de precaução e algumas configurações de segurança adequadas (que você pode pesquisar razoavelmente).
Resumindo, se você seguir esse caminho, estará jogando como administrador de sistema amador para sua rede (provavelmente lendo logs, verificando atualizações de software, etc.). Se você não se importa em assumir essa função, pode ficar relativamente seguro com uma configuração doméstica. Caso contrário, os serviços tradicionais de terceiros podem ser mais adequados para você.
Minha configuração de rede é bastante simples: um roteador se conecta à internet, todos os dispositivos da casa se conectam diretamente a esse roteador.
Isso pode ser relativamente seguro com as configurações corretas de firewall em vigor. Dito isto, você pode querer dedicar um PC barato (um antigo ou talvez até um Raspberry Pi) para fazer tarefas de firewall com algo comopfsense.
É seguro encaminhar portas como 80 para dispositivos nessa LAN ou devo evitar registrar o IP público do roteador em um DDNS?
Isso é reconhecidamente anedótico, mas como tive uma configuração extremamente semelhante durante anos para testes e uso pessoal, nunca tive problemas com segurança.
Em relação especificamente ao Apache/Nginx e ao MySQL, apenas algumas pequenas informações:
Certifique-se de que o Apache/Nginx não esteja agindo como um proxy aberto (que está sujeito a abusos e torna seu servidor um alvo). Este perigo geralmente é mitigado com alguns comandos simples de configuração (como aqueles detalhados aqui para Apache).
Para o Apache, eu recomendaria desabilitar os 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 os logs, este é um dos softwares mais atacados que já vi (provavelmente porque a injeção de SQL pode ser potencialmente muito poderosa). Qualquer aplicativo da web que se conecte a um banco de dados deve ser devidamente protegido, mas a execução de ferramentas como essas está (potencialmente) causando problemas.
Observe que o que foi dito acima anda de mãos dadas com a limitação do acesso ao servidor de banco de dados apenas a computadores locais selecionados e com permissões limitadas de banco de dados.
Os ataques de injeção de SQL podem ajudar a ser atenuados pelos Web Application Firewalls (WAF). Serviços de terceiros, como CloudFlare, oferecem esses tipos de serviços (atualmente US$ 20/mês com outros recursos também) para uma solução do tipo "configure e esqueça". No entanto, é bastante fácil adicionar esse tipo de recurso via Apache ou Nginx com módulos comoModSegurança.
Como última palavra, os princípios básicos para proteger seu servidor web e MySQL estão bem documentados e geralmente bastante simples de pesquisar, por exemplo, "Como faço para proteger o Apache no Linux" ou "Como posso evitar ataques de injeção de SQL". Ambos trazem dicas comuns que impedirão que a maioria dos usuários mal-intencionados mexam em seus sistemas.
Você pode ser sofisticado, é claro, e tentar adicionar segurança extra (como uma verdadeira DMZ), mas isso potencialmente dá muito mais trabalho.