Quem utiliza firewalls open-source sabe que implementar regras baseadas em usuários (e não apenas em IPs) costuma ser um desafio. Até o momento, as soluções de mercado para essa finalidade são proprietárias e implicam em custo adicional.
A principal dificuldade reside no fato de que não há um meio nativo simples para o firewall identificar de qual IP um usuário específico logou – especialmente em ambientes dinâmicos onde um usuário pode alternar entre múltiplas estações, o tempo de vida do DHCP é pequeno e não se deseja fazer reservas de endereço. A alternativa comum é o uso de IPs fixos, o que gera uma carga excessiva de gestão e aumenta riscos de spoofing.
Para resolver isso, desenvolvi o int_user_login. O projeto captura dados de autenticação e os disponibiliza via um webservice simplificado, permitindo que o firewall consulte periodicamente quais IPs pertencem a quais usuários.
Comparando com as soluções comerciais, o funcionamento é exatamente o mesmo: se vários usuários logarem do mesmo computador, o agente de identidade fica monitorando o log do Active Directory, recebe o endereço e o reporta para o firewall. Isso pode resultar na combinação das liberações das duas contas. No caso do logout do usuário, o agente precisa verificar diretamente na estação de trabalho para saber se a sessão da conta está ativa ou foi finalizada, caso finalizada reporta a situação e o firewall toma a ação necessária. É possível que futuramente essa funcionalidade seja incluída também, porém por enquanto o tempo da sessão é pré-definido – pode ser alterado – e sempre que for detectada atividade da conta o tempo é estendido.
Todo o desenvolvimento foi feito em scripts BASH e PHP. A parte da extração dos dados de login é toda em BASH e é executado em processos batch por questões de simplicidade e facilidade de expansão das funcionalidade. A interface que trata os dados no banco de de dados está em PHP. Tudo foi criado e testado em AlmaLinux 10.
Atualmente o código somente atende ambientes com Active Directory, porém será expandido também para ambientes Linux para os casos de login remoto como o SSH.
Quem quiser testar, usar, dar uma simples olhada no código ou contribuir com ideias, o link do GitHub está aqui!