Server pro dvoufaktorovou autentizaci LinOTP

Server pro dvoufaktorovou autentizaci LinOTP

Dnes bych se chtěl podělit o to, jak nastavíte server dvoufaktorové autentizace pro ochranu podnikové sítě, webových stránek, služeb a SSH. Na serveru bude fungovat kombinace: LinOTP + FreeRadius.

Proč ho potřebujeme?
Je to zcela zdarma, pohodlné řešení uvnitř vaší sítě, nezávislé na třetích stranách.

Tato služba je velmi pohodlná a poměrně přehledná ve srovnání s jinými open-source produkty, a také podporuje obrovské množství funkcí a politik (například login + heslo + (PIN + OTP token)). Přes API se integruje se službami pro odesílání SMS (LinOTP Config->Provider Config->SMS Provider), generuje kódy pro mobilní aplikace jako Google Authenticator a mnoho dalšího. Považuji ji za pohodlnější než službu zvažovanou v článku.

Tento server výborně spolupracuje s Cisco ASA, OpenVPN serverem, Apache2 a prakticky se vším, co podporuje autentizaci přes RADIUS server (například pro SSH v datovém centru).

Požadováno:

1) Debian 8 (jessie) — Povinně! (zkušební instalace na Debian 9 je popsána na konci článku)

Začátek:

Nainstalujeme Debian 8.

Přidáme repozitář LinOTP:

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

Přidáme klíče:

# gpg --search-keys 913DFF12F86258E5

Někdy při "čisté" instalaci, po provedení této příkazu, Debian hlásí:

gpg: vytvořen adresář `/root/.gnupg`
gpg: vytvořen nový konfigurační soubor `/root/.gnupg/gpg.conf`
gpg: POZOR: parametry v `/root/.gnupg/gpg.conf` nejsou při tomto spuštění aktivní
gpg: vytvořena tabulka klíčů `/root/.gnupg/secring.gpg`
gpg: vytvořena tabulka klíčů `/root/.gnupg/pubring.gpg`
gpg: nejsou určeny servery klíčů (použijte --keyserver)
gpg: selhání při vyhledávání na serveru klíčů: špatné URI

To je počáteční nastavení gnupg. Nic hrozného. Stačí příkaz provést znovu.
Na otázku Debiana:

gpg: hledání "913DFF12F86258E5" na hkp serveru keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  2048 bit RSA klíč F86258E5, vytvořen: 2010-05-10
Klíče 1-1 z 1 pro "913DFF12F86258E5". Zadejte číslo, N) Další nebo Q) Konec>

Odpovídáme: 1

Další:

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

# apt-get update

Nainstalujeme mysql. V teorii je možné použít jiný sql server, ale pro zjednodušení použiji ten, který je doporučen pro LinOTP.

(další informace, včetně rekonstrukce databáze LinOTP, lze nalézt v oficiální dokumentaci k odkazu. Tam také najdete příkaz: dpkg-reconfigure linotp pro změnu parametrů, pokud jste již nainstalovali mysql).

# apt-get install mysql-server

# apt-get update

(ještě jednou zkontrolovat aktualizace neuškodí)
Nainstalujeme LinOTP a další moduly:

# apt-get install linotp

Odpovídáme na otázky instalátora:
Použít Apache2: ano
Vymyslete heslo pro admin LinOTP: „VašeHeslo“
Vygenerovat samostatně podepsaný certifikát?: ano
Použít MySQL?: ano
Kde se nachází databáze: localhost
Vytváříme databázi LinOTP(jméno databáze) na serveru: LinOTP2
Vytváříme samostatného uživatele pro databázi: LinOTP2
Nastavujeme heslo uživateli: „VašeHeslo“
Vytvořit databázi nyní? (něco jako „Jste si jisti, že chcete …“): ano
Zadáváme heslo root pro MySQL, které bylo vytvořeno při jeho instalaci: „VašeHeslo“
Hotovo.

(volitelně, není nutné)

# apt-get install linotp-adminclient-cli 

(volitelně, není nutné)

# apt-get install libpam-linotp  

A tak je naše webové rozhraní LinOTP nyní dostupné na adrese:

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

O nastavení v webovém rozhraní vám povím později.

A nyní, nejdůležitější! Spouštíme FreeRadius a spojujeme ho s LinOTP.

Instalujeme FreeRadius a modul pro práci s LinOTP

# apt-get install freeradius linotp-freeradius-perl

zálohujeme konfigurace klienta a Users radiusu.

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

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

Vytváříme prázdný soubor klienta:

# touch /etc/freeradius/clients.conf

Upravujeme náš nový konfigurační soubor (zálohovanou konfiguraci lze použít jako příklad)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # heslo pro připojení klientů
}

Dále vytváříme soubor uživatelů:

# touch /etc/freeradius/users

Upravujeme soubor, aby radius věděl, že budeme používat perl pro autentizaci.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Dále upravujeme soubor /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Musíme uvést cestu k perl skriptu linotp v parametru module:

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

…..
Dále vytváříme soubor, ve kterém říkáme, z jakého (domény, databáze nebo souboru) získat data.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

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

Tady se na chvíli zastavím, protože je to důležité:

Úplný popis souboru s komentáři:
#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ále vytvoříme soubor /etc/freeradius/sites-available/linotp

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

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

A zkopírujeme do něj konfiguraci (nic nemusíme upravovat):

authorize {
#normalizuje neplatné požadavky klienta před předáním dalším modulům (viz '/etc/freeradius/modules/preprocess')
preprocess
#  Pokud používáte více typů domén, pravděpodobně
#  budete chtít nastavit "ignore_null = yes" pro všechny z nich.
#  Jinak, když první styl domény neodpovídá,
#  další styly nebudou zkontrolovány.
# umožňuje seznam domén (viz '/etc/freeradius/modules/realm')
IPASS
#rozumí něčemu jako USER@REALM a může rozlišit komponenty (viz '/etc/freeradius/modules/realm')
suffix
#rozumí USERREALM a může rozlišit komponenty (viz '/etc/freeradius/modules/realm')
ntdomain
#  Přečtěte si soubor 'users', abyste se dozvěděli o speciální konfiguraci, která by měla být použita pro
# určité uživatele (viz '/etc/freeradius/modules/files')
files
# umožňuje nechat autentifikaci vypršet (viz '/etc/freeradius/modules/expiration')
expiration
# umožňuje definovat platné časy služby (viz '/etc/freeradius/modules/logintime')
logintime
# Nemáme žádnou radius_shortname_map!
pap
}
# zde je volán linotp perl modul pro další zpracování
authenticate {
perl
}

Dále vytvoříme symbolický odkaz:

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

Osobně zničím defaultní Radius weby, ale pokud je potřebujete, můžete je buď upravit v jejich konfiguraci, nebo je vypnout.

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

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

# service freeradius reload

Nyní se vraťme k webovému rozhraní a podívejme se na něj podrobněji:
V pravém horním rohu klikneme na LinOTP Config -> UserIdResolvers -> New
Zvolíme, co chceme: LDAP (AD win, LDAP samba), nebo SQL, nebo místní uživatele systému Flatfile.

Vyplňujeme požadovaná pole.

Dále vytvoříme REALMS:
V pravém horním rohu klikneme na LinOTP Config -> Realms -> New.
a pojmenujeme náš REALMS, a také klikneme na dříve vytvořený UserIdResolvers.

Všechna tato data potřebuje freeRadius v souboru /etc/linotp2/rlm_perl.ini, o čemž jsem psal výše, proto, pokud jste ho dosud neupravili, udělejte to teď.

Server je nastaven.

Doplňující informace:

Nastavení LinOTP na Debian 9:

Instalace:

# 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

(ve výchozím nastavení, v Debian 9 mysql (mariaDB) nenabízí nastavit heslo pro roota, můžete ho samozřejmě ponechat prázdné, ale pokud čtete zprávy, často to vede k "epickým selháním", proto to nastavíme)

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

Vkládáme kód (poslal JuriM, za což mu děkujeme):

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

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

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

Bohužel v debian 9 knihovna radius_linotp.pm není dostupná v repozitářích, takže ji vezmeme z githubu.

# 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

nyní upravíme /etc/freeradius/3.0/clients.conf

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

nyní upravíme nano /etc/linotp2/rlm_perl.ini

Vkládáme tam stejný kód, jaký jsme použili při instalaci na debian 8 (popisováno výše)

teoreticky by to mělo být vše. (zatím netestováno)

Níže uvedu několik odkazů na nastavení systémů, které často potřebují chránit dvoufaktorovou autorizací:
Nastavení dvoufaktorové autentizace v Apache2

Nastavení s Cisco ASA(tam se používá jiný server generování tokenů, ale nastavení samotné ASA zůstává stejné).

VPN s dvoufaktorovou autentizací

Nastavení dvoufaktorové autentizace v ssh (tam se také používá LinOTP) — díky autorovi. Tam lze také nalézt zajímavé informace o nastavení politik LiOTP.

Také cms mnoha webů podporují dvoufaktorovou autentizaci (pro WordPress má LinOTP dokonce svůj speciální modul na github), například, pokud chcete na svém firemním webu vytvořit chráněnou sekci pro zaměstnance společnosti.
DŮLEŽITÝ FAKT! Nepokládejte zaškrtnutí "Google autenteficator" pro používání Google authentikátoru! QR kód se pak nedá přečíst... (zvláštní fakt)

K napsání článku byly použity informace z následujících článků:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Děkujeme autorům.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster