/ Radius

Guide - FreeRadius : VLAN et Active Directory

Pour protéger l'accès à son réseau aux inconnus, FreeRadius est la réponse et se montre être la solution redoutable pour se débarrasser de toute personne étrangère essayant de se connecter au réseau informatique, sans authentification le poste de la personne se verra immédiatement refuser.

Prérequis :

  • Debian 9
  • Contrôleur de domaine Active Directory (Windows Server 2012 R2 au minimum)

1 - Installation des prérequis

apt update && apt install freeradius freeradius-utils samba winbind samba-common-bin krb5-user -y

2 - Installation, configuration de Kerberos et intégration dans l’Active Directory

nano /etc/krb5.conf

default_realm = MATEOFIX.XYZ

[realms]
MATEOFIX.XYZ = {
 kdc = Apollon.MATEOFIX.XYZ # Serveur Active Directory
 admin_server = Apollon.MATEOFIX.XYZ
 default_domain = MATEOFIX.XYZ # Domaine
 }

[domain_realm]
.MATEOFIX.XYZ = MATEOFIX.XYZ
MATEOFIX.XYZ = MATEOFIX.XYZ

Après la configuration de Kerberos, on effectue une demande de ticket avec un compte administrateur Active Directory.

kinit Administrateur@MATEOFIX.XYZ

Après avoir saisi le mot de passe, le résultat de la commande ne doit rien retourner. Si cela ne fonctionne pas il faut peut-être mettre le nom de domaine tout en minuscule (cela dépend de la configuration dans le Kerberos).

klist

Valid starting Expires Service principal
21/06/2017 16:23:17 22/06/2017 02:23:17 krbtgt/MATEOFIX.XYZ@MATEOFIX.XYZ
renew until 22/06/2017 16:23:13

mv /etc/samba/smb.conf /etc/samba/smb.conf.bak

nano /etc/samba/smb.conf

[global]
workgroup = MATEOFIX
server string = %h server
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
security = ads
realm = MATEOFIX.XYZ
password server = Apollon.mateofix.xyz
winbind use default domain = yes
domain master = no
local master = no
preferred master = no
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = no
encrypt passwords = true

On redémarre samba

service smbd restart

On rejoint notre domaine Active Directory.

net ads join -U Administrateur

Si vous obtenez le même message que ci-dessous c'est que votre serveur est bien dans le domaine Active Directory.

Enter Administrateur's password:
Using short domain name -- MATEOFIX
Joined 'RADIUS' to dns domain 'MATEOFIX.XYZ'

On redémarre winbind pour qu'il puisse récupérer la liste des comptes utilisateurs.

service winbind restart

On vérifie que la connexion avec winbind fonctionne parfaitement, il faut avoir le même message que ci-dessous.

wbinfo –t

checking the trust secret for domain MATEOFIX via RPC calls succeeded

Enfin, on affiche la liste des comptes utilisateurs Active Directory.

wbinfo –u

MATEOFIX\administrateur
MATEOFIX\mateofix
MATEOFIX\p.chany
MATEOFIX\d.eveno

On vérifie que l’authentification NTLM fonctionne.

ntlm_auth --request-nt-key --domain=MATEOFIX --username=d.eveno

Si vous avez le même résultat que ci-dessous c'est que la partie la plus importante est terminée.

Password:
NT_STATUS_OK: Success (0x0)

Maintenant, on passe à la configuration de FreeRadius !

3 - Installation et configuration de FreeRadius

On commence d’abord par configurer EAP la méthode d’authentification qu’utilise Windows

nano /etc/freeradius/3.0/mods-enabled/eap

eap {
 default_eap_type = ttls
 timer_expire = 60
 ignore_unknown_eap_types = no
 cisco_accounting_username_bug = no
 max_sessions = ${max_requests}
 tls {
 private_key_password = whatever
 private_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
 certificate_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
 ca_file = /etc/ssl/certs/ca-certificates.crt
 dh_file = ${certdir}/dh
 random_file = /dev/urandom
 CA_path = ${cadir}
 cipher_list = "DEFAULT"
 ecdh_curve = "prime256v1"
 cache {
 enable = no
 lifetime = 24 # hours
 max_entries = 255
 }
 }
 ttls {
 default_eap_type = mschapv2
 copy_request_to_tunnel = yes
 use_tunneled_reply = yes
 virtual_server = "inner-tunnel"
 }
 peap {
 default_eap_type = mschapv2
 copy_request_to_tunnel = yes
 use_tunneled_reply = yes
 virtual_server = "inner-tunnel"
 }
 mschapv2 { }
}

On configure le module MSCHAP qui permet l’authentification avec le serveur Active Directory.

nano /etc/freeradius/3.0/mods-enabled/mschap

mschap {
 use_mppe=yes
 require_encryption = yes
 require_strong = yes
 with_ntdomain_hack = yes
 ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-UserName}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --ntresponse=%{%{mschap:NT-Response}:-00}"
}

On peut tout de même vérifier la présence de « ntlm_auth » afin d’éviter une erreur inutile.

find / -name ntlm_auth

Le résultat ci-dessous montre où se trouve NTLM.

/etc/freeradius/3.0/mods-available/ntlm_auth

/usr/bin/ntlm_auth

Maintenant on configure le proxy pour le relayage avec d’autres serveurs RADIUS.

nano /etc/freeradius/3.0/proxy.conf

proxy server {
 default_fallback = no
}
realm NULL {
}
realm LOCAL {
}
realm mateofix.xyz {
 authhost = LOCAL
 accthost = LOCAL
}
realm DEFAULT {
 type = radius
 authhost = LOCAL
 accthost = LOCAL
 secret = proxysharedsecret
 nostrip
}
}

On ajoute ensuite nos clients RADIUS pour qu’ils puissent avoir l’autorisation d’interroger les serveurs RADIUS, pour ne pas rajouter commutateur par commutateur et comme chaque équipement réseau est en 172.16.2.X/16 on peut englober tous nos clients en indiquant un 172.16.2.0/24 dans la configuration.

nano /etc/freeradius/3.0/clients.conf

client 172.16.2.0/24 {
 secret = motdepasseSecret
}

Le secret ci-dessus est celui qu’il faudra indiquer sur nos commutateurs.

on va autoriser l’intégralité des utilisateurs se trouvant dans le contrôleur de domaine Active Directory à se connecter sur le réseau.

nano /etc/freeradius/3.0/users

daenerys Cleartext-Password := "******" # Utilisateur local

DEFAULT Auth-Type = "ntlm_auth"
 Tunnel-Type = "VLAN",
 Tunnel-Medium-Type = "IEEE-802",
 Tunnel-Private-Group-id = "80"

La valeur 80 correspond au numéro du VLAN servant pour l'authentification, vous avez le choix du numéro que vous voulez, cela dépend de votre infrastructure !

On change le nom de domaine du module NTLM_AUTH.

ln -s /etc/freeradius/3.0/mods-enabled/ntlm_auth /etc/freeradius/3.0/mods-available/ntlm_auth && nano /etc/freeradius/3.0/mods-available/ntlm_auth

exec ntlm_auth {
wait = yes
program = "/usr/bin/ntlm_auth --request-nt-key --domain=MATEOFIX --username=%{mschap:User-Name} --password=%{User-Password}"
}

On ajoute le module NTLM_AUTH pour que cela fonctionne avec FreeRadius.

nano /etc/freeradius/3.0/policy.d/ntlm_auth

ntlm_auth.authorize {
    if (!control:Auth-Type && User-Password) {
        update control {
            Auth-Type := ntlm_auth
        }
    }
}

nano /etc/freeradius/3.0/sites-enabled/default

authorize {
ntlm_auth
eap
}

authenticate {

Auth-Type ntlm_auth {
ntlm_auth
}

}

nano /etc/freeradius/3.0/sites-enabled/inner-tunnel

La ligne ci-dessous doit être présente deux fois.

authenticate { 
...
}

use_tunneled_reply = yes

post-auth {
use_tunneled_reply = yes
}

C'est terminée, il reste plus qu'à redémarrer les services de FreeRadius.

service freeradius restart

Si aucune erreur ne s'affiche, vous pouvez maintenant configurer votre commutateur, la configuration que je donne ci-dessous est celle d'un Cisco Catalyst 2960.

5 - Configuration du client FreeRadius

en

conf t

hostname SwitchCico1

ip default-gateway 172.16.2.100

dot1x system-auth-control # Activation de DOT1X

username d.eveno password ******

enable password ******

service password-encryption

no loggin console

line console 0
 login local
 exit

line vty 0 4
 login local
 exit

# Configuration du vlan par défaut pour le management
int vlan 1
 ip address 172.16.2.182 255.255.0.0
 no sh
 exit

# Configuration Radius
aaa new-model
aaa authentication login default group radius local
aaa authentication dot1x default group radius
aaa authorization exec default group radius
aaa authorization network default group radius

# Redondance des serveurs FreeRadius
radius-server host 172.16.0.10 auth-port 1812 acct-port 1813 key ******
radius-server host 172.16.0.67 auth-port 1812 acct-port 1813 key ******
radius-server dead-criteria time 10 tries 2
radius-server deadtime 1
radius-server load-balance method least-outstanding

# Obligation d'authentification radius sur ces ports
int range fa0/1-46
 switchport mode access
 switchport access vlan 1
 authentication event fail action next-method
 authentication event server dead action reinitialize vlan 3
 authentication event server alive action reinitialize
 authentication host-mode multi-auth
 authentication timer reauthenticate server
 authentication port-control auto
 dot1x auth-fail max-attempts 1
 dot1x pae authenticator
 spanning-tree portfast
exit

# Filtrage par adresse MAC pour l'interconnexion réseau
int range fa0/47-48
 switchport mode access
 switchport port-security
 switchport port-security mac-address sticky
 switchport port-security violation protect
 spanning-tree portfast
 exit

La configuration de FreeRadius touche à sa fin, pour qu'un poste informatique puisse s'authentifier il faut suivre la démarche que je vous laisse découvrir sur ce lien.