Server di autenticazione a due fattori LinOTP

Server di autenticazione a due fattori LinOTP

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 abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer..

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.list

Aggiungiamo le chiavi:

# gpg --search-keys 913DFF12F86258E5

A 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 update

Installiamo 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 link. 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-perl

facciamo 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.old

Creiamo un file client vuoto:

# touch /etc/freeradius/clients.conf

Modifichiamo il nostro nuovo file di configurazione (il file di configurazione di backup può essere utilizzato come esempio)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # password per la connessione dei client
}

Poi creiamo il file users:

# touch /etc/freeradius/users

Modifichiamo il file, dicendo a FreeRadius che utilizzeremo perl per l'autenticazione.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Poi modifichiamo il file /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Dobbiamo 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.ini

URL=https://IP_del_tuo_server_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Qui 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/linotp

E 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-enabled

Personalmente 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 -p
use 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/linotp

Incolliamo 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.pm

ora 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 Apache2

Impostazione con Cisco ASA(là si utilizza un altro server di generazione token, ma le impostazioni della stessa ASA sono le stesse).

VPN con autenticazione a due fattori

Configurazione autenticazione a due fattori in ssh (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 github), 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:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Grazie agli autori.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster