Dnes se chci podělit o to, jak nastavit dvoufaktorový autentizační server pro ochranu podnikové sítě, webů, služeb, ssh. Odkaz bude fungovat na serveru: LinOTP + FreeRadius.
Proč nás potřebuje?
Jedná se o zcela bezplatné a pohodlné řešení v rámci vaší sítě, nezávislé na poskytovatelích třetích stran.
Tato služba je velmi pohodlná, docela vizuální, na rozdíl od jiných produktů s otevřeným zdrojovým kódem a také podporuje velké množství funkcí a zásad (například přihlášení+heslo+(PIN+OTPToken)). Prostřednictvím API se integruje se službami odesílání sms (LinOTP Config->Provider Config->SMS Provider), generuje kódy pro mobilní aplikace jako je Google Autentificator a mnoho dalšího. Myslím, že je to pohodlnější než služba zvažovaná v
Tento server funguje dobře s Cisco ASA, OpenVPN serverem, Apache2 a vlastně téměř se vším, co podporuje autentizaci přes RADIUS server (například pro SSH do datového centra).
Požadováno:
1) Debian 8 (jessie) - Ujistěte se, že! (zkušební instalace na debianu 9 je popsána na konci článku)
Začátek:
Nainstalujte Debian 8.
Přidejte úložiště LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Přidání klíčů:
# gpg --search-keys 913DFF12F86258E5
Někdy při čisté instalaci po provedení tohoto příkazu Debian problémy:
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
Toto je počáteční nastavení gnupg. To je v pořádku. Stačí znovu spustit příkaz.
Na otázku Debianu:
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) Выход>
Odpověď: 1
Další:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
Nainstalujte mysql. Teoreticky můžete použít jiný sql server, ale pro jednoduchost jej použiji podle doporučení pro LinOTP.
(další informace, včetně překonfigurování databáze LinOTP, lze nalézt v oficiální dokumentaci pro
# apt-get install mysql-server
# apt-get update
(Neškodí znovu zkontrolovat aktualizace)
Nainstalujte LinOTP a další moduly:
# apt-get install linotp
Odpovídáme na otázky instalatéra:
Použít Apache2: ano
Vytvořte heslo pro administrátora Linotp: "YourPassword"
Vygenerovat certifikát s vlastním podpisem?: Ano
Použít MySQL?: Ano
Kde je umístěna databáze: localhost
Vytvořte databázi LinOTP (základní název) na serveru: LinOTP2
Vytvořte samostatného uživatele pro databázi: LinOTP2
Nastavte heslo pro uživatele: "YourPassword"
Mám teď vytvořit základnu? (něco jako „Jste si jistý, že chcete…“): ano
Zadejte kořenové heslo MySQL, které jste vytvořili během instalace: „YourPassword“
Hotovo.
(volitelné, nemůžete vložit)
# apt-get install linotp-adminclient-cli
(volitelné, nemůžete vložit)
# apt-get install libpam-linotp
A tak je naše webové rozhraní Linotp nyní dostupné na:
"<b>https</b>: //IP_сервера/manage"
O nastavení ve webovém rozhraní budu mluvit o něco později.
A teď to nejdůležitější! Zvyšte FreeRadius a propojte jej s Linotp.
Nainstalujte FreeRadius a modul LinOTP
# apt-get install freeradius linotp-freeradius-perl
zálohujte konfigurace klienta a uživatelů rádiusu.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Vytvořte prázdný soubor klienta:
# touch /etc/freeradius/clients.conf
Úprava našeho nového konfiguračního souboru (jako příklad lze použít zálohovanou konfiguraci)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Dále vytvořte soubor uživatelů:
# touch /etc/freeradius/users
Upravíme soubor a sdělíme rádius, že pro ověření použijeme perl.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Dále upravte soubor /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perl
Musíme nastavit cestu ke skriptu linotp perl v parametru modulu:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
... ..
Dále si vytvoříme soubor, ve kterém řekneme, ze kterého (domény, databáze nebo souboru) vzít data.
# 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
Zde se zastavím trochu více, protože je důležité:
Úplný popis souboru s komentáři:
#IP linotp serveru (IP adresa našeho LinOTP serveru)
URL=https://172.17.14.103/validate/simplecheck
#Naše oblast, kterou vytvoříme ve webovém rozhraní LinOTP.)
REALM=rearm1
#Název skupiny uživatelů, která je vytvořena ve webmordu LinOTP.
RESCONF=plochý_soubor
#nepovinné: okomentujte, pokud se zdá, že vše funguje dobře
Debug=Pravda
#nepovinné: použijte toto, pokud máte certifikáty s vlastním podpisem, jinak komentujte (SSL, pokud si vytvoříme vlastní certifikát a chceme ho ověřit)
SSL_CHECK=Nepravda
Dále vytvořte soubor /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
A zkopírujte do něj konfiguraci (nemusí se nic upravovat):
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
}
Dále vytvoříme odkaz na sim:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Osobně zabíjím výchozí rádiusové weby, ale pokud je potřebujete, můžete upravit jejich konfiguraci nebo je zakázat.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
Nyní se vraťme k webovému náhubku a podívejme se na něj trochu podrobněji:
V pravém horním rohu klikněte na LinOTP Config -> UserIdResolvers -> New
Vybereme si, co chceme: LDAP (AD win, LDAP samba), nebo SQL, případně lokální uživatelé systému Flatfile.
Vyplňte požadovaná pole.
Dále vytvoříme REALMS:
V pravém horním rohu klikněte na LinOTP Config -> Realms -> New.
a pojmenujte naše REALMS a také klikněte na UserIdResolvers vytvořené dříve.
Všechna tato data potřebuje freeRadius v souboru /etc/linotp2/rlm_perl.ini, o kterém jsem psal výše, takže pokud jste je tehdy neupravovali, udělejte to nyní.
Celý server je nakonfigurován.
Dodatek:
Nastavení LinOTP na Debianu 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 Debianu 9 mysql (mariaDB) nenabízí nastavení rootovského hesla, samozřejmě ho můžete nechat prázdné, ale pokud čtete novinky, často to vede k "epickému selhání", takže ho stejně nastavíme )
# 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
Vložte kód (zaslaný JuriMem, děkujeme mu za to!):
server linotp {
poslouchat {
ipaddr=*
port=1812
typ = auth
}
poslouchat {
ipaddr=*
port=1813
typ = akt
}
povolit {
předzpracování
Aktualizace {
&control:Auth-Type := Perl
}
}
ověřit {
Auth-Type Perl {
perl
}
}
účetnictví {
unix
}
}
Upravte /etc/freeradius/3.0/mods-enabled/perl
perl {
název_souboru = /usr/share/linotp/radius_linotp.pm
func_authenticate = ověřit
func_authorize = autorizovat
}
Bohužel v debianu 9 není knihovna radius_linotp.pm nainstalována z repozitářů, 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í opravíme /etc/freeradius/3.0/clients.conf
klientské servery {
ipaddr = 192.168.188.0/24
tajné = vaše heslo
}
nyní opravíme nano /etc/linotp2/rlm_perl.ini
Vložíme tam stejný kód jako při instalaci na debian 8 (popsáno výše)
na myšlence všeho. (zatím nevyzkoušeno)
Níže zanechám několik odkazů na nastavení systémů, které je nejčastěji potřeba chránit dvoufaktorovou autorizací:
Nastavení dvoufaktorové autentizace v
Nastavení
Také cms mnoha webů podporuje dvoufaktorovou autentizaci (pro WordPress má LinOTP dokonce svůj vlastní speciální modul na
DŮLEŽITÝ FAKT! NEZAškrtávejte políčko „Google Authenticator“, chcete-li používat Google Authenticator! QR kód pak není čitelný... (divný fakt)
K napsání článku byly použity informace z následujících článků:
Díky autorům.
Zdroj: www.habr.com