Expondo Serviços na Web com Segurança Industrial usando Open Source
Introdução:
Neste artigo, exploraremos como expor serviços na internet de forma segura e robusta, utilizando ferramentas open source certificadas, como o Keycloak e o mod_auth_openidc do Apache, criando uma solução de Single Sign-On (SSO) eficiente e centralizada.
A Jornada:
Ao decidir expor meus serviços pessoais na web, enfrentei o desafio de garantir a segurança dos meus dados e a integridade da minha casa - literamente - já que existem diversas automações controladas por ESP8266s. Outros serviços são alternativas self-hosted as assinaturas tradicionais como calendar, notion, dropbox, netflix, spotify.
São diversas aplicações rodando em diversos hardwares que fui codificando ou configurando ao longo da última decada, sempre acessados apenas via LAN, devido as fortes preocupações com a segurança. Enquanto alguns serviços são extramamente criticos em relação a privacidade e integridade dos dados, a realidade é que grande maioria não é.
O Fluxo:
Apenas a porta 443 esta disponivel em meu endereço IP público. O roteador vai direcionar todas as requisões à uma máquina que não tem qualquer dado sensível e roda o Nginx. Antes de encaminhar os pacotes ao serviço em questão, o nginx irá através da diretiva auth_request, autenticar e autorizar todas as requisões utilziando um endpoint exposto pelo mod_auth_openidc do Apache, que por sua vez utiliza o Keycloak como provedor de identidade. Apenas requisições devidamente autorizadas são encaminhadas ao serviço, todas as outras conexões são encerradas pelo Nginx.
A Segurança:
O nginx e o mod_auth_openidc autenticam e autorizam cada requisição antes de alcançar os serviços. Isso elimina a necessidade de cada serviço ter sua própria autenticação, permitindo a implementação do Keycloak como uma solução SSO robusta e centralizada. Além disso, a solução permite aplicar diversas regras baseadas em 'claims' e 'roles', permitindo, por exemplo, compartilhar minhas bibliotecas de filmes e músicas com amigos, sem me preocupar que eles terão acesso aos meus documentos pessoais.
A Escolha pela Confiabilidade e Robustez:
Notem que optei por ferramentas certificadas pela OpenID Foundation, como o Keycloak e o mod_auth_openidc para assegurar a confiabilidade e segurança na exposição dos serviços na internet. Essa escolha, apesar de complexidade (3 servidores web diferentes só para fazer um login) proporcionou uma solução unificada e segura, permitindo a exposição de diversos serviços sem ter que me preocupar com a segurança de cada um deles. Apesar da complexidade ainda é uma solução extremamente eficiente pois são ferramentas que utilizam todo o tipo de estratégias de otimizações possíveis.
Esta solução garante confiabilidade ao utilizar ferramentas e um fluxo de autenticação que já foram escrutinados ao extremo, alcançando um nível de segurança que soluções mais simples jamais poderiam oferecer.