Alguns exemplos de organização de WiFi corporativo já foram descritos. Descreverei aqui como implementei essa solução e os problemas que encontrei ao conectar em diferentes dispositivos. Usaremos o LDAP existente com usuários estabelecidos, instalaremos o FreeRadius e configuraremos o WPA2-Enterprise no controlador Ubnt. Tudo parece simples. Vamos ver…
Um pouco sobre métodos EAP
Antes de iniciarmos a tarefa, precisamos decidir qual método de autenticação usaremos em nossa solução.
Da Wikipedia:
EAP é uma estrutura de autenticação 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.
EAP é usado para selecionar um método de autenticação, transferir chaves e processar essas chaves por plug-ins chamados métodos EAP. Existem muitos métodos EAP, tanto definidos com o próprio EAP quanto aqueles lançados por fornecedores individuais. O EAP não define a camada de enlace, apenas define o formato da mensagem. Cada protocolo que usa EAP possui seu próprio protocolo de encapsulamento de mensagens EAP.
Os próprios métodos:
- LEAP é um protocolo proprietário desenvolvido pela CISCO. Vulnerabilidades encontradas. Atualmente não recomendado para uso
- O EAP-TLS é bem suportado por fornecedores sem fio. É um protocolo seguro porque é o sucessor dos padrões SSL. Configurar o cliente é bastante complicado. Você 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
- 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 - baseado no Internet Key Exchange Protocol versão 2. Fornece autenticação mútua e estabelecimento de chave de sessão entre cliente e servidor
- PEAP é uma solução conjunta entre CISCO, Microsoft e RSA Security como um padrão aberto. Amplamente disponível em produtos, oferece segurança muito boa. Semelhante ao EAP-TTLS, exigindo apenas um certificado do lado do servidor
- PEAPv0/EAP-MSCHAPv2 – Depois do EAP-TLS, este é o segundo padrão amplamente utilizado no mundo. Relacionamento cliente-servidor usado 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 forma alguma. Não suportado no sistema operacional Windows
- EAP-FAST é um método desenvolvido pela Cisco para corrigir as deficiências do LEAP. Usa credencial de acesso protegido (PAC). Completamente inacabado
De toda essa variedade, a escolha ainda não é grande. O método de autenticação exigia: boa segurança, suporte em todos os dispositivos (Windows 10, macOS, Linux, Android, iOS) e, na verdade, quanto mais simples melhor. Portanto, a escolha recaiu sobre o EAP-TTLS em conjunto com o protocolo PAP.
Pode surgir a pergunta - Por que usar o PAP? Afinal, ele transmite senhas em texto não criptografado?
Sim está certo. A comunicação entre FreeRadius e FreeIPA ocorrerá exatamente assim. 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, só você tem acesso ao servidor FreeRadius.
Você pode ler mais sobre como funciona o EAP-TTLS
FreeRADIUS
Atualizaremos o FreeRadius para CentOS 7.6. Não há nada complicado aqui, instalamos da maneira usual.
yum install freeradius freeradius-utils freeradius-ldap -y
Dos pacotes, a versão 3.0.13 está instalada. Este último pode ser tomado em
Depois disso, o FreeRadius já está funcionando. Você pode descomentar a linha em /etc/raddb/users
steve Cleartext-Password := "testing"
Inicie no servidor em modo de depuração
freeradius -X
E faça uma conexão de teste do localhost
radtest steve testing 127.0.0.1 1812 testing123
Recebemos uma resposta ID de aceitação de acesso recebido 115 de 127.0.0.1:1812 a 127.0.0.1:56081 comprimento 20, significa que está tudo bem. Vá em frente.
Conectando o módulo ldap.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
E vamos mudar isso imediatamente. Precisamos do FreeRadius para poder 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}})"
}
...
Reinicie o servidor radius e verifique a sincronização dos usuários LDAP:
radtest user_ldap password_ldap localhost 1812 testing123
Editando eap em habilitado para mods/eap
Aqui adicionaremos duas instâncias de eap. Eles diferirão apenas em certificados e chaves. Explicarei por que isso é verdade abaixo.
habilitado para 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"
}
}
A seguir editamos habilitado para site/padrão. Estou interessado nas seções de autorização e autenticação.
habilitado para 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 de autorização, removemos todos os módulos que não precisamos. Deixamos apenas ldap. Adicione verificação de cliente por nome de usuário. É por isso que adicionamos duas instâncias de eap acima.
Multi EAPO fato é que ao conectar alguns dispositivos usaremos certificados de sistema e especificaremos 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 simples do que colocar um certificado autoassinado em cada dispositivo. Mas mesmo sem certificados autoassinados ainda não foi possível sair. Dispositivos Samsung e Android =< 6 versões não sabem como usar certificados de sistema. Portanto, criamos uma instância separada de eap-guest para eles com certificados autoassinados. Para todos os outros dispositivos usaremos eap-client com um certificado confiável. O nome de usuário é determinado pelo campo Anônimo ao conectar o dispositivo. São permitidos apenas 3 valores: Convidado, Cliente e um campo vazio. O resto é tudo descartado. Isso pode ser configurado nas políticas. Darei um exemplo um pouco mais tarde.
Vamos editar as seções de autorização e autenticação em habilitado para site/túnel interno
habilitado para 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. Edição política.d/filtro.
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 no 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 precisamos colocar a chave e o certificado de uma autoridade de certificação confiável, que já temos, e precisamos gerar certificados autoassinados para eap-guest.
Alterando 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 = [email protected]
commonName = "CA FreeRadius"
Escrevemos os mesmos valores no arquivo servidor.cnf. Nós apenas mudamos
nome comum:
servidor.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "Server Certificate FreeRadius"
Nós criamos:
make
Preparar. Recebido servidor.crt и servidor.chave Já nos registramos acima no eap-guest.
E por último, vamos adicionar nossos pontos de acesso ao arquivo cliente.conf. Tenho 7. Para não adicionar cada ponto separadamente, vamos cadastrar apenas a rede em que 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
Criamos uma rede separada no controlador. Que seja 192.168.2.0/24
Vá para configurações -> perfil. Vamos criar um novo:
Anotamos o endereço e porta do servidor radius e a senha que estava escrita no arquivo clientes.conf:
Crie um novo nome de rede sem fio. Selecione WPA-EAP (Enterprise) como método de autenticação e especifique o perfil radius criado:
Salvamos tudo, aplicamos e seguimos em frente.
Configurando clientes
Vamos começar com a parte mais difícil!
Windows 10
A dificuldade se resume ao fato de o Windows ainda não saber como se conectar ao WiFi corporativo através de um domínio. Portanto, temos que carregar manualmente nosso certificado para o armazenamento de certificados confiável. Aqui você pode usar um autoassinado ou de uma autoridade de certificação. Vou usar o segundo.
Em seguida, você precisa criar uma nova conexão. Para fazer isso, vá para Configurações de Rede e Internet -> Central de Rede e Compartilhamento -> Criar e configurar uma nova conexão ou rede:
Inserimos manualmente o nome da rede e alteramos o tipo de segurança. Em seguida, clique em alterar configurações de conexão e na guia Segurança, selecione autenticação de rede - EAP-TTLS.
Vá para as configurações, defina a confidencialidade da autenticação - cliente. Como autoridade de certificação confiável, selecione o certificado que adicionamos, marque a caixa “Não emitir convite ao usuário se o servidor não puder ser autorizado” e selecione o método de autenticação - senha de texto simples (PAP).
Em seguida, vá para parâmetros adicionais e marque a caixa “Especificar modo de autenticação”. Selecione “Autenticação do usuário” e clique em salvar credenciais. Aqui você precisará inserir username_ldap e password_ldap
Salvamos, aplicamos, fechamos tudo. Você pode se conectar a uma nova rede.
Linux
Testei no Ubuntu 18.04, 18.10, Fedora 29, 30.
Primeiro, baixe o certificado para você. Não descobri no Linux se é possível usar certificados de sistema ou se existe tal armazenamento.
Vamos nos conectar via domínio. Portanto, precisamos de um certificado da autoridade de certificação da qual nosso certificado foi adquirido.
Todas as conexões são feitas em uma janela. Selecione nossa rede:
anônimo - cliente
domínio — o domínio para o qual o certificado foi emitido
Android
não Samsung
A partir da versão 7, ao conectar WiFi, você pode usar certificados de sistema especificando apenas o domínio:
domínio — o domínio para o qual o certificado foi emitido
anônimo - cliente
Samsung
Como escrevi acima, os dispositivos Samsung não sabem como usar certificados de sistema ao conectar-se ao WiFi e não têm a capacidade de se conectar via domínio. Portanto, você precisa adicionar manualmente o certificado raiz da autoridade de certificação (ca.pem, retire-o do servidor Radius). É aqui que a autoassinada será usada.
Baixe o certificado para o seu dispositivo e instale-o.
Instalando um certificado
Nesse caso, você precisará definir um padrão de desbloqueio de tela, código PIN ou senha, caso ainda não esteja definido:
Mostrei uma opção complexa para instalar um certificado. Na maioria dos dispositivos, basta clicar no certificado baixado.
Quando o certificado estiver instalado, você poderá prosseguir para a conexão:
certificado - indique aquele que você instalou
usuário anônimo - convidado
MacOS
Os dispositivos Apple só podem se conectar ao EAP-TLS imediatamente, mas você ainda precisa fornecer um certificado a eles. Para especificar um método de conexão diferente, você precisa usar o Apple Configurator 2. Assim, você precisa primeiro baixá-lo para o seu Mac, criar um novo perfil e adicionar todas as configurações WiFi necessárias.
Configuração Apple
Aqui indicamos o nome da nossa 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 Confiança. Aqui indicamos nosso domínio
Todos. O perfil pode ser salvo, assinado e distribuído para dispositivos
Depois que o perfil estiver pronto, você precisará baixá-lo para o seu Mac e instalá-lo. Durante o processo de instalação, você precisará especificar usernmae_ldap e password_ldap do usuário:
iOS
O processo é semelhante ao macOS. Você precisa usar um perfil (você pode usar o mesmo do macOS. Veja acima como criar um perfil no Apple Configurator).
Baixe o perfil, instale, insira as credenciais, conecte-se:
Isso é tudo. Configuramos o servidor Radius, sincronizamos com o FreeIPA e informamos aos pontos de acesso da Ubiquiti para usarem WPA2-EAP.
Possíveis perguntas
AT: como transferir um perfil/certificado para um funcionário?
Sobre: Armazeno todos os certificados/perfis em FTP com acesso via web. Configurei uma rede para convidados com limite de velocidade e acesso apenas à Internet, com exceção do FTP.
A autenticação dura 2 dias, após os quais é reiniciada e o cliente fica sem Internet. Que. Quando um funcionário deseja se conectar ao WiFi, ele primeiro se conecta à rede de convidados, faz login no FTP, baixa o certificado ou perfil necessário, instala-os e, em seguida, pode se conectar à rede corporativa.
AT: por que não usar um esquema com MSCHAPv2? é mais seguro!
Sobre: em primeiro lugar, este esquema funciona bem em NPS (Windows Network Policy System), em nossa implementação é necessário configurar adicionalmente o LDAP (FreeIpa) e armazenar hashes de senha no servidor. Adicionar. Não é aconselhável fazer configurações, pois isso pode levar a vários problemas de sincronização do sistema de ultrassom. Em segundo lugar, o hash é MD4, por isso não adiciona muita segurança
AT: É possível autorizar dispositivos usando endereços MAC?
Sobre: NÃO, isso não é seguro, um invasor pode falsificar endereços MAC e, mais ainda, a autorização por endereços MAC não é suportada em muitos dispositivos
AT: Por que usar todos esses certificados? você pode se conectar sem eles
Sobre: certificados são usados para autorizar o servidor. Aqueles. Ao se conectar, o dispositivo verifica se é um servidor confiável ou não. Se sim, então a autenticação prossegue; caso contrário, a conexão é encerrada. Você pode se conectar sem certificados, mas se um invasor ou vizinho configurar um servidor radius e um ponto de acesso com o mesmo nome que o nosso em casa, ele poderá interceptar facilmente as credenciais do usuário (não se esqueça que elas são transmitidas em texto não criptografado) . E quando um certificado for usado, o inimigo verá em seus logs apenas nosso nome de usuário fictício - convidado ou cliente e um erro de tipo - Certificado CA desconhecido
um pouco mais sobre o macOSNormalmente, no macOS, a reinstalação do sistema é feita pela Internet. No modo de recuperação, o Mac deve estar conectado ao WiFi, e nem o WiFi corporativo nem a rede de convidados funcionarão aqui. Pessoalmente instalei outra rede, a usual WPA2-PSK, oculta, apenas para operações técnicas. Ou você também pode criar uma unidade flash USB inicializável com o sistema antecipadamente. Mas se o seu Mac for posterior a 2015, você também precisará encontrar um adaptador para esta unidade flash)
Fonte: habr.com