Empresa WiFi. FreeRadius + FreeIPA + Ubiquiti



Alguns exemplos de WiFi corporativo já foram descritos. Aqui vou descrever como implementei uma solução semelhante e os problemas que tive que enfrentar ao conectar em diferentes dispositivos. Usaremos o LDAP existente com os usuários estabelecidos, aumentaremos o FreeRadius e configuraremos o WPA2-Enterprise no controlador Ubnt. Parece que tudo é simples. Vamos ver ...

Um pouco sobre os métodos EAP


Antes de prosseguir com a tarefa, precisamos decidir qual método de autenticação usaremos em nossa solução.

Da wikipedia:
O EAP é uma estrutura de autenticação que é frequentemente usada em redes sem fio e conexões ponto a ponto. O formato foi descrito pela primeira vez na RFC 3748 e atualizado na RFC 5247.
O EAP é usado para selecionar um método de autenticação, transferir chaves e processar essas chaves com plug-ins chamados métodos EAP. Existem muitos métodos EAP, ambos definidos com o próprio EAP e aqueles lançados por fabricantes individuais. O EAP não define a camada de link, apenas define o formato da mensagem. Cada protocolo que usa EAP possui seu próprio protocolo para encapsular mensagens EAP.

Os próprios métodos:

  • O LEAP é um protocolo proprietário desenvolvido pela CISCO. Vulnerabilidades encontradas. Atualmente não recomendado
  • O EAP-TLS é bem suportado entre os fornecedores sem fio. É um protocolo seguro porque é o sucessor dos padrões SSL. A configuração do cliente é bastante complicada. Precisa de um certificado de cliente além da senha. Suportado em muitos sistemas
  • EAP-TTLS - amplamente suportado em muitos sistemas, oferece boa segurança usando certificados PKI apenas no servidor de autenticação
  • O EAP-MD5 é outro padrão aberto. Oferece segurança mínima. Vulnerável, não suporta autenticação mútua e geração de chaves
  • EAP-IKEv2 - Com base na versão 2. do Protocolo de troca de chaves da Internet. Fornece autenticação mútua e estabelecimento de chave de sessão entre cliente e servidor.
  • O PEAP é uma solução conjunta CISCO, Microsoft e RSA Security como um padrão aberto. Amplamente disponível em produtos, oferece muito boa segurança. Semelhante ao EAP-TTLS, exigindo apenas um certificado do lado do servidor
  • PEAPv0 / EAP-MSCHAPv2 - Após o EAP-TLS, é o segundo padrão amplamente utilizado no mundo. Relação cliente-servidor usada em Microsoft, Cisco, Apple, Linux
  • PEAPv1 / EAP-GTC - criado pela Cisco como uma alternativa ao PEAPv0 / EAP-MSCHAPv2. Não protege os dados de autenticação de nenhuma maneira. Não suportado no sistema operacional Windows
  • O EAP-FAST é um método desenvolvido pela Cisco para corrigir deficiências do LEAP. Usa credenciais de acesso protegido (PAC). Não totalmente desenvolvido

De toda essa diversidade, a escolha ainda não é ótima. O método de autenticação era necessário: boa segurança, suporte em todos os dispositivos (Windows 10, macOS, Linux, Android, iOS) e, de fato, quanto mais simples, melhor. Portanto, a escolha recaiu sobre o EAP-TTLS em conjunto com o protocolo PAP.
Talvez surja a pergunta - Por que usar PAP? porque transfere senhas em texto não criptografado?

Sim está certo. A comunicação entre o FreeRadius e o FreeIPA ocorrerá dessa maneira. No modo de depuração, você pode acompanhar como o nome de usuário e a senha são enviados. Sim, e deixe-os ir, apenas você tem acesso ao servidor FreeRadius.

Leia mais sobre o trabalho do EAP-TTLS aqui.


Freeradius


Iremos aumentar o FreeRadius no CentOS 7.6. Nada complicado aqui, definido da maneira usual.

yum install freeradius freeradius-utils freeradius-ldap -y 

Nos pacotes, a versão 3.0.13 está instalada. O último pode ser obtido em https://freeradius.org/

Depois disso, o FreeRadius já funciona. Você pode descomentar a linha em / etc / raddb / users

 steve Cleartext-Password := "testing" 

Execute o servidor no modo de depuração

 freeradius -X 

E faça uma conexão de teste com o localhost

 radtest steve testing 127.0.0.1 1812 testing123 

Obtive uma resposta Received Access-Accept Id 115 de 127.0.0.1:1812 para 127.0.0.1►6081 length 20 , então está tudo bem. Vá em frente.

Nós conectamos o módulo LDAP .

 ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap 

E mude imediatamente. Precisamos do FreeRadius para acessar o FreeIPA

habilitado para mods / ldap
 ldap { server="ldap://ldap.server.com" port=636 start_tls=yes identity="uid=admin,cn=users,dc=server,dc=com" password=********** base_dn="cn=users,dc=server,dc=com" set_auth_type=yes ... user { base_dn="${..base_dn}" filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})" } ... 


Reiniciamos o servidor radius e verificamos a sincronização dos usuários LDAP:

 radtest user_ldap password_ldap localhost 1812 testing123 

Editando o eap no mods-enabled / eap
Adicione duas instâncias eap aqui. Eles diferem apenas em certificados e chaves. Vou explicar logo abaixo o porquê

ativado por mods / eap
 eap eap-client { default_eap_type = ttls timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = ${max_requests} tls-config tls-common { private_key_file = ${certdir}/fisrt.key certificate_file = ${certdir}/first.crt dh_file = ${certdir}/dh ca_path = ${cadir} cipher_list = "HIGH" cipher_server_preference = no ecdh_curve = "prime256v1" check_crl = no } ttls { tls = tls-common default_eap_type = md5 copy_request_to_tunnel = no use_tunneled_reply = yes virtual_server = "inner-tunnel" } } eap eap-guest { default_eap_type = ttls timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = ${max_requests} tls-config tls-common { private_key_passwotd=blablabla private_key_file = ${certdir}/server.key certificate_file = ${certdir}/server.crt dh_file = ${certdir}/dh ca_path = ${cadir} cipher_list = "HIGH" cipher_server_preference = no ecdh_curve = "prime256v1" check_crl = no } ttls { tls = tls-common default_eap_type = md5 copy_request_to_tunnel = no use_tunneled_reply = yes virtual_server = "inner-tunnel" } } 


Em seguida, edite o site ativado / padrão . Interessado nas seções autorizar e autenticar.

ativado pelo site / padrão
 authorize { filter_username preprocess if (&User-Name == "guest") { eap-guest { ok = return } } elsif (&User-Name == "client") { eap-client { ok = return } } else { eap-guest { ok = return } } ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } expiration logintime pap } authenticate { Auth-Type LDAP { ldap } Auth-Type eap-guest { eap-guest } Auth-Type eap-client { eap-client } pap } 


Na seção autorizar, removemos todos os módulos que não precisamos. Deixe apenas o LDAP. Adicionamos a verificação do cliente por nome de usuário. Por isso, adicionamos as duas instâncias eap acima.

Multi eap
O fato é que, ao conectar alguns dispositivos, usaremos certificados do sistema e indicaremos o domínio. Temos um certificado e uma chave de uma autoridade de certificação confiável. Pessoalmente, na minha opinião, esse procedimento de conexão é mais fácil do que lançar um certificado autoassinado em cada dispositivo. Mas mesmo sem certificados autoassinados, ele ainda não deu certo. Os dispositivos Samsung e Android = <6 versões não sabem como usar certificados do sistema. Portanto, para eles, criamos uma instância separada de eap-guest com certificados autoassinados. Para todos os outros dispositivos, usaremos o eap-client com um certificado confiável. O nome do usuário é determinado pelo campo Anônimo quando o dispositivo está conectado. Apenas três valores são permitidos: Convidado, Cliente e campo vazio. O resto é descartado. Isso está configurado nas políticas. Darei um exemplo mais tarde

Edite autorizar e autenticar seções no site ativado / túnel interno

ativado por site / túnel interno
 authorize { filter_username filter_inner_identity update control { &Proxy-To-Realm := LOCAL } ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } expiration digest logintime pap } authenticate { Auth-Type eap-guest { eap-guest } Auth-Type eap-client { eap-client } Auth-Type PAP { pap } ldap } 


Em seguida, você precisa especificar nas políticas quais nomes podem ser usados ​​para login anônimo. Edite policy.d / filter .

Você precisa encontrar linhas semelhantes a esta:

 if (&outer.request:User-Name !~ /^(anon|@)/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject } 

E abaixo, em elsif, adicione os valores necessários:

 elsif (&outer.request:User-Name !~ /^(guest|client|@)/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject } 

Agora precisamos ir para o diretório certs . Aqui, você precisa colocar a chave e o certificado de uma autoridade de certificação confiável, que já temos e precisamos gerar certificados autoassinados para o eap-guest.

Altere os parâmetros no arquivo ca.cnf .

ca.cnf
 ... default_days = 3650 default_md = sha256 ... input_password = blablabla output_password = blablabla ... countryName = RU stateOrProvinceNmae = State localityNmae = City organizationName = NONAME emailAddress = admin@admin.ru commonName = "CA FreeRadius" 


Os mesmos valores são especificados no arquivo server.cnf . Nós mudamos apenas
commonName :

server.cnf
 ... default_days = 3650 default_md = sha256 ... input_password = blablabla output_password = blablabla ... countryName = RU stateOrProvinceNmae = State localityNmae = City organizationName = NONAME emailAddress = admin@admin.ru commonName = "Server Certificate FreeRadius" 


Criamos:

 make 

Feito. O server.crt e server.key resultantes já estão registrados acima no eap-guest.

Por fim, adicione nossos pontos de acesso ao arquivo client.conf . Eu os tenho 7. Para não adicionar cada ponto separadamente, registraremos apenas a rede na qual eles estão localizados (meus pontos de acesso estão em uma VLAN separada).

 client APs { ipaddr = 192.168.100.0/24 password = password_AP } 

Controlador Ubiquiti


No controlador, criamos uma rede separada. Que seja 192.168.2.0/24
Vá para configurações -> perfil. Crie um novo:



Escrevemos o endereço e a porta do servidor radius e a senha que foram registradas no arquivo clients.conf :



Crie um novo nome sem fio. Como método de autenticação, selecione WPA-EAP (Enterprise) e especifique o perfil de raio criado:



Salvamos, aplicamos e seguimos em frente.

Configuração do cliente


Vamos começar com o mais difícil!

Windows 10


A complexidade se resume ao fato de o Windows ainda não conseguir se conectar ao WiFi corporativo por domínio. Portanto, você precisa fazer o upload manual de nosso certificado para o armazenamento confiável. Aqui você pode usar tanto autoassinado quanto de uma autoridade de certificação. Vou usar o segundo.

Em seguida, você precisa criar uma nova conexão. Para fazer isso, vá para as configurações de rede e Internet -> Central de Rede e Compartilhamento -> Criar e configurar uma nova conexão ou rede:







Registre manualmente o nome da rede e altere o tipo de segurança. Depois de clicar em alterar as configurações de conexão, na seção Segurança, selecionamos a autenticação de rede - EAP-TTLS.







Entramos nos parâmetros, prescrevemos a autenticação de privacidade - cliente . Como autoridade de certificação confiável, selecionamos o certificado que adicionamos, marque a caixa “Não dê um convite ao usuário se o servidor não puder ser autorizado” e selecione o método de autenticação - senha não criptografada (PAP).



Em seguida, vá para os parâmetros adicionais, marque "Especificar modo de autenticação". Selecione o item "Autenticação do usuário" e clique em Salvar credenciais . Aqui você precisará digitar username_ldap e password_ldap







Nós salvamos, aplicamos, fechamos tudo. Você pode se conectar à nova rede.

Linux


Eu testei no Ubuntu 18.04, 18.10, Fedora 29, 30.

Para começar, baixe um certificado. Não encontrei no Linux se é possível usar certificados do sistema e se existe um armazenamento assim.

Nós nos conectaremos por domínio. Portanto, você precisa de um certificado do centro de certificação do qual nosso certificado foi adquirido.

Toda a conexão é feita em uma janela. Escolha nossa rede:



anônimo - cliente
domínio - domínio para o qual o certificado é emitido

Android


não samsung


Na versão 7, ao conectar o WiFi, você pode usar certificados do sistema especificando apenas o domínio:



domínio - domínio para o qual o certificado é emitido
anônimo - cliente

Samsung


Como já mencionado acima, os dispositivos Samsung não sabem como usar certificados do sistema ao conectar o WiFi e não têm a capacidade de se conectar por domínio. Portanto, você deve adicionar manualmente o certificado raiz da autoridade de certificação (ca.pem, nós o usamos no servidor Radius). É aqui que ele será autoassinado.

Faça o download do certificado no seu dispositivo e instale-o.

Instalação de certificado








Nesse caso, será necessário definir o padrão de desbloqueio da tela, o código PIN ou a senha, se ainda não estiver instalado:





Eu mostrei uma versão complicada da instalação do certificado. Na maioria dos dispositivos, basta clicar no certificado baixado.

Quando o certificado está instalado, você pode prosseguir para a conexão:



certificado - indique o que foi instalado
usuário anônimo - convidado

macOS


Os dispositivos Apple prontos para o uso podem se conectar apenas ao EAP-TLS, mas você ainda precisa enviar um certificado a eles. Para especificar um método de conexão diferente, você precisa usar o Apple Configurator 2. Portanto, você deve primeiro fazer o download para a papoula, criar um novo perfil e adicionar todas as configurações de WiFi necessárias.

Configurador da Apple




Aqui indicamos o nome da sua rede
Tipo de segurança - WPA2 Enterprise
Tipos de EAP aceitos - TTLS
Nome de usuário e senha - deixe em branco
Autenticação interna - PAP
Identidade externa - cliente


Guia Confiar. Aqui indicamos nosso domínio

Só isso. Um perfil pode ser salvo, assinado e distribuído para dispositivos

Depois que o perfil estiver pronto, ele precisará ser baixado na papoula e instalado. Durante o processo de instalação, você precisará especificar o usuário usernmae_ldap e password_ldap:







iOS


O processo é semelhante ao macOS. Você precisa usar um perfil (você pode fazer o mesmo que no macOS. Como criar um perfil no Apple Configurator, veja acima).

Faça o download do perfil, instale, insira as credenciais, conecte:













Só isso. Montamos um servidor Radius, sincronizamos com o FreeIPA e pedimos aos pontos de acesso da Ubiquiti para usar o WPA2-EAP.

Possíveis perguntas


P: como transferir perfil / certificado para funcionário?

R: Todos os certificados / perfis que eu armazeno no ftp com acesso via web. Gerou uma rede de convidados com limite de velocidade e acesso à Internet apenas, exceto para ftp.
A autenticação dura 2 dias, após os quais é redefinida e o cliente fica sem a Internet. T.O. quando um funcionário deseja se conectar ao Wi-Fi, ele primeiro se conecta à rede de convidados, visita o FTP, baixa o certificado ou o perfil de que precisa, instala-os e pode se conectar à rede corporativa.

P: por que não usar um esquema com o MSCHAPv2? ela é mais segura!

R: em primeiro lugar, esse esquema funciona bem no NPS (Windows Network Policy System); em nossa implementação, precisamos configurar adicionalmente o LDAP (FreeIpa) e armazenar hashes de senha no servidor. Adicionar. configurações não são aconselháveis, porque isso pode levar a vários problemas de sincronização do ultrassom. Em segundo lugar, o hash é MD4, portanto, isso não aumenta realmente a segurança.

P: é possível autorizar dispositivos por endereços MAC?

R: NÃO, isso não é seguro, um invasor pode falsificar endereços de papoula e, além disso, a autorização para endereços de papoula não é suportada em muitos dispositivos

P: por que usar todos esses certificados? você pode se conectar sem eles

R: Certificados são usados ​​para autorizar o servidor. I.e. o dispositivo, quando conectado, verifica se é ou não confiável o servidor. Se um, a autenticação vai além; caso contrário, a conexão é fechada. Você pode se conectar sem certificados, mas se um invasor ou um vizinho pegar um servidor radius e um ponto de acesso com o mesmo nome que o nosso, ele poderá interceptar facilmente as credenciais do usuário (não esqueça que elas são transmitidas em texto não criptografado). E quando o certificado é usado, o inimigo verá em nossos registros apenas nosso Nome de Usuário fictício - hóspede ou cliente e um erro do tipo - Certificado CA Desconhecido

mais sobre o macOS
Normalmente, no macOS, a reinstalação do sistema é feita pela Internet. No modo de recuperação, a papoila deve estar conectada ao WiFi, e nem o nosso WiFi corporativo nem a rede de convidados funcionarão aqui. Pessoalmente, peguei outra rede, a usual WPA2-PSK, oculta, apenas para operações técnicas. Ou então, você pode criar uma unidade flash USB inicializável com o sistema com antecedência. Mas se a papoula depois de 2015, você ainda precisará encontrar um adaptador para esta unidade flash)

Source: https://habr.com/ru/post/pt463225/


All Articles