
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 / eapAdicione 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 eapO 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 internoativado 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 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ínioSó 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 macOSNormalmente, 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)