LinOTP kétfaktoros hitelesítő szerver

LinOTP kétfaktoros hitelesítő szerver

Ma szeretném megosztani, hogyan állítsuk be a kétfaktoros hitelesítési szervert a vállalati hálózat, weboldalak, szolgáltatások és SSH védelmére. A szerveren a LinOTP + FreeRadius kombinációja fog működni.

Miért van szükség rá?
Ez egy teljesen ingyenes, kényelmes megoldás, amely a saját hálózatán belül működik, nem függ harmadik fél szolgáltatóitól.

Ez a szolgáltatás nagyon kényelmes, szemléletes a többi nyílt forráskódú termékhez képest, és támogat egy hatalmas funkció- és politika mennyiséget (például login + jelszó + (PIN + OTPToken)). API-n keresztül integrálható SMS küldő szolgáltatásokkal (LinOTP Config->Provider Config->SMS Provider), generál kódokat a Google Authenticator típusú mobilalkalmazásokhoz és még sok egyébhez. Véleményem szerint ez kényelmesebb, mint a vizsgált szolgáltatás. a Spotify döntéshozatali módszertanáról. Egyre több felhasználó preferálja a zenehallgatást mobilon a streaming szolgáltatásban, de a cégnél túlnyomórészt webprogramozók dolgoznak. A Spotify elemezte ezt a helyzetet, és úgy döntött, hogy több mobilfejlesztőt vesz fel, valamint átnevezi a webes szakembereket új irányba:.

Ez a szerver remekül működik Cisco ASA-val, OpenVPN szerverrel, Apache2-vel, és gyakorlatilag mindennel, ami támogatja a RADIUS szerveren keresztüli hitelesítést (például SSH számára a datacenterben).

Szükséges:

1) Debian 8 (Jessie) — Kötelező! (a Debian 9-ről szóló próbaverzió telepítése a cikk végén található)

Kezdés:

Telepítsük a Debian 8-at.

Hozzáadjuk a LinOTP tárolót:

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

Hozzáadjuk a kulcsokat:

# gpg --search-keys 913DFF12F86258E5

Néha 'tiszta' telepítésnél, miután ezt a parancsot végrehajtottuk, a Debian ezt adja:

gpg: létrehozva a műveleti könyvtár `\/root\/.gnupg'\ngpg: új beállítási fájl létrehozva `\/root\/.gnupg\/gpg.conf'\ngpg: FIGYELEM: a `\/root\/.gnupg\/gpg.conf' fájlban lévő beállítások még nem aktívak ezen a futtatáson\ngpg: kulcsrendszertábla létrehozva `\/root\/.gnupg\/secring.gpg'\ngpg: kulcsrendszertábla létrehozva `\/root\/.gnupg\/pubring.gpg'\ngpg: nem megadva kulcservers (használjon --keyserver)\ngpg: hiba a kulcsservers keresésekor: hibás URI

Ez a gnupg kezdeti beállítása. Nincs semmi veszélyes. Csak futtassa a parancsot még egyszer.
A Debian kérdésére:

gpg: keresés "913DFF12F86258E5" a hkp kulcsszerveren keys.gnupg.net\n(1)\tLSE LinOTP2 csomagolás <linotp2@lsexperts.de>\n\t  2048 bites RSA kulcs F86258E5, létrehozva: 2010-05-10\nKulcsok 1-1 az 1-hez "913DFF12F86258E5". Kérjük, adja meg a számokat, N) Következő vagy Q) Kilépés>

Válaszolunk: 1

Tovább:

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

# apt-get update

Telepítsük a MySQL-t. Elméletileg más SQL szerver is használható, de a könnyebb kezelés érdekében én ezt fogom használni, mint a LinOTP ajánlott megoldását.

(további információk, beleértve a LinOTP adatbázisának újrakonfigurálását, a hivatalos dokumentációban találhatók a linkre kattintva. Az ott található parancs: dpkg-reconfigure linotp a paraméterek módosításához, ha már telepítette a MySQL-t).

# apt-get install mysql-server

# apt-get update

(még egyszer ellenőrizni a frissítéseket nem árt)
Telepítsük a LinOTP-t és a kiegészítő modulokat:

# apt-get install linotp

Válaszoljunk a telepítő kérdéseire:
Használni Apache2-t: igen
Találjon ki egy jelszót az admin LinOTP-hoz: „AzÖnJelszava”
Önjelölt tanúsítvány generálása?: igen
Használjuk a MySQL-t?: igen
A személyi adatbázis helye: localhost
Létrehozzuk a LinOTP adatbázist (adatbázis neve) a szerveren: LinOTP2
Létrehozunk egy külön felhasználót az adatbázis számára: LinOTP2
Jelszót adunk a felhasználónak: „ATeJelszavad”
Hozzuk létre az adatbázist most? (valami hasonló ‘Biztosan szeretnéd ...’): igen
Beírjuk a MySQL root jelszót, amelyet az installáláskor hoztunk létre: „ATeJelszavad”
Kész.

(opcionális, nem szükséges hozzáadni)

# apt-get install linotp-adminclient-cli 

(opcionális, nem szükséges hozzáadni)

# apt-get install libpam-linotp  

Így a Linotp webes felület most elérhető a címen:

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

A webes felületen található beállításokról később fogok beszélni.

Most, a legfontosabb! Aktiváljuk a FreeRadius-t és összekapcsoljuk a LinOTP-val.

Telepítjük a FreeRadius-t és a LinOTP modulját

# apt-get install freeradius linotp-freeradius-perl

Biztonsági mentést készítünk a radius kliens és felhasználók konfigurációjáról.

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

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

Létrehozunk egy üres kliens fájlt:

# touch /etc/freeradius/clients.conf

Módosítjuk az új konfigurációs fájlunkat (a biztonsági másolatot mint példát használhatjuk)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # a kliens csatlakozási jelszava
}

Ezután létrehozunk egy felhasználói fájlt:

# touch /etc/freeradius/users

Módosítjuk a fájlt, mondva a radius-nak, hogy a perl-t fogjuk használni az azonosításhoz.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Ezután módosítjuk a fájlt /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Meg kell adnunk a linotp perl szkript útvonalát a modul paraméterében:

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

…..
Ezután létrehozunk egy fájlt, amelyben megmondjuk, hogy honnan (domain-ból, adatbázisból vagy fájlból) vegyük az adatokat.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

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

Itt kicsit részletesebben megállok, mivel ez fontos:

A fájl teljes leírása megjegyzésekkel:
#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

Ezután létrehozunk egy fájlt /etc/freeradius/sites-available/linotp

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

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

És bemásoljuk a konfigurációt (nem kell módosítani semmit):

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 realms (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
}

Ezután létrehozunk egy szimbolikus linket:

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

Személy szerint megöletem az alapértelmezett Radius weboldalakat, de ha szükséged van rájuk, szerkesztheted a konfigurációjukat, vagy letilthatod őket.

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

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

# service freeradius reload

Most térjünk vissza a webfelülethez, és nézzük meg kicsit alaposabban:
A jobb felső sarokban kattintsunk a LinOTP Config → UserIdResolvers → Új gombra.
Válasszuk ki, amit szeretnénk: LDAP (AD Windows, LDAP Samba), vagy SQL, vagy lokális felhasználók a Flatfile rendszerben.

Töltsük ki a szükséges mezőket.

Ezután hozzunk létre REALM-eket:
A jobb felső sarokban kattintsunk a LinOTP Config → Realms → Új gombra.
És adjunk nevet a REALM-nek, valamint kattintsunk a korábban létrehozott UserIdResolvers-ra.

Mindezek az adatok szükségesek a FreeRadius számára a /etc/linotp2/rlm_perl.ini fájlban, ahogy azt fentebb említettem, tehát ha nem szerkesztetted még, tedd meg most.

Az összes szerver be van állítva.

Kiegészítés:

LinOTP konfigurálása Debian 9 alatt:

Telepítés:

# 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

(alapértelmezés szerint Debian 9 alatt a mysql (MariaDB) nem kínál meg root jelszó megadását, természetesen hagyhatod üresen, de ha olvasod a híreket, ez nagyon gyakran "epikus kudarcokhoz" vezet, ezért inkább beállítjuk.)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('itt_jelszó') 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

Illessze be a kódot (JuriM küldte, köszönet érte!):

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
}
}

Szerkeszti a /etc/freeradius/3.0/mods-enabled/perl fájlt.

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

Sajnos Debian 9 alatt a radius_linotp.pm könyvtár nem telepíthető a tárolókból, ezért a GitHubról fogjuk beszerezni.

# 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

Most módosítjuk a /etc/freeradius/3.0/clients.conf fájlt.

client servers {
ipaddr = 192.168.188.0/24
secret = a_te_jelszavad
}

Most módosítjuk a nano /etc/linotp2/rlm_perl.ini fájlt.

Illessze be oda ugyanazt a kódot, mint amikor a Debian 8-ra telepítettük (ahogy fentebb leírtuk).

Alapvetően ennyi. (még nem teszteltük)

Alább hagyok néhány linket a rendszerek konfigurálásához, amelyeket gyakran kell kettős hitelesítéssel védeni:
Kettős hitelesítés beállítása az Apache2

Kétszintű hitelesítés Cisco ASA-val(ott egy másik token generáló szerver használják, de a ASA beállítások ugyanazok).

VPN kettős hitelesítéssel

Beállítás kettős hitelesítés ssh-ban (ott is LinOTP-t használnak) – köszönet a szerzőnek. Ott érdekes dolgokat találhatsz a LiOTP politikák beállításáról.

Számos weboldal CMS rendszere is támogatja a kettős hitelesítést (A WordPresshez a LinOTP-nek még van egy saját modulja a github), például, ha védett szakaszt szeretnél létrehozni a vállalati webhelyeden a munkavállalók számára.
FONTOS TÉNY! NE jelölje be a „Google autentikátor” opciót a Google autentikátor használatához! A QR-kód akkor nem olvasható... (furcsa tény)

A cikk írásához a következő cikkek információit használtam fel:
itnan.hu/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Köszönöm a szerzőknek.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster