Autenticação 802.1x em redes
com fio: Estudo de caso do DCC
Alison Carmo Arantes
CSIRT PoP-MG/RNP - DCC/ICEX/UFMG
OBJETIVOS DESTA APRESENTAÇÃO
● Mostrar a motivação para o uso de 802.1x em
redes com fio
● Conceitos de 802.1x
● Apresentar alguns detalhes de configuração
(para referência) e melhor entendimento.
● Universidade é um ambiente aberto e público
● Laboratórios abertos de 07:00h - 22:00h
○ Qualquer um pode acessar
● Proteção da rede
LABORATÓRIOS HETEROGÊNEOS
● Diferentes sistemas operacionais
○ macOS (Lion e Sierra)
○ Windows (7 e 10)
○ Linux (Ubuntu 14 e 16)
● Impressora
● Diferentes sistemas operacionais
○ macOS (Lion e Sierra)
○ Windows (7 e 10)
○ Linux (Ubuntu 14 e 16)
● Impressora
PADRÃO IEEE 802.1X
● Padrão IEEE para controle de acesso baseado em porta
● Mecanismo para autenticação de dispositivos em
portas de uma LAN
● Baseado no protocolo EAPOL (Extensible
Authentication Protocol Over Lan) - Encapsula o EAP
utilizando segmentos de ethernet
● Versões:
○ IEEE 802.1x 2001
● Solução necessita de 3 componentes
○
Supplicant (Windows/Linux/Mac/Impressora)
○
Authenticator (Dispositivo de Rede:
Switch ou Wireless Access Point)
802.1X
● Solução necessita de 3 componentes
○
Supplicant (Windows/Linux/Mac/Impressora)
○
Authenticator (Dispositivo de Rede:
Switch ou Wireless Access Point)
● Solução necessita de 3 componentes
○
Supplicant (Windows/Linux/Mac/Impressora)
○
Authenticator (Dispositivo de Rede:
Switch ou Wireless Access Point)
●
Utilizando versão 3.0
●
Simples de instalar
●
“Simples” de configurar
●
Criação da CA e certificado do servidor radius
●
Geração de certificados no servidor Radius para os clientes
●
Configuração do mods-enable/eap
●
Configuração do clients.conf
Servidor de Autenticação - FreeRadius
●
Utilizando versão 3.0
●
Simples de instalar
●
“Simples” de configurar
●
Criação da CA e certificado do servidor radius
●
Geração de certificados no servidor Radius para os clientes
●
Configuração do mods-enable/eap
●
Configuração do clients.conf
●
Configuração do users
“The configuration for 3.0 is
*largely* compatible with the 2.x.x
configuration. However, it is NOT
possible to simply use the 2.x.x
configuration as-is. Instead, you
should re-create it.”
mods-enable/eap
default_eap_type = tls
private_key_password =
senha
private_key_file =
${certdir}/key.pem
certificate_file =
${certdir}/cert.pem
ca_file =
${cadir}/ca.pem
dh_file = ${certdir}/dh
ca_path = ${cadir}
Servidor de Autenticação - FreeRadius
clients.conf
client lab1 {
ipaddr = ipv4
netmask = 32
secret = senha
shortname = lab1salax
}
client reuniao1 {
ipv6addr = ipv6
secret = senha
shortname = reuniao1
}
users
DEFAULT Suffix == ".lab", Reply-Message := "Hello, %{User-Name}"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = 802,
Tunnel-Private-Group-ID = numerovlan,
Extreme-Netlogin-Vlan = nomevlan,
Fall-Through = no
DEFAULT Ldap-Group == "users"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = 802,
Tunnel-Private-Group-ID = numerovlan,
Extreme-Netlogin-Vlan = "nomevlan",
Fall-Through = no
Servidor de Autenticação - FreeRadius
users
DEFAULT Suffix == ".lab", Reply-Message := "Hello, %{User-Name}"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = 802,
Tunnel-Private-Group-ID = numerovlan,
Extreme-Netlogin-Vlan = nomevlan,
Fall-Through = no
DEFAULT Ldap-Group == "users"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = 802,
Tunnel-Private-Group-ID = numerovlan,
Extreme-Netlogin-Vlan = "nomevlan",
Fall-Through = no
Fall - Through = Yes
Continua seguindo o
arquivo até o final
#create vlan
net-guest
#configure radius netlogin primary shared-secret
“senha”
#configure radius netlogin primary server
ip.do.radius
numero.porta.radius1
client-ip
ip.do.switch
vr
VR-Default
#configure radius-accounting netlogin primary shared-secret
"senha"
#configure radius-accounting netlogin primary server
ip.do.radius
numero.porta.radius
client-ip
ip.do.switch
vr
VR-Default
#enable radius netlogin
Autenticador - Switch Extreme
# configure netlogin vlan
net-guest
# enable netlogin dot1x
# configure netlogin dot1x timers server-timeout
30
# configure netlogin dot1x timers supp-resp-timeout
30
# configure netlogin dot1x eapol-transmit-version
v2
# configure netlogin session-refresh
600
# enable netlogin ports
portaInicial-portaFinal
dot1x
#
save
●
Extremamente fácil de configurar
●
Copiar para o supplicant o arquivo de CA e o arquivo de certificado do cliente
criado anteriormente
Criar o arquivo /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=0
fast_reauth=1
eapol_version=
2
network={
ssid=
"lab"
key_mgmt=IEEE8021X
eap=TLS
identity=
"nomedocliente"
ca_cert=
"/caminho/arquivodaCA.pem"
private_key=
"/etc/ssl/certs/nomedocliente.p12"
private_key_passwd=
"senhadocertificadodocliente"
eapol_flags=0
}
Permissões restritivas para os
arquivos de CA, certificado e
wpa_supplicant
Supplicant - Windows (7 e 10)
●
Mesma ideia: copiar certificado da CA e do cliente e habilitar o
●
Mesma ideia: copiar certificado da CA e do cliente e habilitar o
serviço de 802.1x
Favor não cochilar!
Os próximos slides
serão chatos mas
relevantes.
Mesmo procedimento para
importar o certificado do
cliente mas usar a pasta
A aba autenticação só
aparece se o serviço
dot3sv estiver habilitado
Supplicant - Windows (7 e 10)
A aba autenticação só
aparece se o serviço
dot3sv estiver habilitado
Supplicant - macOS
●
OS X Server com Profile Manager
Você achou que
seria tão fácil?
Supplicant - macOS
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadCertificateFileName</key>
<string>ca.der</string>
<key>PayloadContent</key>
<data>
DATACABASE64
</data>
<key>PayloadDescription</key>
<string>Adds a CA root certificate</string>
<key>PayloadDisplayName</key>
<string>
Nome
</string>
<key>PayloadIdentifier</key>
<string>com.apple.security.root.11111111-1111-1111-1111-111111111111</string>
<key>PayloadType</key>
<string>com.apple.security.root</string>
<key>PayloadUUID</key>
<string>11111111-1111-1111-1111-111111111111</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
<key>AutoJoin</key> <true/> <key>EAPClientConfiguration</key> <dict> <key>AcceptEAPTypes</key> <array> <integer>13</integer> </array> </dict> <key>EncryptionType</key> <string>WPA</string> <key>HIDDEN_NETWORK</key> <false/> <key>Interface</key> <string>FirstActiveEthernet</string> <key>PayloadDisplayName</key> <string>Ethernet</string> <key>PayloadEnabled</key> <true/> <key>PayloadCertificateUUID</key> <string>22222222-2222-2222-2222-222222222222</string> <key>PayloadDescription</key>
<string>Configures Wi-Fi settings</string> <key>PayloadIdentifier</key> <string>com.apple.wifi.managed.33333333-3333-3333-3333-333333333333</string> <key>PayloadType</key> <string>com.apple.firstactiveethernet.managed</string> <key>PayloadUUID</key> <string>44444444-4444-4444-4444-444444444444</string> <key>PayloadVersion</key> <real>1</real> <key>ProxyType</key> <string>None</string> <key>SetupModes</key> <array> <string>System</string> </array> </dict>
Supplicant - macOS
<dict>
<key>Password</key>
<string>INSERIRSENHAAQUI</string> <key>PayloadCertificateFileName</key> <string>nomecertificado.p12</string> <key>PayloadContent</key>
<data>
DATABASECERTP1264
</data>
<key>PayloadDescription</key>
<string>Adds a PKCS#12-formatted certificate</string> <key>PayloadDisplayName</key> <string>cliente.p12</string> <key>PayloadIdentifier</key> <string>com.apple.security.pkcs12.55555555-5555-5555-5555-555555555555</string> <key>PayloadType</key> <string>com.apple.security.pkcs12</string> <key>PayloadUUID</key> <string>55555555-5555-5555-5555-555555555555</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDisplayName</key> <string>Mac8021x</string> <key>PayloadIdentifier</key> <string>cliente.local</string> <key>PayloadOrganization</key> <string>Organizacao/string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>66666666-6666-6666-6666-666666666666</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
<key>Password</key>
<string>INSERIRSENHAAQUI</string> <key>PayloadCertificateFileName</key> <string>nomecertificado.p12</string> <key>PayloadContent</key>
<data>
DATABASECERTP1264
</data>
<key>PayloadDescription</key>
<string>Adds a PKCS#12-formatted certificate</string> <key>PayloadDisplayName</key> <string>cliente.p12</string> <key>PayloadIdentifier</key> <string>com.apple.security.pkcs12.55555555-5555-5555-5555-555555555555</string> <key>PayloadType</key> <string>com.apple.security.pkcs12</string> <key>PayloadUUID</key> <string>55555555-5555-5555-5555-555555555555</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDisplayName</key> <string>Mac8021x</string> <key>PayloadIdentifier</key> <string>cliente.local</string> <key>PayloadOrganization</key> <string>Organizacao/string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>66666666-6666-6666-6666-666666666666</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>