
Oggi voglio condividere come configurare un server di autenticazione a due fattori per proteggere la rete aziendale, i siti, i servizi, ssh. Sul server funzionerà la combinazione: LinOTP + FreeRadius.
A cosa ci serve?
È una soluzione completamente gratuita e comoda, all'interno della propria rete, non dipendente da provider esterni.
Questo servizio è molto utile, piuttosto chiaro, a differenza di altri prodotti open source e supporta un'enorme quantità di funzionalità e politiche (ad esempio login+password+(PIN+OTPToken)). Si integra tramite API con i servizi di invio sms (LinOTP Config->Provider Config->SMS Provider), genera codici per app mobili come Google Authenticator e molto altro. Lo considero più comodo rispetto al servizio preso in considerazione in .
Questo server funziona perfettamente con Cisco ASA, server OpenVPN, Apache2 e praticamente con qualsiasi cosa supporti l'autenticazione tramite server RADIUS (ad esempio per SSH nei data center).
Richiesto:
1 ) Debian 8 (jessie) — Fondamentale! (l'installazione di prova su debian 9 è descritta alla fine dell'articolo)
Inizio:
Installiamo Debian 8.
Aggiungiamo il repository LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listAggiungiamo le chiavi:
# gpg --search-keys 913DFF12F86258E5A volte, durante un'installazione "pulita", dopo aver eseguito questo comando, Debian restituisce:
gpg: creata directory `\/root\/.gnupg'\ngpg: nuovo file di configurazione creato `\/root\/.gnupg\/gpg.conf'\ngpg: ATTENZIONE: i parametri in `\/root\/.gnupg\/gpg.conf' non sono ancora attivi in questa esecuzione\ngpg: creata tabella delle chiavi `\/root\/.gnupg\/secring.gpg'\ngpg: creata tabella delle chiavi `\/root\/.gnupg\/pubring.gpg'\ngpg: server delle chiavi non impostato (usa --keyserver)\ngpg: errore nella ricerca sul server delle chiavi: URI non valido
Questa è la configurazione iniziale di gnupg. Niente di grave. Basta eseguire di nuovo il comando.
Alla domanda di Debian:
gpg: ricerca "913DFF12F86258E5" sul server hkp keys.gnupg.net\n(1)\tLSE LinOTP2 Packaging <linotp2@lsexperts.de>\n\t chiave RSA da 2048 bit F86258E5, creata: 2010-05-10\nChiave 1-1 di 1 per "913DFF12F86258E5". Inserire il numero, N) Successivo o Q) Uscita>Rispondiamo: 1
Successivamente:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInstalliamo mysql. In teoria, si può utilizzare un altro server sql, ma per semplicità userò questo, come consigliato per LinOTP.
(ulteriori informazioni, compresa la riconfigurazione del database LinOTP sono disponibili nella documentazione ufficiale su . Lì puoi trovare anche il comando: dpkg-reconfigure linotp per modificare i parametri se hai già installato mysql).
# apt-get install mysql-server# apt-get update (controllare nuovamente gli aggiornamenti non guasta)
Installiamo LinOTP e moduli aggiuntivi:
# apt-get install linotp Rispondiamo alle domande dell'installatore:
Utilizzare Apache2: sì
Inventate una password per l'admin Linotp: «LaVostraPassword»
Generare un certificato autofirmato?: sì
Utilizzare MySQL?: sì
Dove si trova il database: localhost
Creiamo il database LinOTP (nome del database) sul server: LinOTP2
Creiamo un utente separato per il database: LinOTP2
Impostiamo la password per l'utente: «LaTuaPassword»
Creare il database ora? (qualcosa del tipo “Sei sicuro di voler ...”): sì
Inseriamo la password root di MySQL che abbiamo creato durante l'installazione: «LaTuaPassword»
Fatto.
(opzionale, si può anche non impostare)
# apt-get install linotp-adminclient-cli (opzionale, si può anche non impostare)
# apt-get install libpam-linotp E ora la nostra interfaccia web Linotp è disponibile all'indirizzo:
"<b>https<\/b>: \/\/IP_server\/manage"Parlerò delle impostazioni nell'interfaccia web più avanti.
Ora, la cosa più importante! Alziamo FreeRadius e lo colleghiamo a Linotp.
Installiamo FreeRadius e il modulo per LinOTP
# apt-get install freeradius linotp-freeradius-perlfacciamo un backup delle configurazioni client e Users di FreeRadius.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldCreiamo un file client vuoto:
# touch /etc/freeradius/clients.confModifichiamo il nostro nuovo file di configurazione (il file di configurazione di backup può essere utilizzato come esempio)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # password per la connessione dei client
}Poi creiamo il file users:
# touch /etc/freeradius/usersModifichiamo il file, dicendo a FreeRadius che utilizzeremo perl per l'autenticazione.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlPoi modifichiamo il file /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlDobbiamo specificare il percorso allo script perl linotp nel parametro module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Poi creiamo un file in cui diciamo da quale (dominio, database o file) prelevare i dati.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_del_tuo_server_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseQui mi fermerò un attimo di più, perché è importante:
Descrizione completa del file con commenti:
#IP of the linotp server (IP адрес нашего LinOTP сервера)
URL=https://172.17.14.103/validate/simplecheck
#Наша область которую мы создадим в веб интерфейсе LinOTP.)
REALM=rearm1
#Имя группы юзверей которая создается в вебморде LinOTP.
RESCONF=flat_file
#optional: comment out if everything seems to work fine
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out (SSL если мы создаем свой сертификат и хотим его проверять)
SSL_CHECK=False
Poi creiamo il file /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpE copiamo la configurazione (non è necessario modificare nulla):
authorize {
#normalizes malformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
# If you are using multiple kinds of realms, you probably
# want to set "ignore_null = yes" for all of them.
# Otherwise, when the first style of realm doesn't match,
# the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
# Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentication to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}Poi creeremo un link simbolico:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledPersonalmente elimino i siti predefiniti di Radius, ma se ne hai bisogno, puoi modificare la loro configurazione oppure disabilitarli.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Ora torniamo all'interfaccia web e analizziamo un po' più nel dettaglio:
In alto a destra facciamo clic su LinOTP Config -> UserIdResolvers ->Nuovo
Scegliamo ciò che vogliamo: LDAP (AD win, LDAP samba), SQL, o utenti locali di sistema Flatfile.
Compiliamo i campi richiesti.
Successivamente creiamo i REALM:
In alto a destra facciamo clic su LinOTP Config ->Realms ->Nuovo.
e diamo un nome al nostro REALM e facciamo clic su UserIdResolvers creato in precedenza.
Tutti questi dati sono necessari per freeRadius nel file /etc/linotp2/rlm_perl.ini, come ho accennato prima, quindi, se non lo hai modificato prima, fallo ora.
Tutto è configurato.
Supplemento:
Configurazione di LinOTP su Debian 9:
Installazione:
# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list # apt-get install dirmngr# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update# apt-get install mysql-server(per impostazione predefinita, su Debian 9 mysql (mariaDB) non richiede di impostare una password per l'utente root, ovviamente puoi lasciarla vuota, ma se leggi le notizie, ciò porta spesso a «epic failures», quindi lo imposteremo comunque)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('qui_password') WHERE User = 'root';
exit# apt-get install linotp# apt-get install linotp-adminclient-cli# apt-get install python-ldap# apt install freeradius# nano /etc/freeradius/3.0/sites-enabled/linotpIncolliamo il codice (inviato da JuriM, grazie a lui!):
server linotp {
listen {
ipaddr = *
port = 1812
type = auth
}
listen {
ipaddr = *
port = 1813
type = acct
}
authorize {
preprocess
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
perl
}
}
accounting {
unix
}
}
Modifichiamo /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Sfortunatamente, su Debian 9 la libreria radius_linotp.pm non è presente nei repository, quindi la prenderemo da github.
# apt install git# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl# cd linotp-auth-freeradius-perl/# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pmora modifichiamo /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = tuapassword
}
ora modifichiamo nano /etc/linotp2/rlm_perl.ini
Incolliamo lì lo stesso codice di quando è stato installato su Debian 8 (descritto sopra)
in teoria è tutto. (non ancora testato)
Lascerò qui sotto alcuni link sulla configurazione dei sistemi che richiedono più frequentemente la protezione con autentificazione a due fattori:
Configurazione dell'autenticazione a due fattori in
(là si utilizza un altro server di generazione token, ma le impostazioni della stessa ASA sono le stesse).
Configurazione (là si utilizza anche LinOTP) — grazie all'autore. Qui puoi trovare anche cose interessanti sulla configurazione delle politiche di LinOTP.
Inoltre, molti CMS di siti web supportano l'autenticazione a due fattori (per WordPress LinOTP ha anche il proprio modulo dedicato su ), ad esempio, se desideri creare una sezione protetta per i dipendenti della tua azienda sul tuo sito aziendale.
FATTO IMPORTANTE! NON selezionare l'opzione «Google authenticator» per utilizzare il Google Authenticator! Il QR code non sarà leggibile in questo modo... (fatto strano)
Per scrivere l'articolo sono state utilizzate informazioni dei seguenti articoli:
Grazie agli autori.
Fonte: habr.com
