Depois que vários sites em um host foram hackeados ao mesmo tempo, comecei a pesquisar alguns anos atrás e li em algumas perguntas do SF uma solução para o meu problema: pools PHP-FPM
Basicamente, esta foi a estrutura que projetei depois disto:
E por muito tempo eu me senti muito confiante de que tudo estava muito mais seguro do que antes, porque se um site fosse hackeado de alguma forma, isso nunca afetaria os outros sites no mesmo host.
Mas alguns meses atrás, comecei a falar com alguns caras do docker, e eles me disseram que eu deveria começar a experimentar com contêineres e migrar minha solução para um sistema dockerizado completo. Eles me sugeriram usar o Caddy. Mas depois de ler a documentação do Caddy, notei que a nova estrutura se parece com isso:
Basicamente, o que posso ver é que o servidor Caddy tem acesso irrestrito total a todos os arquivos. Diferentemente do Nginx anterior, em que tudo parecia compartimentado, aqui parece que se houver um problema de segurança no servidor Caddy, tudo pode ser comprometido.
Eu entendo que na maioria das vezes, a maioria dos hacks vem de erros de codificação nos pontos finais, o que significa que os elos mais fracos são os servidores docker FPM que são compartimentados. Mas se o Caddy for comprometido, ele vazará informações completas de todos os volumes
Neste ponto, tenho duas perguntas:
Já que muitas pessoas estão defendendo que o Docker é uma das opções mais seguras, estou esquecendo de algo? Sinto que isso é um pouco menos seguro do que meu sistema anterior (embora seja verdade que se todo o sistema de arquivos em um único host for comprometido, então não importa se há uma limitação de permissão de arquivo no host, então, nesse aspecto, é verdade que o Docker é mais seguro)
Há alguma outra prática para tornar a configuração Docker/Caddy/FPM mais segura da perspectiva de acesso a arquivos/PHP-software-dia-zero além de manter o sistema atualizado? Atualmente, tenho sockets de arquivo entre Caddy e FPM, mas sinto que ter todos os arquivos em apenas um host expõe muito o todo.
Encontrei uma ideia para resolver esse problema. Minha principal preocupação era que o Caddy ou qualquer outro proxy reverso acessasse arquivos PHP devido a uma violação de segurança.
Se houvesse um problema de segurança em qualquer um dos contêineres FPM, isso não importaria muito porque afetaria apenas um contêiner. Mas se a violação de segurança impactasse o contêiner do proxy reverso, todos os arquivos compartilhados de todos os contêineres FPM seriam comprometidos.
Solução: Usar variáveis de ambiente docker para qualquer coisa relacionada a elementos de configuração (principalmente segredos, como os de SQL). Então os arquivos PHP no contêiner Reverse Proxy seriam tornados completamente inúteis de uma perspectiva de extração de arquivo.
Na verdade, a menos que eu esteja errado, isso tornará tudo ainda mais seguro do que minha configuração anterior sem Docker.