Fase 1 - Configs básicas
- instalar linux-rpm-based (testes com RockyLinux 8. A versão 9 não foi compatível ainda com google-auth)
- yum update
- install net-tools
- install vim
- editar /etc/hosts e adcionar o host do ad
Fase 2 - Entrando no AD (opcional: facilitar login dos usuários para pegar o google-auth) - oficial RockyLinux
- ajustar /etc/resolv.conf para o dns interno
- se não funcionar, usar nmcli: nmcli con mod ipv4.dns 10.19.87.200
- evitar o networkmanager fuçar no resolv.conf: sudo chattr +i /etc/resolv.conf
- ajustar horário: timedatectl set-time 13:27 (opcional: ajustar ntpclient)
- instalar pacotes para conexão com AD: dnf install realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
- testar conectividade com ad utilizando realm discover ap701.com.br
- entrar no domínio: realm join ap701.com.br
- teste de conexão utilizando o próprio host: ssh -l x950125sanepar.com.br@caracu
- configurar para não precisar usar o domínio no login: vi /etc/sssd/sssd.conf no final da sessão [sssd], adicionar a linha default_domain_suffix = ad.company.local
- para a configuração acima fazer efeito, reinicie o sssd: systemctl restart sssd
Fase 3 - RadiusLDAP - instalar os pacotes freeradius-ldap, epel-release, google-authenticator (incluso após epel), libtool, qrencode-libs.x86_64 - https://habr.com/ru/post/516362/
- editar /etc/raddb/radiusd.conf - na versão Rocky 8, são as linhas503 e 504: alterar user = root e user = root, respectivamente
- criar o link do módulo ldap para o radius: ln -sf /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
- criar o link do módulo pam para o radius: ln -sf /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/pam
- editar o arquivo /etc/raddb/mods-enabled/ldap conforme exemplo anexo (arquivo ldapDEB: renomear apenas para ldap, ou apenas copiar todo o conteúdo e substiuir no arquivo original)
- editar o arquivo /etc/raddb/sites-enabled/default (linha 520 descomentar pam) e /etc/raddb/sites-enabled/inner-tunnel (linha 228 descomentar pam e também linhas 533. 534 e 535, referente a ldap ),
- editar o arquivo /etc/raddb/clients.conf e adicionar no final do arquivo o seguinte conteúdo:
#################################
client vs-fw_vpn {
ipaddr = 10.2022.22 ###IP do cluster/gateway
secret = password ###senha a ser configurada no cliente
require_message_authenticator = no
nas_type = other
}
#################################
- criar um grupo "radius-disabled"
- groupadd radius-disabled
- editar o arquivo /etc/raddb/users nas linhas que seguem abaixo. Serve para adicionar usuários que não podem autenticar no Radius:
#################################
DEFAULT Group == "radius-disabled", Auth-Type := Reject
Reply-Message = "Your account has been disabled."
DEFAULT Auth-Type := PAM
#################################
- editar arquivo /etc/pam.d/radiusd e substituir pelo seguinte conteúdo:
#################################
auth required pam_google_authenticator.so
account required pam_unix.so audit
account required pam_permit.so
#################################
- Para debugs do radiusd após as configurações acima:
- radiusd -XXX
Considerações:
- Desligamos o SELinux. Motivo: estava rodando corretamente no modo debug, mas no modo normal apresentava erro por falta de permissão do radiusd. Para evitar problemas, desativamos o SELinux:
- Editar o arquivo /etc/selinux/config
- Alterar SELINUX=enforcing para SELINUX=disabled
- reboot ou então ajustar on-the-fly: setenforce 0 (para apenas consultar o status do SELinux, pode dar o comando getenforce)
- Cuidar o firewall nativo do RedHat!!
- Acabamos criando regras específicas no servidor radius:
- firewall-cmd --add-service radius --permanent
- firewall-cmd --reload
- firewall-cmd --list-all
Importante:
- Após os debugs e ajustes, habilite o radiusd para iniciar direto com o sistema:
- systemctl enable radiusd
- systemctl start radiusd
Fase 4 - Configurar CheckPoint como cliente Radius - Aqui, post do Sandeep_sharma
- tudo agora é via smartconsole
- criar um objeto tipo host com o ip do servidor radius
- criar um objeto tipo RADIUS (more / server / RADIUS): host criado acima; service new-radius; shared secret é a senha criada no arquivo clients.conf; version 2
- editar o objeto que representa o servidor de vpn client: vpn client / authentication. Crie um perfil com autenticação de usuario e senha, aponte para a base ldap. como segundo fator, crie autenticação tipo radius e aponte para o servidor criado na etapa anterior.
- instale regras
Fase 5 - Configurar VPN Client para usar o perfil
- aqui vai depender de como quer utilizar. se quiser utilizar um perfil único e obrigar todos a usarem google-auth, terá que remover todos os perfis. caso contrário, apenas acrescente um perfil novo e selecione nas propriedades do cliente de vpn o perfil criado acima
Fase 6 - Configurar o Google-Authenticator para o usuário final
- sugestão1 utilizar o próprio servidor radius para login e configurar o google-auth de forma individual/ssh:
- logar com o usuário de domínio na estação e executar o comando google-authenticator e seguir as instruções na tela
- Se não quiser utilizar os comandos interativos, pode usar o "google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30" e seguir com a configuração no celular
- sugestão2 é utilizar o acesso a estação radius via web com o shellinabox - https://help.ubuntu.com/commu para acessar o servidor via web
Ajustes gerais para deploy de usuários existentes e novos:
- É possível fazer um script para criar um perfil existente (criar somente a pasta home do usuário):
- #mkhomedir_helper user@dominio.com.br 0077 ### aqui fazemos um clone da home sem o usuário precisar logar, já ajustando o perfil corretamente, a próxima etapa é o comando abaixo:
- #su j011463 -c "echo -1 | google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30" ### Será criado o arquivo .google-authenticator com o conteúdo da validação da chave e os códigos emergenciais
ERROS ENCONTRADOS
Thu Aug 4 03:30:15 2022 : Error: Failed binding to auth address 127.0.0.1 port 18120 bound to server inner-tunnel: Address already in use
Thu Aug 4 03:30:15 2022 : Error: /etc/freeradius/3.0/sites-enabled/inner-tunnel[33]: Error binding to port for 127.0.0.1 port 18120
root@freer:/etc/freeradius/3.0# netstat -tulp | grep "18120"
udp 0 0 localhost:18120 0.0.0.0:* 18621/freeradius
root@freer:/etc/freeradius/3.0# kill 18621
root@freer:/etc/freeradius/3.0# netstat -tulp | grep "18120"
No Auth-Type found: rejecting the user via Post-Auth-Type = Reject
- Havia faltado a etapa de configurar o arquivo /etc/raddb/users
Wed Aug 10 10:51:38 2022 : Error: Unable to check file "/etc/raddb/certs/server.pem": No such file or directory
Wed Aug 10 10:51:38 2022 : Error: /etc/raddb/mods-enabled/eap[183]: Failed parsing configuration item "private_key_file"
Wed Aug 10 10:51:38 2022 : Error: rlm_eap_tls: Failed initializing SSL context
Wed Aug 10 10:51:38 2022 : Error: rlm_eap (EAP): Failed to initialise rlm_eap_tls
Wed Aug 10 10:51:38 2022 : Error: /etc/raddb/mods-enabled/eap[14]: Instantiation failed for module "eap"
- Faltou rodar os certificados iniciais para o radius:
cd /etc/raddb/certs
./bootstrap
https://stackoverflow.com/questions/37906897/error-in-creating-certificates-for-eap-in-freeradius
POSSÍVEIS AJUSTES FUTUROS
Ajustar o SELinux para permitir o radiusd rodar:
Exemplo caso precise liberara alguma outra porta no firewall local:
firewall-cmd --permanent --zone=public --add-port=4200/tcp
Comandos para o google-auth:
COISAS QUE NÃO DERAM CERTO
Fase 2 - Entrando no AD (opcional:facilitar login dos usuários para pegar o google-auth) - https://www.vivaolinux.com.br/artigo/Integrando-Servidores-Linux-no-Active-Directory-com-Samba#:~:text=Ingressar%20M%C3%A1quina%20no%20ACTIVE%20DIRECTORY,um%20usu%C3%A1rio%20administrador%20da%20rede.&text=Digite%20a%20senha%20do%20usu%C3%A1rio,ser%C3%A1%20adicionado%20no%20Active%20Directory.
- yum install samba
- yum install sssd
- yum install epel-release
- yum install pam_krb5.x86_64
- adicionar dns do domínio no arquivo /etc/resolv.conf
############
############
shellinabox: funciona bem, mas não foi necessário ajustes e instalação
Caso seja necessário novamente, basta realizar o procedimento abaixo:
https://www.jvmhost.com/articles/directadmin-shellinabox-plugin/
############