Olá a todos,
Pediram-me recentemente uma solução que suportasse autenticação centralizada para um servidor de SSL Extender VPN utilizada por um Cliente nosso como POC.
As condições apresentadas foram:
a) Usar os mecanismos mais core de um sistema linux off-the-shelf.
b) Poupar ao máximo na RAM, pois o container servidor de VPN iria correr dentro de um pi-cluster-coiso, portanto nenhum serviço desnecessário a correr e a consumir memoria que não podia.
c) O mais portável possível para outras tecnologias de virtualização/contentorização (?) e que fosse relativamente tolerante a falhas.
Apresentei a solução de utilizar um RedHat IDM / FreeIPA, e utilizar as tools nativas para integração no mecanismo de autenticação, mas pediram-me que fosse ainda um pouco mais baixo, provavelmente pois o POC iria servir de template futuro para outras integrações, que provavelmente não teriam acesso a ditas tools.
Foi nessa altura que optei pelo velho e fidedigno PAM para autenticação, usando o RedHat IDM / FreeIPA, como LDAP Server mas sem os extras que o FreeIPA oferece.
A configuração em si é muito simples:
Em primeiro lugar, é necessário instalar o software necessário e as suas pré dependências. Nota que estou a assumir que já possuem, a semelhança deste Cliente, uma implementação de OCSERV a funcionar.
yum install -y nss-pam-ldapd nscd authconfig wget
Em seguida, iremos adicionar ao container LXC em questão – Centos 7.6 – o certificado da CA do RedHat IDM / FreeIPA, colocando-o na trusted pool de CA’s válidos:
wget -O /tmp/ca.crt http://freeipa01.internal.domain/ipa/config/ca.crt openssl x509 -in /tmp/ca.crt -out /etc/pki/ca-trust/source/anchors/freeipa.internal.domain.pem -outform PEM update-ca-trust
Em seguida, será necessário configurar o cliente de openldap para se conectar em SSL ao FreeIPA. Sim, sei que o RedHat IDM / FreeIPA nativamente inicia um StartTLS mas este tipo de ligação foi um pré requisito.
Para satisfazer este pedido, é necessário configurar o ficheiro /etc/openldap/ldap.conf
SASL_NOCANON on TLS_CACERT /etc/pki/trust/anchors/freeipa.internal.domain.pem URI ldaps://freeipa.internal.domain:636 BASE dc=internal,dc=domain
Em seguida, e através do authconfig-tui, será necessário indicar ao sistema onde obter a listagem de utilizadores e de onde validar as credenciais:
De notar o Use LDAP no user information, e o Use Shadow, and LDAP no caso da tab de authentication.
Em seguida, é necessário configurar o componente nss-pam-ldapd em si:
# cat /etc/nslcd.conf uri ldaps://freeipa.internal.domain:636 base cn=compat,dc=internal,dc=domain scope sub base group cn=$GRUPO_DO_FREEIPA_PARA_ACESSO,cn=groups,cn=compat,dc=internal,dc=domain base passwd cn=users,cn=compat,dc=internal,dc=domain base shadow cn=users,cn=compat,dc=internal,dc=domain binddn uid=utilizador_para_validacoes_fazendo_bind,cn=users,cn=accounts,dc=internal,dc=domain bindpw 12345678901234567890
Será necessário substituírem a variável $GRUPO_DO_FREEIPA pelo grupo LDAP que irá ser permitido aceder via a VPN do OCSERV.
É um grupo LDAP normal, dentro do RedHat IDM / FreeIPA, e é fundamental que seja estabelecido para garantir granularidade nos acessos (quem acede ao que).
Será necessário igualmente um bind user dentro do LDAP que efetue bind ao RedHat IDM / FreeIPA, para validar a autenticação. Este utilizador *não* necessita de fazer parte do grupo acima indicado para granularidade.
Em seguida é altura de compor o ficheiro de PAM para o OCSERV.
Originalmente, o packager que construiu o pacote incluiu um template que pode ser facilmente modificado para servir o nosso propósito:
# cat /etc/pam.d/ocserv #%PAM-1.0 auth include password-auth account required pam_nologin.so session include password-auth account sufficient pam_succeed_if.so quiet_success user ingroup $GRUPO_DO_FREEIPA_PARA_ACESSO
Finalmente, chegou a altura de garantir o restart de todos os processos no boot, através do systemctl:
systemctl enable ocserv
systemctl enable nslcd
systemctl enable nscd
systemctl restart nscd
systemctl restart nslcd
systemctl restart ocserv
Nota que caso a memória no servidor de OCSERV seja extremamente at a premium, podem não utilizar o NSCD. Com penalização na performance na altura da autenticação.
O processo em si é extremamente simples, com ferramentas corriqueiras e pode ser utilizado em varias aplicações como método de autenticação.
Pessoalmente preferira utilizar um método como descrito na WIKI do OCSERV, através de tickets Kerberos, mas isso já seria acima do nível de simplicidade pedido.
Como cuidados especiais a ter, destacam-se uma gestão cuidada do vosso RedHat IDM / FreeIPA, e atenção para o vosso certificado de CA não expirar.
Caso tenham duvidas, ou queiram fazer reparos, já sabem onde me encontrar.
Até breve.
Nuno