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
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
# 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
regulacja
Ponadto cms wielu witryn obsługuje uwierzytelnianie dwuskładnikowe (w przypadku WordPress LinOTP ma nawet swój własny specjalny moduł
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:
Dzięki autorom.
Źródło: www.habr.com