
Dziś chciałbym podzielić się tym, jak skonfigurować serwer dwuskładnikowego uwierzytelniania, aby chronić sieć korporacyjną, strony internetowe, usługi i SSH. Na serwerze będzie działać połączenie: LinOTP + FreeRadius.
Po co nam to?
To całkowicie darmowe, wygodne rozwiązanie w obrębie własnej sieci, niezależne od zewnętrznych dostawców.
Usługa ta jest bardzo wygodna i przejrzysta, w odróżnieniu od innych produktów open-source, a także obsługuje ogromną liczbę funkcji i polityk (na przykład login+hasło+(PIN+OTPToken)). Integruje się z usługami wysyłania SMS przez API (LinOTP Config->Provider Config->SMS Provider), generuje kody dla aplikacji mobilnych typu Google Authenticator i wiele więcej. Uważam, że jest bardziej wygodny niż rozważany serwis w .
Ten serwer doskonale współpracuje z Cisco ASA, serwerem OpenVPN, Apache2, a tak naprawdę praktycznie z wszystkim, co obsługuje uwierzytelnianie przez serwer RADIUS (na przykład dla SSH w data center).
Wymagane:
1) Debian 8 (jessie) — Obowiązkowo! (próbna instalacja na debianie 9 opisana jest na końcu artykułu)
Początek:
Instalujemy Debiana 8.
Dodajemy repozytorium LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listDodajemy klucze:
# gpg --search-keys 913DFF12F86258E5Czasami przy „czystej” instalacji, po wykonaniu tej komendy, Debian wydaje:
gpg: utworzono katalog `/root/.gnupg'
gpg: utworzono nowy plik konfiguracyjny `/root/.gnupg/gpg.conf'
gpg: UWAGA: parametry w `/root/.gnupg/gpg.conf' jeszcze nie są aktywne w tym uruchomieniu
gpg: utworzono tabelę kluczy `/root/.gnupg/secring.gpg'
gpg: utworzono tabelę kluczy `/root/.gnupg/pubring.gpg'
gpg: nie określono serwerów kluczy (użyj --keyserver)
gpg: błąd podczas wyszukiwania na serwerze kluczy: zły URI
To początkowa konfiguracja gnupg. Nic strasznego. Po prostu wykonaj polecenie jeszcze raz.
Na pytanie Debiana:
gpg: wyszukiwanie "913DFF12F86258E5" na serwerze hkp keys.gnupg.net
(1) LSE LinOTP2 Packaging
klucz RSA 2048 bit F86258E5, utworzony: 2010-05-10
Klucze 1-1 z 1 dla "913DFF12F86258E5". Wprowadź liczby, N) Następny lub Q) Wyjście>Odpowiadamy: 1
Dalej:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInstalujemy mysql. Teoretycznie można użyć innego serwera SQL, ale dla uproszczenia będę korzystać z niego, jako rekomendowanego dla LinOTP.
(dodatkowe informacje, w tym o rekonfiguracji bazy LinOTP można znaleźć w oficjalnej dokumentacji na . Tam można znaleźć polecenie: dpkg-reconfigure linotp, aby zmienić parametry, jeśli już zainstalowałeś mysql).
# apt-get install mysql-server# apt-get update (jeszcze raz sprawdzenie aktualizacji nie zaszkodzi)
Instalujemy LinOTP i dodatkowe moduły:
# apt-get install linotp Odpowiadamy na pytania instalatora:
Używać Apache2: tak
Wymyśl hasło dla admina Linotp: „TwojeHasło”
Czy wygenerować certyfikat samopodpisany?: tak
Czy używać MySQL?: tak
Gdzie znajduje się baza danych: localhost
Tworzymy bazę LinOTP (nazwa bazy) na serwerze: LinOTP2
Tworzymy osobnego użytkownika dla bazy danych: LinOTP2
Ustalamy hasło użytkownikowi: „TwojeHasło”
Czy stworzyć bazę teraz? (coś w rodzaju „Czy na pewno chcesz ...”): tak
Wprowadzamy hasło root do MySQL, które utworzyliśmy podczas instalacji: „TwojeHasło”
Gotowe.
(opcjonalnie, można tego nie robić)
# apt-get install linotp-adminclient-cli (opcjonalnie, można tego nie robić)
# apt-get install libpam-linotp A więc nasz interfejs webowy Linotp jest teraz dostępny pod adresem:
"<b>https<\/b>: \\\/\\\/IP_serwera\\\/manage"O ustawieniach w interfejsie webowym opowiem nieco później.
Teraz, najważniejsze! Uruchamiamy FreeRadius i łączymy go z Linotp.
Instalujemy FreeRadius i moduł pracy z LinOTP
# apt-get install freeradius linotp-freeradius-perltworzymy kopię zapasową konfiguracji klienta i użytkowników.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldTworzymy pusty plik klienta:
# touch /etc/freeradius/clients.confEdytujemy nasz nowy plik konfiguracyjny (zabezpieczoną konfigurację można wykorzystać jako przykład)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # hasło do połączenia klientów
}Następnie tworzymy plik użytkowników:
# touch /etc/freeradius/usersEdytujemy plik, mówiąc radiusowi, że będziemy używać perl do uwierzytelniania.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlNastępnie edytujemy plik /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlMusimy podać ścieżkę do skryptu perl linotp w parametrze module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Następnie tworzymy plik, w którym wskazujemy, z jakiego (domeny, bazy lub pliku) czerpać dane.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_twojego_serwera_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseTutaj zatrzymam się nieco dłużej, ponieważ to ważne:
Pełny opis pliku z komentarzami:
#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
Następnie stworzymy plik /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpI skopiujemy do niego konfigurację (nie trzeba nic zmieniać):
authorize {
#normalizuje nieprawidłowe zapytania klienta przed przekazaniem ich do innych modułów (patrz '/etc/freeradius/modules/preprocess')
preprocess
# Jeśli używasz wielu rodzajów realmów, prawdopodobnie
# chcesz ustawić "ignore_null = yes" dla wszystkich z nich.
# W przeciwnym razie, gdy pierwszy styl realm nie pasuje,
# inne style nie będą sprawdzane.
#pozwala na listę realmów (patrz '/etc/freeradius/modules/realm')
IPASS
#rozumie coś takiego jak USER@REALM i potrafi odróżnić komponenty (patrz '/etc/freeradius/modules/realm')
suffix
#rozumie USERREALM i potrafi odróżnić komponenty (patrz '/etc/freeradius/modules/realm')
ntdomain
# Przeczytaj plik 'users', aby dowiedzieć się o specjalnej konfiguracji, która powinna być stosowana dla
# określonych użytkowników (patrz '/etc/freeradius/modules/files')
files
# pozwala na wygasanie uwierzytelnienia (patrz '/etc/freeradius/modules/expiration')
expiration
# pozwala na określenie ważnych czasów obsługi (patrz '/etc/freeradius/modules/logintime')
logintime
# Nie mamy radius_shortname_map!
pap
}
#tutaj wywoływany jest moduł perl linotp do dalszego przetwarzania
authenticate {
perl
}Następnie zrobimy symboliczny link:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledOsobiście zabijam domyślne strony radius, ale jeśli ich potrzebujesz, możesz albo edytować ich konfigurację, albo je wyłączyć.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Wracamy teraz do interfejsu webowego i przyjrzymy się mu nieco bliżej:
W prawym górnym rogu klikamy LinOTP Config -> UserIdResolvers -> New
Wybieramy, czego chcemy: LDAP (AD win, LDAP samba), SQL lub lokalnych użytkowników systemu Flatfile.
Wypełniamy wymagane pola.
Następnie tworzymy REALMS:
W prawym górnym rogu klikamy LinOTP Config -> Realms -> New.
Nadamy naszemu REALMS nazwę i klikamy na wcześniej utworzony UserIdResolvers.
Wszystkie te dane są potrzebne freeRadius w pliku /etc/linotp2/rlm_perl.ini, o czym pisałem wcześniej, więc jeśli go nie edytowałeś, zrób to teraz.
Serwer jest skonfigurowany.
Uzupełnienie:
Konfiguracja LinOTP na Debianie 9:
Instalacja:
# 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 prosi o ustawienie hasła dla roota, oczywiście możesz go zostawić pustym, ale jeśli śledzisz wiadomości, często prowadzi to do „epickich porażek”, więc tym razem go ustawimy)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('tutaj_hasło') 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/linotpWklejamy kod (przesłany przez JuriM, za co mu dziękuję!):
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
}
}
Edytujemy /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Niestety w debianie 9 biblioteka radius_linotp.pm nie jest dostępna w repozytoriach, więc weźmiemy ją z github.
# 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.pmteraz poprawiamy /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = twójhasło
}
teraz poprawiamy nano /etc/linotp2/rlm_perl.ini
Wklejamy tam ten sam kod, co podczas instalacji na debianie 8 (opisane powyżej)
generalnie wszystko. (jeszcze nie przetestowane)
Zostawię poniżej kilka linków dotyczących konfiguracji systemów, które najczęściej wymagają zabezpieczenia dwuetapowym uwierzytelnianiem:
Konfiguracja dwuetapowej autoryzacji w
(tam używany jest inny serwer generacji tokenów, ale same ustawienia ASA są takie same).
Konfiguracja (tam również używany jest LinOTP) — dziękuję autorowi. Tam również można znaleźć ciekawe rzeczy dotyczące konfigurowania polityk LiOTP.
Ponadto wiele systemów CMS obsługuje dwuetapową autoryzację (dla WordPressa LinOTP ma nawet swój specjalny moduł na ), na przykład, jeśli chcesz utworzyć zabezpieczoną sekcję dla pracowników swojej firmy na stronie internetowej.
WAŻNY FAKT! NIE zaznaczaj opcji „Google autenteficator” do użycia googlowego uwierzytelniania! W przeciwnym razie QR-kod nie będzie czytelny… (dziwny fakt)
Do napisania artykułu wykorzystano informacje z następujących artykułów:
Dziękuję autorom.
Źródło: habr.com
