
Oggi voglio condividere come impostare un server di autenticazione a due fattori per proteggere la rete aziendale, siti, servizi e SSH. Sul server funzioneranno insieme: LinOTP + FreeRadius.
A cosa serve?
È una soluzione completamente gratuita e conveniente, all'interno della propria rete, indipendente da provider esterni.
Questo servizio è molto utile, abbastanza intuitivo, a differenza di altri prodotti open source, e supporta un'ampia gamma di funzionalità e politiche (ad esempio login+password+(PIN+OTPToken)). Si integra tramite API con servizi di invio SMS (LinOTP Config->Provider Config->SMS Provider), genera codici per applicazioni mobili come Google Authenticator e molto altro. Credo sia più user-friendly rispetto al servizio preso in considerazione in .
Questo server funziona eccellentemente con Cisco ASA, server OpenVPN, Apache2, e praticamente con tutto ciò che supporta l'autenticazione tramite server RADIUS (ad esempio per SSH nei data center).
Requisiti:
1) Debian 8 (jessie) — Obbligatorio! (l'installazione di prova su Debian 9 è descritta alla fine dell'articolo)
Inizio:
Installa Debian 8.
Aggiungi il repository LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listAggiungi le chiavi:
# gpg --search-keys 913DFF12F86258E5A volte, durante un'installazione "pulita", dopo aver eseguito questo comando, Debian restituisce:
gpg: creata la cartella `/root/.gnupg`
gpg: creato un nuovo file di configurazione `/root/.gnupg/gpg.conf`
gpg: ATTENZIONE: le impostazioni in `/root/.gnupg/gpg.conf` non sono ancora attive in questa esecuzione
gpg: creata la tabella delle chiavi `/root/.gnupg/secring.gpg`
gpg: creata la tabella delle chiavi `/root/.gnupg/pubring.gpg`
gpg: server di chiavi non impostati (usa --keyserver)
gpg: errore nella ricerca sul server di chiavi: URI non valido
Questa è la configurazione iniziale di gnupg. Nessun problema. Esegui semplicemente di nuovo il comando.
Alla domanda di Debiana:
gpg: ricerca "913DFF12F86258E5" sul server hkp keys.gnupg.net
(1) LSE LinOTP2 Packaging <linotp2@lsexperts.de>
chiave RSA 2048 bit F86258E5, creata: 2010-05-10
Chiavi 1-1 di 1 per "913DFF12F86258E5". Inserisci i numeri, N) Successivo o Q) Uscita>Rispondiamo: 1
Avanti:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateStiamo installando mysql. In teoria, è possibile utilizzare un altro server sql, ma per semplicità userò questo, raccomandato per LinOTP.
(informazioni aggiuntive, incluse quelle sulla riconfigurazione del database LinOTP, possono essere trovate nella documentazione ufficiale su . Lì, puoi trovare il comando: dpkg-reconfigure linotp per modificare le impostazioni se hai già installato mysql).
# apt-get install mysql-server# apt-get update (controllare nuovamente gli aggiornamenti non fa mai male)
Stiamo installando LinOTP e moduli aggiuntivi:
# apt-get install linotp Rispondiamo alle domande dell'installatore:
Utilizzare Apache2: sì
Crea una password per admin Linotp: «IlTuoPassword»
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: «IlTuoPassword»
Creare il database adesso? (qualcosa come “Sei sicuro di voler …”): sì
Inserisci la password root di MySQL che hai creato durante l'installazione: «IlTuoPassword»
Fatto.
(opzionale, può anche essere omesso)
# apt-get install linotp-adminclient-cli (opzionale, può anche essere omesso)
# apt-get install libpam-linotp Ora la nostra interfaccia web Linotp è disponibile all'indirizzo:
"<b>https<\/b>: \/\/IP_server\/manage"Parlerò delle impostazioni nell'interfaccia web tra poco.
Ora, la cosa più importante! Avviamo FreeRadius e lo colleghiamo a Linotp.
Installiamo FreeRadius e il modulo per LinOTP
# apt-get install freeradius linotp-freeradius-perlFacciamo il 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 il collegamento dei clienti
}Successivamente 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 := perlDopo modifichiamo il file /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlDobbiamo specificare il percorso allo script perl linotp nel parametro modulo:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Successivamente creiamo un file che specifica 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 per approfondire, poiché è 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
Proseguiamo creando il file /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpE incolliamo il config (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
}Successivamente creiamo un link simbolico:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledPersonalmente, devo disabilitare i siti default di Radius, ma se ti servono, puoi modificarne la 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 approfondiamo un po' di più:
In alto a destra clicchiamo su LinOTP Config -> UserIdResolvers -> Nuovo
Scegliamo cosa vogliamo: LDAP (AD win, LDAP samba), SQL, o utenti locali del sistema Flatfile.
Compiliamo i campi richiesti.
Successivamente creiamo i REALMS:
In alto a destra clicchiamo su LinOTP Config -> Realms -> Nuovo.
Diamo un nome al nostro REALM e clicchiamo anche sul UserIdResolvers creato in precedenza.
Tutti questi dati sono necessari per freeRadius nel file /etc/linotp2/rlm_perl.ini, come ho scritto sopra, quindi, se non lo hai modificato, fallo ora.
Server configurato.
Supplement:
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, in Debian 9 mysql (mariaDB) non offre di impostare la password dell'utente root, certo puoi lasciarla vuota, ma se leggi le notizie, questo porta molto spesso a «epic fail», quindi la imposteremo comunque)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('qui_è_la_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 {
Tipo di autenticazione Perl {
perl
}
}
contabilità {
unix
}
}
Modifica /etc/freeradius/3.0/mods-enabled/perl
perl {
nome file = /usr/share/linotp/radius_linotp.pm
funz_authenticate = authenticate
funz_authorize = authorize
}
Purtroppo in Debian 9 la libreria radius_linotp.pm non viene installata dai 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
segreto = вашпароль
}
ora modifichiamo nano /etc/linotp2/rlm_perl.ini
Inseriamo lo stesso codice che abbiamo usato per l'installazione su Debian 8 (descritto sopra)
in teoria dovrebbe andare tutto bene. (non ancora testato)
Lascerò qui sotto alcuni link sulla configurazione dei sistemi che di solito richiedono autenticazione a due fattori:
Configurazione dell'autenticazione a due fattori in
(qui viene utilizzato un altro server per la generazione dei token, ma le impostazioni dell'ASA sono le stesse).
Impostazione (qui si utilizza anche LinOTP) — grazie all'autore. Qui si possono trovare anche informazioni interessanti sulla configurazione delle politiche LiOTP.
Anche cms di molti siti supportano l'autenticazione a due fattori (per WordPress, LinOTP ha anche il suo modulo speciale su ), ad esempio, se desideri creare una sezione protetta per i dipendenti dell'azienda sul tuo sito aziendale.
FATTO IMPORTANTE! NON selezionare la casella «Google authenticator» per utilizzare l'autenticatore di Google! Il codice QR non sarà leggibile in quel caso… (fatto strano)
Per la redazione dell'articolo sono state utilizzate le informazioni dei seguenti articoli:
Grazie agli autori.
Fonte: habr.com
