FreeRadius EAP-TLS

V první řadě je potřebné vygenerovat certifikáty a takto vypadá běžná struktura templatu pro certifikát, ze které budeme vycházet.

[ ca ]
default_ca		= CA_default

[ CA_default ]
dir			= ./
certs			= $dir
crl_dir			= $dir/crl
database		= $dir/index.txt
new_certs_dir		= $dir
certificate		= $dir/ca.pem
serial			= $dir/serial
crl			= $dir/crl.pem
private_key		= $dir/ca.key
RANDFILE		= $dir/.rand
name_opt		= ca_default
cert_opt		= ca_default
default_days		= 730
default_crl_days	= 730
default_md		= sha256
preserve		= no
policy			= policy_match
crlDistributionPoints	= URI:http://www.example.com/example_ca.crl

[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

[ policy_anything ]
countryName		= optional
stateOrProvinceName	= optional
localityName		= optional
organizationName	= optional
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

[ req ]
prompt			= no
distinguished_name	= cacrl
default_bits		= 2048
input_password		= 
output_password		= 
x509_extensions		= v3_ca

[certificate_authority]
countryName		= 
stateOrProvinceName	= Radius
localityName		= 
organizationName	= FreeRadius
emailAddress		= freeradius@localhost 
commonName		= "FreeRadius Certificate Authority"

[v3_ca]
subjectKeyIdentifier	= hash
authorityKeyIdentifier	= keyid:always,issuer:always
basicConstraints	= CA:true
crlDistributionPoints	= URI:http://www.example.com/example_ca.crl

V certifikátu je potřebné upravit common name organizaci a další věci, které jej udělají více jedinečným, jako město firma lokalita atd...

Prvně musíme udělat root certifikát

$ cd /etc/freeradius/3.0/certs/
$ nano ca.cnf

V ca.cnf musíme upravit hlavně hesla, které slouží pro ověření. "input_password" a "output_password"

$ make ca.pem
$ make ca.der

Tímto máme základní root certifikát hotový. ca.der je verze pro Windows (v případě potřeby).

Následně potřebujeme udělat stejným způsobem server certifikát a jednotlivé klientské certifikáty.

$ nano server.cnf
$ make server
$ make server.csr

Tímto mame i serverový certifikát za sebou a server.csr je potřeba pro Windows klienty.

Poslední krok je generování klientských certifikátů.

$ nano client.cnf
$ make client

Klienti se budou lišit rozným commnoName a mailem plus jiné hesla vše ostatní zůstane zachováno.

Následně se podíváme na upravu configů ve Free Radiusu pro zprovoznění EAP-TSL modulu.

clients.conf

v client.conf upravíme nasledující parametry.

client home {
    ipaddr = 192.168.1.10
    proto = *
    secret = !Heslo od APčka pro Radius!
    shortname = !SSID APčka!
    require_message_authenticator = no
    nas_type = other

    limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
    }
}

EAP

Konfigurace eap souboru v mods-enabled

- default_eap_type = md5
+ default_eap_type = tls

-   private_key_password = whatever
+   private_key_password = 
    private_key_file = ${certdir}/server.pem
-   ca_file = ${cadir}/ca.pem
+   ca_file = ${cadir}/cacrl.pem

-   random_file = /dev/urandom
+   random_file = /dev/random

- # check_crl = yes                 
+   check_crl = yes

-   cipher_list = "DEFAULT"
+   cipher_list = "HIGH"

+   cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:
ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA
:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:
DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:
ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:
DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:
DHE-RSA-CAMELLIA256-SHA:DHE-RSA-CAMELLIA128-SHA"

-   ecdh_curve = "prime256v1"
+   ecdh_curve = "secp384r1"
+   ecdh_curve = "secp521r1"

-     #name = "EAP module"
+     name = "EAP-TLS"

-     #persist_dir = "${logdir}/tlscache"
+     persist_dir = "${logdir}/tlscache"

Tímto máme soubor EAP připraven k provozu.

Default

Následuje konfigurace /sites-enabled/default

- ipaddr = *
+ ipv4addr = 192.168.1.1

#  The chap module will set 'Auth-Type := CHAP' if we are
#  handling a CHAP request and Auth-Type has not already been set
- chap
+ # chap

#  the MS-CHAP-Challenge attribute, and add 'Auth-Type := MS-CHAP'
#  to the request, which will cause the server to then use
#  the mschap module for authentication.
- mschap
+ # mschap

#  This module should be listed last, so that the other modules
#  get a chance to set Auth-Type for themselves.

- pap
+ #pap

- Auth-Type PAP {
-   pap
- }
+ #Auth-Type PAP {
+ # pap
+ #}

- Auth-Type CHAP {
-   chap
- }
+ #Auth-Type CHAP {
+ # chap
+ #}

- Auth-Type MS-CHAP {
-   mschap
- }
+ #Auth-Type MS-CHAP {
+ # mschap
+ #}

-#  eap
+ eap

Prvně konfigurujeme IP nasledně vypíname chap mschap pap autentizace a zapneme pouze EAP

TSL

Následuje konfigurace /sites-available/tls

tls {
-   private_key_password = whatever
+   private_key_password = !Vložit heslo ktere jsme vložili do server.cnf jako input_password!
    private_key_file = ${certdir}/server.pem

Touto konfiguraci potrvzujeme TLS heslo a cestu k certifikatu

Google AUTH

Začneme instalací google autentifikatoru

sudo apt-get install libpam-google-authenticator

Následně stačí jen ziskat token pro každeho klienta. Na mnou zvoleném klientovi napíši následující příkaz:

student:$ google-authenticator

Čímž pro studenta projdu základními dotazy jako více připojení časové omezení tokenů atd....

Po prvním ano na časově založené tokeny získame náhraní přístup a také QR kod do aplikace v mobilu.

Naledují dodatečná nastavení vysvětlená na obrazcích výše.

Posledním krokem je přiřadit google AUTH k nějaké službě. V našem případě použijeme ssh

nano /etc/pam.d/sshd

# Standard Un*x password updating.
@include common-password
+ auth required pam_google_authenticator.so nullok

nasledně mužeme restartovat službu.
systemctl restart sshd.service

Tímto vyžadujeme využití google auth a přidaním nullok zajistíme, že uživatele, kteří ještě nemají vygenerovaný token na něj nebudou dotazováni. Je ovšem důležité vědět, že toto nefunguje pro učty z freeradiusu protože on ssh dotazy předavá a neřeší se u klienta proto google auth bude funguvat pouze na lokalní uživatele.

Integrace GoogleAuth do FreeRadiusu

jedna se o konfiguraci a upravu par souborů.

nano radiusd.conf - je potřeba dohledat cestu podle verze FreeRadiusu a Ubuntu

user = root
group = root

Následuje:

nano users


před řádek DEFAULT Framed Protocol == PPP přidáme:

# Instruct FreeRADIUS to use PAM to authenticate users
DEFAULT Auth-Type := PAM

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

nano default

hledáme tyto řádky:

#  Pluggable Authentication Modules.
#  pam
odkomentujeme pam takto:

#  Pluggable Authentication Modules.
pam

Následuje freeradius radiusd, kde přidame 2 řádky a zakomentujeme první 4.

#@include common-auth
#@include common-account
#@include common-password
#@include common-session
auth requisite pam_google_authenticator.so forward_pass
auth required pam_unix.so use_first_pass

Toto by mělo být vše stačí jen otestovat