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 una rete aziendale, siti, servizi, ssh. Il server eseguirà la seguente combinazione: LinOTP + FreeRadius.

Perchè ne abbiamo bisogno?
Si tratta di una soluzione completamente gratuita e conveniente, all'interno della propria rete, indipendente da fornitori terzi.

Questo servizio è molto conveniente, abbastanza visivo, a differenza di altri prodotti open source e supporta anche un numero enorme di funzioni e policy (ad esempio login+password+(PIN+OTPToken)). Attraverso l'API si integra con i servizi di invio sms (LinOTP Config->Provider Config->SMS Provider), genera codici per applicazioni mobile come Google Authentificator e molto altro. Penso che sia più conveniente del servizio discusso in Articolo.

Questo server funziona perfettamente con Cisco ASA, server OpenVPN, Apache2 e in generale con quasi tutto ciò che supporta l'autenticazione tramite un server RADIUS (ad esempio per SSH nel data center).

richiede:

1) Debian 8 (jessie) - Essere sicuri! (l'installazione di prova su Debian 9 è descritta alla fine dell'articolo)

Inizio:

Installazione di Debian 8.

Aggiungi il repository LinOTP:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Aggiunta di chiavi:

# gpg --search-keys 913DFF12F86258E5

A volte durante un'installazione “pulita”, dopo aver eseguito questo comando, Debian visualizza:

gpg: создан каталог `/root/.gnupg'
gpg: создан новый файл настроек `/root/.gnupg/gpg.conf'
gpg: ВНИМАНИЕ: параметры в `/root/.gnupg/gpg.conf' еще не активны при этом запуске
gpg: создана таблица ключей `/root/.gnupg/secring.gpg'
gpg: создана таблица ключей `/root/.gnupg/pubring.gpg'
gpg: не заданы серверы ключей (используйте --keyserver)
gpg: сбой при поиске на сервере ключей: плохой URI

Questa è la configurazione iniziale di gnupg. Va bene. Basta eseguire nuovamente il comando.
Alla domanda di Debian:

gpg: поиск "913DFF12F86258E5" на hkp сервере keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, создан: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  Введите числа, N) Следующий или Q) Выход>

Rispondiamo: 1

Next:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Installa mysql. In teoria puoi usare un altro server SQL, ma per semplicità lo userò come consigliato per LinOTP.

(ulteriori informazioni, inclusa la riconfigurazione del database LinOTP, possono essere trovate nella documentazione ufficiale di collegamento. Lì puoi anche trovare il comando: dpkg-reconfigure linotp per modificare i parametri se hai già installato mysql).

# apt-get install mysql-server

# apt-get update

(non sarebbe male controllare nuovamente gli aggiornamenti)
Installa LinOTP e moduli aggiuntivi:

# apt-get install linotp

Rispondiamo alle domande dell'installatore:
Usa Apache2: sì
Crea una password per l'amministratore Linotp: “La tua password”
Genera certificato autofirmato?: sì
Utilizzare MySQL?: sì
Dove si trova il database: localhost
Crea un database LinOTP (nome base) sul server: LinOTP2
Creare un utente separato per il database: LinOTP2
Impostiamo una password per l'utente: “La tua password”
Dovrei creare un database adesso? (qualcosa come “Sei sicuro di volere...”): sì
Inserisci la password root MySQL che hai creato durante l'installazione: "YourPassword"
Fatto.

(facoltativo, non è necessario installarlo)

# apt-get install linotp-adminclient-cli 

(facoltativo, non è necessario installarlo)

# apt-get install libpam-linotp  

E così la nostra interfaccia web Linotp è ora disponibile su:

"<b>https</b>: //IP_сервера/manage"

Parlerò delle impostazioni nell'interfaccia web un po' più tardi.

Ora, la cosa più importante! Solleviamo FreeRadius e lo colleghiamo a Linotp.

Installa FreeRadius e il modulo per lavorare con LinOTP

# apt-get install freeradius linotp-freeradius-perl

eseguire il backup delle configurazioni del client e del raggio degli utenti.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Crea un file cliente vuoto:

# touch /etc/freeradius/clients.conf

Modifica del nostro nuovo file di configurazione (la configurazione di cui è stato eseguito il backup può essere utilizzata come esempio)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Successivamente, crea un file utente:

# touch /etc/freeradius/users

Modifichiamo il file, dicendo a Radius che utilizzeremo Perl per l'autenticazione.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Successivamente, modifica il file /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Dobbiamo specificare il percorso dello script perl linotp nel parametro del modulo:

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

.....
Successivamente, creiamo un file in cui diciamo da quale (dominio, database o file) prendere i dati.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_вашего_LinOTP_сервера(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Entrerò un po’ più nel dettaglio perché è importante:

Descrizione completa del file con commenti:
#IP del server LinOTP (indirizzo IP del nostro server LinOTP)
URL=https://172.17.14.103/validate/simplecheck
#La nostra area che creeremo nell'interfaccia web di LinOTP.)
REALM=riarma1
#Nome del gruppo utenti creato nel web muser LinOTP.
RESCONF=file_flat
#opzionale: commenta se tutto sembra funzionare bene
Debug=Vero
#opzionale: usa questo, se hai certificati autofirmati, altrimenti commenta (SSL se creiamo il nostro certificato e vogliamo verificarlo)
SSL_CHECK=Falso

Successivamente, crea il file /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

E copia la configurazione al suo interno (non è necessario modificare nulla):

authorize {
#normalizes maleformed 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 authentification 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 creeremo un collegamento SIM:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

Personalmente, uccido i siti Radius predefiniti, ma se ne hai bisogno, puoi modificare la loro configurazione o disabilitarli.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Ora torniamo alla faccia web e guardiamola un po' più in dettaglio:
Nell'angolo in alto a destra fare clic su LinOTP Config -> UserIdResolvers -> Nuovo
Scegliamo quello che vogliamo: LDAP (AD win, LDAP samba), o SQL, o utenti locali del sistema Flatfile.

Compila i campi richiesti.

Successivamente creiamo REALMS:
Nell'angolo in alto a destra, fai clic su LinOTP Config -> Realms -> Nuovo.
e diamo un nome ai nostri REALMS, e clicchiamo anche sugli UserIdResolvers precedentemente creati.

FreeRadius ha bisogno di tutti questi dati nel file /etc/linotp2/rlm_perl.ini, come ho scritto sopra, quindi se non l'hai modificato allora, fallo ora.

Il server è tutto configurato.

integrare:

Configurazione di LinOTP su Debian 9:

Установка:

# 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 una password di root, ovviamente puoi lasciarla vuota, ma se leggi le notizie, questo molto spesso porta a "epic fail", quindi la imposteremo Comunque)

# mysql -u root -p
use mysql;
UPDATE user SET Password = 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

Incolla il codice (inviato da JuriM, grazie a lui per questo!):

server linotp {
Ascoltare {
indirizzo ipad = *
porta = 1812
tipo=autenticazione
}
Ascoltare {
indirizzo ipad = *
porta = 1813
tipo = acc
}
autorizzare {
preprocesso
aggiornamento {
&control:Tipo autenticazione := Perl
}
}
autenticare {
Perl di tipo autenticazione {
perl
}
}
contabilità {
unix
}
}

Modifica /etc/freeradius/3.0/mods-enabled/perl

perla {
nomefile = /usr/share/linotp/radius_linotp.pm
func_authenticate = autentica
func_authorize = autorizza
}

Sfortunatamente, in Debian 9 la libreria Radius_linotp.pm non è 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.pm

ora modifichiamo /etc/freeradius/3.0/clients.conf

server client {
indirizzo ipad = 192.168.188.0/24
segreto = la tua password
}

Ora correggiamo nano /etc/linotp2/rlm_perl.ini

Incolliamo lì lo stesso codice dell'installazione su Debian 8 (descritto sopra)

questo è tutto secondo l'idea. (non ancora testato)

Lascerò di seguito alcuni link sulla configurazione dei sistemi che molto spesso necessitano di essere protetti con l'autenticazione a due fattori:
Configurazione dell'autenticazione a due fattori in Apache2

Configurazione con Cisco ASA(qui viene utilizzato un server di generazione di token diverso, ma le impostazioni dell'ASA stessa sono le stesse).

VPN con autenticazione a due fattori

registrazione autenticazione a due fattori in ssh (LinOTP viene utilizzato anche lì) - grazie all'autore. Lì puoi anche trovare cose interessanti sull'impostazione delle politiche LiOTP.

Inoltre, i cms di molti siti supportano l'autenticazione a due fattori (per WordPress, LinOTP ha anche un proprio modulo speciale per github), ad esempio se desideri creare una sezione protetta sul tuo sito web aziendale per i dipendenti dell'azienda.
FATTO IMPORTANTE! NON selezionare la casella "Google autenteficator" per utilizzare Google Authenticator! Il codice QR quindi non è leggibile... (fatto strano)

Per scrivere questo articolo sono state utilizzate le informazioni tratte dai seguenti articoli:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Grazie agli autori

Fonte: habr.com

Aggiungi un commento