LinOTP tvåfaktorsautentisering server

LinOTP tvåfaktorsautentisering server

I dag vill jag dela med mig av hur man ställer in en server för tvåfaktorsautentisering, för att skydda företagsnätverk, webbplatser, tjänster, ssh. På servern kommer LinOTP + FreeRadius att användas.

Varför behöver vi det?
Detta är en helt gratis och bekväm lösning inom ditt eget nätverk, oberoende av externa leverantörer.

Denna tjänst är mycket användbar, ganska tydlig, till skillnad från andra open source-produkter, och stödjer också en mängd olika funktioner och policyer (t.ex. login+lösenord+(PIN+OTPToken)). Den integreras via API med sms-tjänster (LinOTP Config->Provider Config->SMS Provider), genererar koder för mobilapplikationer som Google Authenticator och mycket mer. Jag anser att den är mer användarvänlig än den tjänst som diskuteras i artikeln.

Denna server fungerar utmärkt med Cisco ASA, OpenVPN-server, Apache2 och i stort sett allt som stödjer autentisering via RADIUS-server (t.ex. för SSH i datacentret).

Krävs:

1) Debian 8 (jessie) — Absolut! (testinstallationen på Debian 9 beskrivs i slutet av artikeln)

Början:

Vi installerar Debian 8.

Vi lägger till LinOTP-repositoriet:

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

Vi lägger till nycklar:

# gpg --search-keys 913DFF12F86258E5

Ibland får Debian ett meddelande efter att ha utfört detta kommando vid en 'ren' installation:

gpg: katalog skapad `/root/.gnupg'
gpg: ny konfigurationsfil skapad `/root/.gnupg/gpg.conf'
gpg: VARNING: parametrar i `/root/.gnupg/gpg.conf' aktiveras inte vid denna körning
gpg: nyckeltabell skapad `/root/.gnupg/secring.gpg'
gpg: nyckeltabell skapad `/root/.gnupg/pubring.gpg'
gpg: inga nyckelservrar angivna (använd --keyserver)
gpg: misslyckades med att söka på nyckelserver: ogiltig URI

Detta är den initiala konfigurationen av gnupg. Inga problem. Kör bara kommandot igen.
Vid Debians fråga:

gpg: söka "913DFF12F86258E5" på hkp-servern keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  2048-bit RSA-nyckel F86258E5, skapad: 2010-05-10
Nycklar 1-1 av 1 för "913DFF12F86258E5".  Ange siffrorna, N) Nästa eller Q) Exit>

Vi svarar: 1

Nästa:

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

# apt-get update

Vi installerar mysql. I teorin kan man använda en annan SQL-server, men jag kommer för enkelhetens skull använda den som rekommenderats för LinOTP.

(ytterligare information, inklusive om omkonfigurering av LinOTP-databasen, kan hittas i den officiella dokumentationen för länken. Där kan man även hitta kommandot: dpkg-reconfigure linotp för att ändra parametrar om du redan har installerat mysql).

# apt-get install mysql-server

# apt-get update

(att kontrollera uppdateringar igen skadar inte)
Vi installerar LinOTP och dess moduler:

# apt-get install linotp

Vi svarar på installationsfrågorna:
Använda Apache2: ja
Skapa ett lösenord för admin Linotp: "DittLösenord"
Generera ett självsignerat certifikat?: ja
Använda MySQL?: ja
Var ligger databasen: localhost
Skapar databasen LinOTP (databasnamn) på servern: LinOTP2
Skapar en separat användare för databasen: LinOTP2
Sätter lösenord för användaren: «DittLösenord»
Ska vi skapa databasen nu? (något i stil med “Är du säker på att du vill …”): ja
Ange root-lösenordet för MySQL som vi skapade vid installationen: «DittLösenord»
Klart.

(valfritt, går att hoppa över)

# apt-get install linotp-adminclient-cli 

(valfritt, går att hoppa över)

# apt-get install libpam-linotp  

Så, vårt webbgränssnitt Linotp är nu tillgängligt på adressen:

"<b>https<\/b>: \/\/IP_server\/manage"

Jag kommer att berätta lite mer om inställningarna i webbgränssnittet senare.

Nu, det viktigaste! Vi startar FreeRadius och kopplar det till Linotp.

Installerar FreeRadius och modulen för att arbeta med LinOTP

# apt-get install freeradius linotp-freeradius-perl

vi säkerhetskopierar konfigurationsfilerna client och Users för FreeRadius.

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

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

Skapar en tom fil för klienten:

# touch /etc/freeradius/clients.conf

Redigerar vår nya konfigurationsfil (den säkerhetskopierade konfigurationen kan användas som exempel)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret = passwd # lösenord för att ansluta klienter
}

Därefter skapar vi filen users:

# touch /etc/freeradius/users

Redigerar filen och talar om för FreeRadius att vi kommer att använda perl för autentisering.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Därefter redigerar vi filen /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Vi måste ange sökvägen till perl-skriptet linotp i parametern module:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
Därefter skapar vi en fil där vi anger från vilket (domän, databas eller fil) vi ska hämta data.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

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

Här stannade jag en stund längre, eftersom detta är viktigt:

Fullständig beskrivning av filen med kommentarer:
#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

Därefter skapar vi filen /etc/freeradius/sites-available/linotp

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

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

Och kopierar konfigurationen dit (behöver inte redigeras):

authorize {
#normalizes malformed klientförfrågan innan den överlämnas till andra moduler (se '/etc/freeradius/modules/preprocess')
preprocess
# Om du använder flera typer av realms, bör du antagligen
# ställa in "ignore_null = yes" för alla av dem.
# I annat fall, när den första stilen av realm inte matchar,
# kommer de andra stilarna inte att kontrolleras.
# tillåter en lista över realms (se '/etc/freeradius/modules/realm')
IPASS
#förstår något som USER@REALM och kan särskilja komponenterna (se '/etc/freeradius/modules/realm')
suffix
#förstår USERREALM och kan särskilja komponenterna (se '/etc/freeradius/modules/realm')
ntdomain
# Läs 'users' filen för att lära dig om speciell konfiguration som bör tillämpas för
# vissa användare (se '/etc/freeradius/modules/files')
files
# tillåter autentisering att löpa ut (se '/etc/freeradius/modules/expiration')
expiration
# tillåter att definiera giltiga servicetider (se '/etc/freeradius/modules/logintime')
logintime
# Vi har ingen radius_shortname_map!
pap
}
#här anropas linotp perl-modulen för vidare bearbetning
authenticate {
perl
}

Därefter gör vi en symbolisk länk:

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

Personligen tar jag bort de standard Radius-webbplatserna, men om du behöver dem kan du antingen redigera deras konfiguration eller stänga av dem.

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

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

# service freeradius reload

Låt oss nu återvända till webbgränssnittet och titta på det i mer detalj:
Klicka på LinOTP Config -> UserIdResolvers -> Ny i det övre högra hörnet
Välj vad vi vill ha: LDAP (AD win, LDAP samba), eller SQL, eller lokala användare i systemet Flatfile.

Fyll i de obligatoriska fälten.

Sedan skapar vi REALMS:
Klicka på LinOTP Config -> Realms -> Ny i det övre högra hörnet.
och ge vårt REALMS ett namn samt klicka på den UserIdResolvers som skapades tidigare.

All denna information behövs av freeRadius i filen /etc/linotp2/rlm_perl.ini, vilket jag nämnde tidigare, så om du inte har redigerat den, gör det nu.

Servern är nu inställd.

Tillägg:

Inställning av LinOTP på Debian 9:

Installation:

# 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

(som standard erbjuder Debian 9 inte att ställa in root-lösenordet i mysql (mariaDB), såklart kan du lämna det tomt, men om du följer nyheterna leder det ofta till 'episka misslyckanden', så vi sätter ett lösenord ändå)

# mysql -u root -p
använd mysql;
UPDATE user SET Password = PASSWORD('här_lösenord') 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

Klistra in koden (skickad av JuriM, tack för det!):

server linotp {
lyssna {
ipaddr = *
port = 1812
typ = auth
}
lyssna {
ipaddr = *
port = 1813
typ = acct
}
auktorisera {
preprocess
uppdatera {
&control:Auth-Type := Perl
}
}
autentisera {
Auth-Type Perl {
perl
}
}
bokföring {
unix
}
}

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

perl {
filnamn = /usr/share/linotp/radius_linotp.pm
func_authenticate = autentisera
func_authorize = auktorisera
}

Tyvärr installeras biblioteket radius_linotp.pm inte från de repository som finns i debian 9, så vi hämtar det från 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

nu ska vi justera /etc/freeradius/3.0/clients.conf

klient servrar {
ipaddr = 192.168.188.0/24
hemlig = dittlösenord
}

nu ska vi justera nano /etc/linotp2/rlm_perl.ini

Klistra in samma kod som vid installation på debian 8 (som beskrivits ovan)

egentligen är allt klart. (inte testad ännu)

Jag lämnar nedan några länkar till systeminställningar som ofta kräver skyddad tvåfaktorsautentisering:
Inställning av tvåfaktorsautentisering i Apache2

Inställning med Cisco ASA(där används en annan server för token-generering, men inställningarna för själva ASA är desamma).

VPN med tvåfaktorsautentisering

Inställning tvåfaktorsautentisering i ssh (där används också LinOTP) — tack till författaren. Där kan man också hitta intressanta saker om inställningar för LiOTP.

Många cms-system på webbplatser stöder också tvåfaktorsautentisering (för WordPress finns det till och med en speciell modul för LinOTP på github), till exempel om du vill skapa en skyddad sektion för företagets anställda på din företagswebbplats.
VIKTIG FAKT! Sätt inte en bock vid "Google autenteficator" för att använda Google autentiserare! QR-koden går inte att läsa då… (konstig fakta)

Informationen till artikeln kommer från följande artiklar:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Tack till författarna.

Källa: habr.com

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster