
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 .
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.listVi lägger till nycklar:
# gpg --search-keys 913DFF12F86258E5Ibland 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 updateVi 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 . 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-perlvi 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.oldSkapar en tom fil för klienten:
# touch /etc/freeradius/clients.confRedigerar vår nya konfigurationsfil (den säkerhetskopierade konfigurationen kan användas som exempel)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # lösenord för att ansluta klienter
}Därefter skapar vi filen users:
# touch /etc/freeradius/usersRedigerar filen och talar om för FreeRadius att vi kommer att använda perl för autentisering.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlDärefter redigerar vi filen /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlVi 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.iniURL=https://IP_av_din_LinOTP_server(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseHä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/linotpOch 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-enabledPersonligen 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 -panvä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/linotpKlistra 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.pmnu 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
(där används en annan server för token-generering, men inställningarna för själva ASA är desamma).
Inställning (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å ), 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:
Tack till författarna.
Källa: habr.com
