Nesse post vou mostrar como integrar o FreeRadius ao AD a fim de autenticar clientes M$ windows XP de forma transparente ao usuário.
Utilizando-se um switch compatível com 802.1X e o servidor FreeRadius é possível realizar o controle de acesso às portas do switch mediante autenticação no AD, dessa forma apenas máquinas e usuários pertencentes ao domínio terão acesso à rede.
Para permitir a autenticação no AD devemos ter instalado o servidor Samba e o suporte a Kerberos, ao se instalar o Centos no modo server já temos os mesmos instalados. Para instalar o servidor freeradius devemos proceder conforme abaixo:
yum install freeradius2.i386 freeradius2-utils.i386 freeradius2-krb5.i386
Agora passamos a configuração de nosso ambiente.
Kerberos
Para configurar o kerberos devemos editar o arquivo /etc/krb5.conf conforme abaixo:
[libdefaults]
default_realm = SEUDOMINIO.COM.BR
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
# The following libdefaults parameters are only for Heimdal Kerberos.
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[realms]
SEUDOMINIO.COM.BR = {
kdc = seu_servidor:88
admin_server = seu_servidor:749
default_domain = seudominio.com.br
}
[domain_realm]
.seudominio.com.br = SEUDOMINIO.COM.BR
seudominio.com.br = SEUDOMINIO.COM.BR
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[login]
krb4_convert = true
krb4_get_tickets = false
Logo após configuramos o servidor Samba através do arquivo /etc/samba/smb.conf para que fique parecido com o descrito abaixo:
[global]
workgroup = SEUDOMINIO.COM.BR
netbios name = NOME_DO_SERVIDOR
password server = SEU_SERVIDOR_ACTIVE_DIRECTORY
realm = SEUDOMINIO.COM.BR
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = ads
encrypt passwords = true
domain master = no
preferred master = no
dns proxy = no
interfaces = lo eth0
bind interfaces only = yes
template shell = /bin/false
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
auth methods = winbind
winbind use default domain = yes
winbind nested groups = Yes
winbind enum users=yes
winbind enum groups=yes
log level=winbind:10
Concluída a configuração do Samba devemos editar o arquivo /etc/nsswitch.conf alterando as linhas conforme abaixo:
DE
passwd: files
group: files
PARA
passwd: files winbind
group: files winbind
Concluído este passo devemos realizar testes para verificar a comunicação entre o servidor e o AD. Primeiramente testamos o Kerberos com o comando:
kinit seu_usuario@SEUDOMINIO.COM.BR
Será solicitada a senha do usuário, se tudo estiver funcionando perfeitamente entre com o comando "klist", o resultado deve exibir um tícket gerado conforme abaixo:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: seu_usuario@SEUDOMINIO.COM.BR
Valid starting Expires Service principal
08/17/10 15:47:26 08/18/10 01:47:30 krbtgt/SEUDOMINIO.COM.BR@SEUDOMINIO.COM.BR
renew until 08/18/10 15:47:26
OBS: Para que haja a comunicação entre os servidores Kerberos é necessário que o horário de ambos esteja sincronizado, verifique a hora do servidor realize ajustes se necessário.
Verificado o funcionamento do Kerberos é a vez de testar o Samba adicionando o servidor ao AD.
Para tal reinicialize o servidor Samba e o Winbind.
/etc/init.d/samba restart
/etc/init.d /winbind restart
Logo após adicione o servidor ao AD com o comando:
net ads join -U seu_usuario -S SEUDOMINIO.COM.BR
Após a inserção no domínio podemos testar a comunicação do servidor com o AD com o comando abaixo:
wbinfo -t
O resultado esperado para este comando é:
checking the trust secret via RPC calls succeeded
Outro testes interessante é autenticar com um usuário válido conforme abaixo:
wbinfo -a usuario
A senha será solicitada por duas vezes.
Enter usuario's password:
plaintext password authentication succeeded
Enter usuario's password:
challenge/response password authentication succeeded
Ainda a título de testes podemos listar também os grupos e os usuários do domínio conforme abaixo:
wbinfo -g
wbinfo -u
Passamos agora para a configuração do servidor Freeradius. Para realizar a autenticação no domínio o módulo MSCHAP do Freeradius utiliza o utilitário ntlm_auth que faz parte do samba para realizar a autenticação. Vamos testar o mesmo com o comando abaixo:
ntlm_auth --request-nt-key --domain=SEUDOMINIO --username=usuario --password=senha
O resultado esperado para este comando é:
NT_STATUS_OK: Success (0x0)
Partimos agora para a configuração dos arquivos do servidor Freeradius.
/etc/raddb/clients.conf
client ip_do_switch {
secret = testing123
}
/etc/raddb/users
DEFAULT Auth-Type = MS-CHAP
/etc/raddb/eap.conf
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 2048
md5 {
}
leap {
}
gtc {
auth_type = PAP
}
tls {
certdir = ${confdir}/certs
cadir = ${confdir}/certs
private_key_password = whatever
private_key_file = ${certdir}/server.pem
certificate_file = ${certdir}/server.pem
CA_file = ${cadir}/ca.pem
dh_file = ${certdir}/dh
random_file = ${certdir}/random
cipher_list = "DEFAULT"
make_cert_command = "${certdir}/bootstrap"
cache {
enable = no
max_entries = 255
}
}
ttls {
default_eap_type = md5
copy_request_to_tunnel = no
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
peap {
default_eap_type = mschapv2
}
mschapv2 {
}
}
Para finalizar devemos configurar o módulo de autenticação do Freeradius.
/etc/raddb/modules/mschap
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name} --domain=%{mschap:NT-Domain} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}"
}
OBS:Devemos nos certificar de que o usuário radiusd possua acesso ao diretório /var/cache/samba/winbindd_privileged caso contrário será exibida a mensagem de erro abaixo:
winbind client not authorized to use winbindd_pam_auth_crap Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly
Adicionamos o usuários radiusd ao grupo squid que possui os privilégios necessários com o comando:
usermod -a -G squid radiusd
Após definida a permissão de acesso devemos configurar o Switch para acessar o servidor. A configuração dos switches não será abordada neste post e varia de acordo com o fabricante e modelo dos mesmos. Antes de comprar seu equipamento verifique se o mesmo possui suporte 802.1X
O próximo passo é configurar as estações com o Windows XP. O windows XP deve estar com pelo menos o SP2 instalado.
Selecione as propriedades de sua interface de rede conforme abaixo:
No Windows XP com o SP2 instalado a guia autenticação estará disponível, clique sobre a guia autenticação e configure a mesma conforme abaixo:
Agora clique em configurações e desmarque as opções default deixando sua configuração conforme abaixo:
Para finalizar clique em configurar e desmarque a opção "Usar meu nome e minha senha de logon do windows automaticamente" conforme abaixo:
Selecione as propriedades de sua interface de rede conforme abaixo:
No Windows XP com o SP2 instalado a guia autenticação estará disponível, clique sobre a guia autenticação e configure a mesma conforme abaixo:
Agora clique em configurações e desmarque as opções default deixando sua configuração conforme abaixo:
Para finalizar clique em configurar e desmarque a opção "Usar meu nome e minha senha de logon do windows automaticamente" conforme abaixo:
Pronto, agora para se ter acesso a rede será preciso fornecer usuário e senha para liberação do acesso às portas do switch. O que achei particularmente interessante é que as estações windows ao serem inicializadas realizam login no servidor Freeradius com suas contas de máquina para ter acesso a rede, o que é útil para o acesso remoto do administrador, mas quando o usuário realiza o login as credenciais do usuário são novamente enviadas ao Freeradius e caso o mesmo não pertença ao domínio a estação não terá a porta do switch liberada para acesso.
É isso ai galera. Quaisquer erros neste post, dúvidas ou esclarecimentos estou a disposição.
Para a realização deste post os links abaixo foram utilizados como base:
Um grande abraço a todos.