Configurando um servidor RADIUS com integração ao Active Directory

Posted by

Opa pessoal!!

Montei aqui um pequeno passo a passo para a criação de um servidor RADIUS (no Ubuntu) para autenticação de clientes atraves de um AP .

Esse passo a passo é um resumo de um job que fiz na empresa em que presto serviço. No caso havia a necessidade de que os AP autenticassem atravez do Active Directory.

Setup inicial do FREERADIUS – Ubuntu

1- Instale o FreeRadus, easy-rsa, samba e winbind
# apt-get install freeradius easy-rsa samba winbind

2- Quando o FreeRadius for instalado, o serviço vai subir automaticamente. Então precisa pará-lo para alterar as configurações:
# service freeradius stop

3- O FreeRadius precisa de certificados para proteção de informações. Aqui geramos eles:
# cp -R /usr/share/easy-rsa /etc/freeradius/certs/
# cd /etc/freeradius/certs/easy-rsa
# source vars
# ./clean-all
# ./build-ca
# ./build-key-server server

4- Copie as cheves geradas para o FreeRadius
# cp keys/ca.crt /etc/freeradius/certs/

5- Mude o OWNER do certificado
# chown freerad /etc/freeradius/certs/server*

6- Nesse ponto você já deve conseguir testar o servidorRadius. Para fazer esse teste, crie um usuário/senha no arquivo “users”, inicie o FreeRadius como DEBUG e use o aplicativo “radtest”

6.1- Criação de usuário: Edite o arquivo /etc/freeradius/users e adicione na última linha:
testuser Cleartext-Password := “testpassword”

6.2- Iniciar o FreeRadius como DEBUG
# freeradius -X

6.3- testar a autenticação
# radtest testuser testpassword localhost 0 testing123

Integração com o Active Directory

1- Configurações do arquivo smb.conf (samba)

[global]
workgroup = EMPRESACORP
realm = EMPRESA.CORP
netbios name = RADIUS_SERVER
server string = %L
security = ads
allow trusted domains = yes
idmap uid = 5000-10000
winbind gid = 5000-10000
template homedir = /usr/home/%U
template shell = /bin/sh
winbind cache time = 3600
winbind nested groups = yes
winbind use default domain = yes
winbind separator = /
winbind enum users = yes
winbind enum groups = yes
winbind offline logon = yes
syslog only = Yes
password server = DC01.EMPRESA.CORP
socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536
use sendfile = yes
read raw = yes
use sendfile = yes
local master = no
use sendfile = yes
dns proxy = no

# ACL Support
map acl inherit = yes
acl group control = yes

# LOGGING
log file = /var/log/samba/%m
log level = 1
max log size = 1000
syslog = 2

2- Edite o arquivo /etc/krb5.conf adicionando as credenciais do dominio da EMPRESA

[libdefaults]
default_realm = EMPRESA.CORP
clockskew = 600

[realms]
EMPRESA.CORP = {
kdc = EMPRESA.CORP
}

[domain_realm]

.EMPRESA.CORP = EMPRESA.CORP

3- Inicie o serviço do SAMBA

# service samba start

4- Adicione o servidor no domínio

# net join -u Administrator

5- Você pode verificar se a maquina está no dominio testando a autenticação com um usuário válido (guarde esse comando, usaremos ele mais tarde) – Altere o usuário e senha.
DICA: Para a senha não ficar no histórico, coloque um espaço em branco antes do comando.

# ntlm_auth –request-nt-key –domain=EMPRESA.CORP –username=usuário –password=password

6- Para o FreeRadius acessar o winbind, é necessário alterar algumas permissões de arquivo:

# usermod -a -G winbindd_priv freerad

# chmod winbindd_priv /var/lib/samba/winbindd_privileged/

7- O FreeRadius conta com 2 arquivos que descrevem a forma de autorização e autenticação. São eles:
-> /etc/freeradius/sites-enabled/default
-> /etc/freeradius/sites-enabled/inner-tunnel

8- Para integrar o FreeRadius com o Active Directory, edite o arquivo /etc/freeradius/modules/mschap e altere a linha ntlm_auth. Segue a configuração aplicada na EMPRESA:

mschap {
use_mppe = yes

require_encryption = yes

require_strong = yes

with_ntdomain_hack = yes

ntlm_auth = “/usr/bin/ntlm_auth –request-nt-key –domain=EMPRESA.CORP –require-membership-of=EMPRESA.corp//wifi –username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} –challenge=%{%{mschap:Challenge}:-00} –nt-response=%{%{mschap:NT-Response}:-00}”

# ntlm_auth_timeout = 10

# use_open_directory = yes

allow_retry = yes

# retry_msg = “Re-enter (or reset) the password”
}

Configuração de clientes

1- Todos os clientes que se comuniquem com o Radius devem ser configurados, liberados (ou não). Para isso edite o arquivo /etc/freeradius/clients.conf e adicione no final:

client 0.0.0.0/0 {
secret = test1234
shortname = name
nastype = other
}

( O IP pode ser alterado restringindo a resposta a apenas a rede que for escolhida )