Links

Instalação Manual

Neste tópico será mostrado a instalação do Freeradius 3.x numa máquina com o sistema operacional Ubuntu Server 20.04 LTS amd64
Caso você queira instalar o novo servidor IdP Eduroam manualmente, você pode seguir o passo a passo deste manual.
Detalhes técnicos da máquina virtual a ser criada: 8 GB RAM 2 vCPUs 200 GB de espaço em disco 1 placa de rede
Utilize o comando abaixo para obter privilégios de super usuário (root)
sudo su -
Após a instalação da máquina virtual acima vamos configurar o IP fixo. Edite o arquivo /etc/netplan/00-installer-config.yaml Segue abaixo exemplo do conteúdo do arquivo:
vim /etc/netplan/00-installer-config.yaml
This is the network config written by 'subiquity'
network: version: 2 renderer: networkd ethernets: ens160: addresses: [200.133.240.72/24] gateway4: 200.133.240.1 nameservers: addresses: - 200.133.241.164 Se for usar AD para autenticar seus usuários então utilize o IP do seu servidor AD - 200.133.241.165 Se for usar AD para autenticar seus usuários então utilize o IP do seu servidor AD search: [RNP.LOCAL] Se for usar AD, utilize o nome do dominio interno do seu AD
Se for utilizar o AD para autenticar seus usuários, então você deve informar no campo nameservers address o IP de seus ADs que estão na mesma rede ou mais próximos. Estamos levando em consideração que o servidor de DNS de seus ADs estão rodando na mesma máquina que roda o AD, por isso que estamos utilizando o mesmo IP. Existem instituições que rodam o DNS do AD em outros servidodres, o que você precisa fazer é informar os IPs dos servidores de DNS dos ADs. Eu não utilizo AD apenas LDAP, qual IP de DNS devo utilizar? Neste caso você pode utilizar o seu servidor de DNS público, basta apenas informar os IPs.
Após gravar as modificações no arquivo acima precisamos executar o comando abaixo para que surta efeito no sistema operacional:
netplan apply
Verificando se IP configurado anteriormente subiu corretamente, digite o comando abaixo:
ip a
Será exibido a configuração da placa de rede:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:b0:a4:3a brd ff:ff:ff:ff:ff:ff
inet 200.133.240.72/24 brd 200.133.240.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:feb0:a43a/64 scope link
valid_lft forever preferred_lft forever
Podemos ver que a placa de rede ens160 está configurada com o IP 200.130.35.91 e mascara de rede 255.255.255.0 que equivale a 200.130.35.91/24 como mostrado no resultado do comando acima. Lembrando que para configurar a placa de rede basta editar o arquivo /etc/netplan/00-installer-config.yaml e após a alteração executar o comando netplan apply e para ver se as alterações foram aplicadas vamos executar novamente o comando ip a como mostrado no exemplo acima.
Verificando os IPs do DNS Servers e DNS Domain com o comando:
systemd-resolve --status
Link 2 (ens160)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 200.133.241.164
200.133.241.165
DNS Domain: RNP.LOCAL
A linha 1 exibe Link 2 (ens160) significa que as linhas a seguir referem-se as configurações da placa de rede ens160
As linhas 9 e 10 referem-se ao DNS que está sendo utilizado. DNS Servers: 200.133.241.164 200.133.241.165 Lembrando mais uma vez que se você estiver utilizando o AD para autenticar os usuários no IdP Eduroam, estes IPs devem ser de seu AD e não do seu servidor de DNS público. Se estiver utilizando somente o servidor LDAP de sua instituição então você pode utilizar os IPs de seu DNS público.
A linha 11: DNS Domain: RNP.LOCAL refere-se a qual domínio estamos utilizando em nosso DNS. Esta linha exibe a configuração do domínio que você está utilizando. Para dominios internos utilizando o AD normalmente é instituição.local, mas tem instituições fora do padrão pois criaram no AD o dominio externo. O padrão recomendado no material da Microsoft é sempre criar para dominios de autenticação de usuários internos o nome da empresa-instituição.LOCAL. Exemplos de nomes de dominios internos do AD utilizados em instituições usuárias do IdP Eduroam: RNP.LOCAL INSTITUICAO-A.LOCAL INSTITUICAO-B.EDU.BR INSTITUICAO-C.GOV.BR INSTITUICAO-D.BR

Verificando o roteamento

Vamos utilizar o comando ip route conforme exemplo abaixo:
ip route
default via 200.133.240.1 dev ens160 proto static 200.133.240.0/24 dev ens160 proto kernel scope link src 200.133.240.72
Podemos ver acima que o nosso default gateway está apontando para o IP 200.133.240.1 conforme configurado dentro do arquivo /etc/netplan/00-installer-config.yaml
Precisamos testar a conexão com o default gateway, com o seguinte comando, exemplo:
ping IP-DO-SEU-GATEWAY-EXIBIDO-ACIMA exemplo: ping 200.133.240.1
Caso ocorra algum problema será necessário verificar se o endereço IP/Mascara/Gateway definidos em sua máquina estão corretos.

Verificando se o servidor está acessando a internet

Vamos utilizar o comando ping conforme exemplo abaixo:
  • ping 8.8.8.8
  • ping 200.133.241.164
  • ping 200.133.241.165
Caso ocorram problemas no comando acima, será necessário verificar no firewall da instituição se a saída da máquina está liberada para a internet

Verificando DNS

Agora precisamos verificar se sua máquina está resolvendo nomes internos e externos.
Se você utiliza AD o primeiro passo é verificar se está resolvendo o nome do dominio interno, exemplo:
ping rnp.local
ping seu-dominio.interno
Verificando a resolução de nomes para dominios externos:
ping www.google.com
ping archive.ubuntu.com
ping rps01.eduroam.org.br
ping rps02.eduroam.org.br
Verificando o nome de sua maquina, para isso podemos utilizar os seguintes comandos:
hostname
cat /etc/hostname
hostnamectl
Lembrando que se você utiliza AD é necessário que sua máquina esteja dentro do dominio interno de seu AD, exemplos:
prometheus.rnp.local
Se não utilizar AD então sua maquina pode utilizar dominio externo, exemplo:
prometheus.rnp.br
Como alterar o nome do servidor permanentemente:
voce pode editar o arquivo:
vim /etc/hostname
ou alterar o nome utilizando o comando:
hostnamectl set-hostname prometheus.rnp.br
E para ver se o nome foi alterado com sucesso, vamos utilizar novamente um dos comandos abaixo:
hostnamectl
hostname
cat /etc/hostname

Instalação de Pacotes

Os pacotes podem variar de acordo com o tipo de autenticação, se for autenticação via LDAP é um pacote, se a autenticação for via AD são outros pacotes, algumas instituições realizam a autenticação via LDAP e via AD, neste caso instalamos todos os pacotes.
Vamos acrescentar o repositório do Freeradius ao repositório do Ubuntu utilizando os comandos abaixo:

Adicionar repositório do Freeradius

echo "deb [arch=amd64] http://packages.networkradius.com/releases/ubuntu-`lsb_release -s -c` `lsb_release -s -c` main" | tee /etc/apt/sources.list.d/networkradius.list > /dev/null

Adicionando chaves

Para Ubuntu 20.04 LTS (Focal) / 18.04 LTS (Bionic)

curl -s 'https://packages.networkradius.com/pgp/packages%40networkradius.com' | tee /etc/apt/trusted.gpg.d/packages.networkradius.com.asc > /dev/null

Para Ubuntu 16.04 LTS (Xenial) / 14.04 LTS (Trusty) / 12.04 LTS (Precise)

apt-key adv --keyserver hkp://keys.gnupg.net:80 --recv-key 0x41382202
apt-key adv --keyserver hkp://209.244.105.201:80 --recv-key 0x41382202
apt-key adv --keyserver hkp://192.146.137.140:80 --recv-key 0x41382202
apt-key adv --keyserver hkp://192.146.137.141:80 --recv-key 0x41382202

Atualizando o Freeradius após a execução dos itens acima.

Execute o comando:
apt update

Instalando Freeradius e suas dependências

Ressaltando que a instalaçao do Freeradius neste manual é realizado com o Ubuntu 20.04 LTS.
apt -y update && apt list --upgradable && apt -y upgrade && apt install -y ssl-cert freeradius freeradius-utils freeradius-config freeradius-common freeradius-ldap freeradius-mysql freeradius-postgresql freeradius-krb5 snmp glibc-doc libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl make-doc libfreeradius3 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libtalloc2 libwbclient0 libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl make make-doc libmysqlclient21 libpq5 mysql-common nmap dialog cryptsetup ldap-utils ntpdate ntpstat systemd-timesyncd net-tools traceroute lynx whois dialog

Instalando pacotes para conectar Freeradius com AD via SAMBA

Você deve instalar os pacotes mencionados acima e os pacotes adicionais abaixo para utilizar o AD para autenticar seus usuários em sua instituição. Segue abaixo o comando utilizado:
apt -y update && apt list --upgradable && apt -y upgrade && apt install -y krb5-user libpam-krb5 krb5-config libkrb5-3 libkadm5clnt-mit11 winbind systemd-timesyncd ntpdate samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules cifs-utils smbclient

Verificando se o Freeradius foi instalado com sucesso

Podemos utilizar um dos comandos abaixo:
systemctl status freeradius ou /etc/init.d/freeradius status ou service freeradius status
resultado esperado:
Caso ocorra algum problema com o Freeradius será necessário verificar a seção de Troubleshooting.

Utilizando email recebido com os arquivos de configuração de seu servidor

Crie uma pasta com o nome rnp dentro do diretório root, segue o comando a ser utilizado:
mkdir /root/rnp
cd /root/rnp
Copie os arquivos que você recebeu via email da RNP para dentro da pasta /root/rnp
Para realizar esta cópia você pode utilizar por exemplo o software WinSCP encontrado no site https://sourceforge.net/projects/winscp/
Descompacte o arquivo recebido dentro da pasta /root/rnp
tar xzvf eduroam01.sua-instituicao.edu.br.tar.gz
Liste os arquivos que foram descompactados com o comando abaixo:
ls -lart
Veja exemplo do resultado esperado:
-rw-r--r-- 1 root root 455 Mar 28 2020 atualiza_configura_idp_eduroam.bash -rw-r--r-- 1 root root 1330 Mar 9 08:22 rnp-ca.crt -rw-r--r-- 1 root root 4691 Mar 9 08:22 radsec -rw-r--r-- 1 root root 2532 Mar 9 08:22 proxy.conf -rw-r--r-- 1 root root 1103 Mar 9 08:22 inner-tunnel -rw-r--r-- 1 root root 1704 Mar 9 08:22 eduroam01.sua-instituicao.edu.br.key -rw-r--r-- 1 root root 4208 Mar 9 08:22 eduroam01.sua-instituicao.edu.br.crt -rw-r--r-- 1 root root 31393 Mar 9 08:22 eap -rw-r--r-- 1 root root 1306 Mar 9 08:22 default -rw-r--r-- 1 root root 1453 Mar 9 08:22 clients.conf
Onde está eduroam01.sua-instituicao.edu.br será substituido pelo nome do seu servidor e sua instituição.

Realizando backup dos arquivos originais

Abaixo os comados para criar o diretorio para armazenar o backup dos arquivos originais do freeradius, e em seguida realizamos a cópia destes arquivos para dentro do diretorio /root/rnp/backup
mkdir /root/rnp/backup
cp /etc/freeradius/{clients.conf,radiusd.conf,proxy.conf,mods-config/files/authorize,mods-enabled/{eap,mschap,ntlm_auth},mods-available/ldap,sites-available/{default,inner-tunnel}} /etc/ssl/openssl.cnf /etc/hosts /etc/resolv.conf /root/rnp/backup/

Substituindo os arquivos originais pelos arquivos recebidos

Agora vamos substituir os arquivos originais do Freeradius pelos arquivos recebidos da RNP.
Estes arquivos possuem as configurações necessárias para que o seu servidor conecte com as máquinas da nossa federação.
Criar o diretorio /etc/freeradius/certs/radsec, neste diretório vamos copiar os arquivos de certificados gerados pela RNP para realizar a conexão com os servidores da federação.
mkdir /etc/freeradius/certs/radsec
cp /root/rnp/{rnp-ca.crt,eduroam01.sua-instituicao.edu.br.key,eduroam01.sua-instituicao.edu.br.crt} /etc/freeradius/certs/radsec
ls -lart /etc/freeradius/certs/radsec
total 24
drwxr-s--x 3 freerad freerad 4096 Mar 9 12:51 ..
-rw-r--r-- 1 root freerad 1330 Mar 9 12:51 rnp-ca.crt
-rw-r--r-- 1 root freerad 1704 Mar 9 12:51 eduroam01.sua-instituicao.edu.br.key
-rw-r--r-- 1 root freerad 4208 Mar 9 12:51 eduroam01.sua-instituicao.edu.br.crt
drwxr-sr-x 2 root freerad 4096 Mar 9 12:51 .
Copiar os demais arquivos de configuração do Freeradius
cp /root/rnp/{radsec,inner-tunnel,default} /etc/freeradius/sites-enabled/
cp /root/rnp/eap /etc/freeradius/mods-enabled/eap
cp /root/rnp/{clients.conf,proxy.conf} /etc/freeradius/
cp /root/rnp/openssl.cnf /etc/ssl/openssl.cnf
dd if=/dev/urandom of=/etc/freeradius/certs/radsec/random count=10
openssl dhparam -out /etc/freeradius/certs/radsec/dh -2 2048
Após a realização de todo procedimento acima devemos executar o comando freeradius -CX para verificar se há algum problema.
freeradius -CX
Se tudo ocorreu bem até o momento, a ultima linha do resultado deste comando deve ser:
Configuration appears to be OK

Analisando os arquivos de configurações

Neste item vamos analisar os arquivos de configurações que foram gerados pela RNP.
Estes arquivos gerados foram copiados para dentro de vários diretórios do Freeradius como executamos no item anterior.

/etc/freeradius/sites-enabled/default

server default {
listen {
type = auth
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipaddr = *
port = 0
type = acct
limit {
}
}
listen {
type = auth
ipv6addr = :: # any. ::1 == localhost
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipv6addr = ::
port = 0
type = acct
limit {
}
}
authorize {
filter_username
preprocess
chap
mschap
digest
suffix
if ( Realm =~ /sua-instituicao.edu.br/i ) {
update control {
&Proxy-To-Realm := LOCAL
}
}
eap {
ok = return
}
files
-sql
-ldap
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
mschap
digest
eap
}
preacct {
preprocess
acct_unique
files
}
accounting {
detail
unix
-sql
exec
attr_filter.accounting_response
}
session {
}
post-auth {
update {
&reply: += &session-state:
}
-sql
-ldap
exec
remove_reply_message_if_eap
Post-Auth-Type REJECT {
-sql
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
}
pre-proxy {
update proxy-request {
Operator-Name = "1sua-instituicao.edu.br"
Eduroam-SP-Country = "BR"
}
}
post-proxy {
eap
}
}

/etc/freeradius/sites-enabled/inner-tunnel

server inner-tunnel {
listen {
type = auth
ipaddr = *
port = 18120
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
authorize {
filter_username
preprocess
chap
mschap
digest
suffix
if ( Realm =~ /sua-instituicao.edu.br/i ) {
update control {
&Proxy-To-Realm := LOCAL
}
}
eap {
ok = return
}
files
-sql
-ldap
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
mschap
digest
eap
}
preacct {
preprocess
acct_unique
files
}
accounting {
detail
unix
-sql
exec
attr_filter.accounting_response
}
session {
}
post-auth {
update {
&reply: += &session-state:
}
-sql
-ldap
exec
remove_reply_message_if_eap
Post-Auth-Type REJECT {
-sql
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
}
pre-proxy {
update proxy-request {
Operator-Name = "1sua-instituicao.edu.br"
Eduroam-SP-Country = "BR"
}
}
post-proxy {
eap
}
}

/etc/freeradius/sites-enabled/radsec

listen {
ipaddr = *
port = 2083
type = auth
proto = tcp
virtual_server = default
clients = radsec
limit {
max_connections = 0
lifetime = 0
idle_timeout = 3600
}
tls {
tls_min_version = "1.0"
tls_max_version = "1.2"
cipher_list = "DEFAULT@SECLEVEL=1"
certdir = ${confdir}/certs/radsec
cadir = ${confdir}/certs/radsec
private_key_password = dXdHZF2GemkB
private_key_file = ${certdir}/eduroam01.sua-instituicao.edu.br.key
certificate_file = ${certdir}/eduroam01.sua-instituicao.edu.br.crt
ca_file = ${cadir}/rnp-ca.crt
dh_file = ${certdir}/dh
random_file = ${certdir}/random
fragment_size = 8192
include_length = yes
#cipher_list = "DEFAULT"
cache {
enable = yes
lifetime = 24 # hours
max_entries = 255
}
require_client_cert = yes
verify {
}
}
}
listen {
ipv6addr = ::
port = 2083
type = auth
proto = tcp
clients = radsec
limit {
max_connections = 0
lifetime = 0
idle_timeout = 600
}
tls {
tls_min_version = "1.0"
tls_max_version = "1.2"
cipher_list = "DEFAULT@SECLEVEL=1"
certdir = ${confdir}/certs/radsec
cadir = ${confdir}/certs/radsec
private_key_password = dXdHZF2GemkB
private_key_file = ${certdir}/eduroam01.sua-instituicao.edu.br.key
certificate_file = ${certdir}/eduroam01.sua-instituicao.edu.br.crt
ca_file = ${cadir}/rnp-ca.crt
dh_file = ${certdir}/dh
random_file = ${certdir}/random
fragment_size = 8192
include_length = yes
#cipher_list = "DEFAULT"
cache {
enable = yes
max_entries = 255
}
require_client_cert = yes
verify {
}
}
}
clients radsec {
limit {
max_connections = 0
lifetime = 0
idle_timeout = 3600
}
client 127.0.0.1 {
ipaddr = 127.0.0.1
proto = tls
secret = l9ZoIpHZoBBX
}
client rps01 {
ipaddr = rps01.eduroam.org.br
proto = tls
secret = rTfGaFM9vvJw
limit {
max_connections = 0
lifetime = 0
idle_timeout = 3600
}
}
client rps02 {
ipaddr = rps02.eduroam.org.br
proto = tls
secret = rTfGaFM9vvJw
limit {
max_connections = 0
lifetime = 0
idle_timeout = 3600
}
}
}
# local test listener for debug (present by default)
listen {
ipaddr = 127.0.0.1
port = 4000
type = auth
}
home_server rps01 {
ipaddr = rps01.eduroam.org.br
port = 2083
type = auth
secret = rTfGaFM9vvJw
proto = tcp
status_check = none
tls {
tls_min_version = "1.0"
tls_max_version = "1.2"
cipher_list = "DEFAULT@SECLEVEL=1"
certdir = ${confdir}/certs/radsec
cadir = ${confdir}/certs/radsec
private_key_password = dXdHZF2GemkB
private_key_file = ${certdir}/eduroam01.sua-instituicao.edu.br.key
certificate_file = ${certdir}/eduroam01.sua-instituicao.edu.br.crt
ca_file = ${cadir}/rnp-ca.crt
dh_file = ${certdir}/dh
random_file = ${certdir}/random
fragment_size = 1500
include_length = yes
CA_path = ${cadir}
#cipher_list = "DEFAULT"
}
}
home_server rps02 {
ipaddr = rps02.eduroam.org.br
port = 2083
type = auth
secret = rTfGaFM9vvJw
proto = tcp
status_check = none
tls {
tls_min_version = "1.0"
tls_max_version = "1.2"
cipher_list = "DEFAULT@SECLEVEL=1"
certdir = ${confdir}/certs/radsec
cadir = ${confdir}/certs/radsec
private_key_password = dXdHZF2GemkB
private_key_file = ${certdir}/eduroam01.sua-instituicao.edu.br.key
certificate_file = ${certdir}/eduroam01.sua-instituicao.edu.br.crt
ca_file = ${cadir}/rnp-ca.crt
dh_file = ${certdir}/dh
random_file = ${certdir}/random
fragment_size = 1500
include_length = yes
CA_path = ${cadir}
#cipher_list = "DEFAULT"
}
}
home_server_pool BR {
type = fail-over
home_server = rps01
home_server = rps02
}
realm "~.+$" {
auth_pool = BR
nostrip
}