Serwer uwierzytelniania dwuskładnikowego LinOTP

Serwer uwierzytelniania dwuskładnikowego LinOTP

Dzisiaj chcę się podzielić tym, jak skonfigurować serwer uwierzytelniania dwuskładnikowego, aby chronić sieć firmową, witryny, usługi i ssh. Serwer będzie działał w następującej kombinacji: LinOTP + FreeRadius.

Dlaczego nas potrzebuje?
Jest to całkowicie bezpłatne, wygodne rozwiązanie, w ramach własnej sieci, niezależne od zewnętrznych dostawców.

Ta usługa jest bardzo wygodna, dość wizualna, w przeciwieństwie do innych produktów open source, a także obsługuje ogromną liczbę funkcji i zasad (na przykład login + hasło + (PIN + OTPToken)). Poprzez API integruje się z usługami wysyłania SMS-ów (LinOTP Config->Provider Config->SMS Provider), generuje kody dla aplikacji mobilnych takich jak Google Authentificator i wiele innych. Myślę, że jest to wygodniejsze niż usługa omawiana w Artykuł.

Serwer ten doskonale współpracuje z Cisco ASA, serwerem OpenVPN, Apache2 i ogólnie z prawie wszystkim, co obsługuje uwierzytelnianie za pośrednictwem serwera RADIUS (na przykład dla SSH w centrum danych).

Wymagane:

1) Debian 8 (jessie) - Bądź pewna! (instalacja próbna na Debianie 9 jest opisana na końcu artykułu)

Początek:

Instalowanie Debiana 8.

Dodaj repozytorium LinOTP:

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

Dodawanie kluczy:

# gpg --search-keys 913DFF12F86258E5

Czasami podczas „czystej” instalacji, po uruchomieniu tego polecenia, Debian wyświetla:

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

To jest początkowa konfiguracja gnupg. W porządku. Po prostu uruchom ponownie polecenie.
Na pytanie Debiana:

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) Выход>

Odpowiadamy: 1

Dalej:

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

# apt-get update

Zainstaluj mysqla. Teoretycznie możesz użyć innego serwera sql, ale dla uproszczenia użyję go zgodnie z zaleceniami dla LinOTP.

(dodatkowe informacje, w tym dotyczące rekonfiguracji bazy danych LinOTP, można znaleźć w oficjalnej dokumentacji dot powiązanie. Można tam również znaleźć polecenie: dpkg-reconfigure linotp, aby zmienić parametry, jeśli już zainstalowałeś mysql).

# apt-get install mysql-server

# apt-get update

(nie zaszkodzi ponownie sprawdzić aktualizacje)
Zainstaluj LinOTP i dodatkowe moduły:

# apt-get install linotp

Odpowiadamy na pytania instalatora:
Użyj Apache2: tak
Utwórz hasło dla administratora Linotp: „Twoje hasło”
Wygenerować certyfikat z podpisem własnym?: tak
Używać MySQL?: tak
Gdzie znajduje się baza danych: localhost
Utwórz bazę danych LinOTP (nazwa bazowa) na serwerze: LinOTP2
Utwórz osobnego użytkownika dla bazy danych: LinOTP2
Ustalamy hasło dla użytkownika: „Twoje hasło”
Czy powinienem teraz utworzyć bazę danych? (coś w rodzaju „Czy na pewno chcesz...”): tak
Wprowadź hasło roota MySQL, które utworzyłeś podczas instalacji: „YourPassword”
Zrobione.

(opcjonalnie, nie musisz go instalować)

# apt-get install linotp-adminclient-cli 

(opcjonalnie, nie musisz go instalować)

# apt-get install libpam-linotp  

I tak nasz interfejs sieciowy Linotp jest teraz dostępny pod adresem:

"<b>https</b>: //IP_сервера/manage"

O ustawieniach w interfejsie internetowym opowiem nieco później.

A teraz najważniejsze! Podnosimy FreeRadius i łączymy go z Linotp.

Zainstaluj FreeRadius i moduł do pracy z LinOTP

# apt-get install freeradius linotp-freeradius-perl

wykonaj kopię zapasową konfiguracji promienia klienta i użytkowników.

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

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

Utwórz pusty plik klienta:

# touch /etc/freeradius/clients.conf

Edycja naszego nowego pliku konfiguracyjnego (jako przykładu można użyć kopii zapasowej konfiguracji)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Następnie utwórz plik użytkowników:

# touch /etc/freeradius/users

Edytujemy plik, informując promienia, że ​​do uwierzytelnienia będziemy używać języka Perl.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Następnie edytuj plik /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Musimy określić ścieżkę do skryptu perl linotp w parametrze modułu:

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

... ..
Następnie tworzymy plik, w którym określamy, z której domeny (domeny, bazy danych czy pliku) pobrać dane.

# 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

Omówię tutaj trochę więcej szczegółów, ponieważ są one ważne:

Pełny opis pliku wraz z komentarzami:
#IP serwera linOTP (adres IP naszego serwera LinOTP)
URL=https://172.17.14.103/validate/simplecheck
#Nasz obszar, który utworzymy w interfejsie internetowym LinOTP.)
DZIEDZINA = tylne ramię 1
#Nazwa grupy użytkowników utworzonej w kagańcu sieciowym LinOTP.
RESCONF=plik_płaski
#opcjonalne: skomentuj, jeśli wszystko wydaje się działać poprawnie
Debugowanie = prawda
#opcjonalne: użyj tego, jeśli masz certyfikaty z podpisem własnym, w przeciwnym razie skomentuj (SSL, jeśli tworzymy własny certyfikat i chcemy go zweryfikować)
SSL_CHECK=Fałsz

Następnie utwórz plik /etc/freeradius/sites-available/linotp

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

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

I skopiuj do niego konfigurację (nie musisz niczego edytować):

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
}

Następnie utworzymy łącze SIM:

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

Osobiście zabijam domyślne witryny Radius, ale jeśli ich potrzebujesz, możesz edytować ich konfigurację lub je wyłączyć.

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

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

# service freeradius reload

Wróćmy teraz do strony internetowej i przyjrzyjmy się jej bardziej szczegółowo:
W prawym górnym rogu kliknij LinOTP Config -> UserIdResolvers -> New
Wybieramy co chcemy: LDAP (AD win, LDAP samba), czy SQL, czy lokalni użytkownicy systemu Flatfile.

Wypełnij wymagane pola.

Następnie tworzymy REALMS:
W prawym górnym rogu kliknij LinOTP Config -> Realms -> New.
i nadaj nazwę naszemu REALMSowi, a także kliknij na wcześniej utworzone UserIdResolvers.

FreeRadius potrzebuje wszystkich tych danych w pliku /etc/linotp2/rlm_perl.ini, o czym pisałem powyżej, więc jeśli nie edytowałeś ich wtedy, zrób to teraz.

Serwer jest już skonfigurowany.

Dodanie:

Konfigurowanie LinOTP na Debianie 9:

Установка:

# 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

(domyślnie w Debianie 9 mysql (mariaDB) nie oferuje ustawienia hasła roota, oczywiście możesz pozostawić je puste, ale jeśli czytasz wiadomości, bardzo często prowadzi to do „epickich niepowodzeń”, więc ustawimy to W każdym razie)

# 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

Wklej kod (nadesłany przez JuriM, dzięki mu za to!):

serwer linotp {
Słuchać {
ipaddr = *
port = 1812
typ=autoryzacja
}
Słuchać {
ipaddr = *
port = 1813
typ = akt
}
autoryzować {
wstępne przetwarzanie
aktualizacja {
&control:Typ uwierzytelnienia:= Perl
}
}
uwierzytelnić {
Typ uwierzytelniania Perl {
Perl
}
}
księgowość {
UNIX
}
}

Edytuj plik /etc/freeradius/3.0/mods-enabled/perl

Perl {
nazwa pliku = /usr/share/linotp/radius_linotp.pm
func_authenticate = uwierzytelnij
func_authorize = autoryzuj
}

Niestety w Debianie 9 biblioteka promieni_linotp.pm nie jest instalowana z repozytoriów, więc pobierzemy ją z githuba.

# 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

teraz edytujmy plik /etc/freeradius/3.0/clients.conf

serwery klienckie {
ipaddr = 192.168.188.0/24
sekret = twoje hasło
}

Teraz poprawmy plik nano /etc/linotp2/rlm_perl.ini

Wklejamy tam ten sam kod, co przy instalacji na Debianie 8 (opisane powyżej)

to wszystko zgodnie z ideą. (jeszcze nie testowane)

Poniżej zostawię kilka linków dotyczących konfiguracji systemów, które najczęściej wymagają ochrony za pomocą uwierzytelniania dwuskładnikowego:
Konfigurowanie uwierzytelniania dwuskładnikowego w Apache2

Konfiguracja za pomocą Cisco ASA(wykorzystywany jest tam inny serwer generowania tokenów, ale ustawienia samego ASA są takie same).

VPN z uwierzytelnianiem dwuskładnikowym

regulacja uwierzytelnianie dwuskładnikowe w ssh (Tam też używany jest LinOTP) - podziękowania dla autora. Można tam również znaleźć ciekawe rzeczy na temat konfigurowania polityk LiOTP.

Ponadto cms wielu witryn obsługuje uwierzytelnianie dwuskładnikowe (w przypadku WordPress LinOTP ma nawet swój własny specjalny moduł GitHub), na przykład, jeśli chcesz utworzyć chronioną sekcję na swojej firmowej stronie internetowej dla pracowników firmy.
WAŻNY FAKT! NIE zaznaczaj pola „Google autenteficator”, aby korzystać z Google Authenticator! Kod QR jest wtedy nieczytelny... (dziwny fakt)

Do napisania tego artykułu wykorzystano informacje z następujących artykułów:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Dzięki autorom.

Źródło: www.habr.com

Dodaj komentarz