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.

Link para baixar a distribuição do Ubuntu Server 20.04 LTS amd64: https://mirror.uepg.br/ubuntu-releases/20.04.4/ubuntu-20.04.4-live-server-amd64.iso http://mirror.pop-sc.rnp.br/ubuntu-releases/focal/ubuntu-20.04.4-live-server-amd64.iso https://ubuntu.com/download/server

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
}

Last updated