I dag vil jeg dele hvordan du setter opp en tofaktorautentiseringsserver for å beskytte et bedriftsnettverk, nettsteder, tjenester, ssh. Serveren vil kjøre følgende kombinasjon: LinOTP + FreeRadius.
Hvorfor trenger vi det?
Dette er en helt gratis, praktisk løsning, innenfor sitt eget nettverk, uavhengig av tredjepartsleverandører.
Denne tjenesten er veldig praktisk, ganske visuell, i motsetning til andre åpen kildekode-produkter, og støtter også et stort antall funksjoner og retningslinjer (for eksempel pålogging+passord+(PIN+OTPToken)). Gjennom API-en integreres den med sms-sendingstjenester (LinOTP Config->Provider Config->SMS Provider), genererer koder for mobilapplikasjoner som Google Authentificator og mye mer. Jeg tror det er mer praktisk enn tjenesten omtalt i
Denne serveren fungerer perfekt med Cisco ASA, OpenVPN-server, Apache2, og generelt med nesten alt som støtter autentisering via en RADIUS-server (For eksempel for SSH i datasenteret).
krever:
1) Debian 8 (jessie) - Alltid! (prøveinstallasjon på debian 9 er beskrevet på slutten av artikkelen)
start:
Installerer Debian 8.
Legg til LinOTP-depotet:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Legger til nøkler:
# gpg --search-keys 913DFF12F86258E5
Noen ganger under en "ren" installasjon, etter å ha kjørt denne kommandoen, viser Debian:
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
Dette er det første gnupg-oppsettet. Det er greit. Bare kjør kommandoen på nytt.
Til Debians spørsmål:
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) Выход>
Vi svarer: 1
Neste:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
Installer mysql. I teorien kan du bruke en annen sql-server, men for enkelhets skyld vil jeg bruke den som anbefalt for LinOTP.
(ytterligere informasjon, inkludert rekonfigurering av LinOTP-databasen, finnes i den offisielle dokumentasjonen for
# apt-get install mysql-server
# apt-get update
(det ville ikke skade å sjekke oppdateringene igjen)
Installer LinOTP og tilleggsmoduler:
# apt-get install linotp
Vi svarer på installatørens spørsmål:
Bruk Apache2: ja
Opprett et passord for admin Linotp: "Ditt passord"
Generere selvsignert sertifikat?: ja
Bruk MySQL?: ja
Hvor ligger databasen: localhost
Opprett en LinOTP-database (basenavn) på serveren: LinOTP2
Opprett en egen bruker for databasen: LinOTP2
Vi setter et passord for brukeren: "Ditt passord"
Bør jeg opprette en database nå? (noe sånt som "Er du sikker på at du vil..."): ja
Skriv inn MySQL root-passordet du opprettet da du installerte det: "DittPassord"
Ferdig.
(valgfritt, du trenger ikke å installere det)
# apt-get install linotp-adminclient-cli
(valgfritt, du trenger ikke å installere det)
# apt-get install libpam-linotp
Og derfor er vårt Linotp-nettgrensesnitt nå tilgjengelig på:
"<b>https</b>: //IP_сервера/manage"
Jeg skal snakke om innstillingene i nettgrensesnittet litt senere.
Nå, det viktigste! Vi hever FreeRadius og kobler det til Linotp.
Installer FreeRadius og modul for arbeid med LinOTP
# apt-get install freeradius linotp-freeradius-perl
sikkerhetskopiere klient- og brukerradiuskonfigurasjonene.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Opprett en tom klientfil:
# touch /etc/freeradius/clients.conf
Redigering av vår nye konfigurasjonsfil (den sikkerhetskopierte konfigurasjonen kan brukes som eksempel)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Deretter oppretter du en brukerfil:
# touch /etc/freeradius/users
Vi redigerer filen og forteller radius at vi vil bruke perl for autentisering.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Deretter redigerer du filen /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perl
Vi må spesifisere banen til perl linotp-skriptet i modulparameteren:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
... ..
Deretter lager vi en fil der vi sier hvilket (domene, database eller fil) dataene skal hentes fra.
# 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
Jeg skal gå litt mer i detalj her fordi det er viktig:
Full beskrivelse av filen med kommentarer:
#IP til linOTP-serveren (IP-adressen til LinOTP-serveren vår)
URL=https://172.17.14.103/validate/simplecheck
#Vårt område som vi skal lage i LinOTP-nettgrensesnittet.)
REALM=rearm1
#Navnet på brukergruppen som er opprettet i LinOTP-nettmunningen.
RESCONF=flat_fil
#valgfritt: kommenter hvis alt ser ut til å fungere bra
Debug=True
#valgfritt: bruk dette, hvis du har selvsignerte sertifikater, ellers kommenter ut (SSL hvis vi lager vårt eget sertifikat og ønsker å bekrefte det)
SSL_CHECK=Usant
Deretter oppretter du filen /etc/freeeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
Og kopier konfigurasjonen inn i den (du trenger ikke å redigere noe):
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
}
Deretter oppretter vi en SIM-lenke:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Personlig dreper jeg standard Radius-nettsteder, men hvis du trenger dem, kan du enten redigere konfigurasjonen eller deaktivere dem.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
La oss nå gå tilbake til nettfjeset og se på det litt mer detaljert:
I øvre høyre hjørne klikker du LinOTP Config -> UserIdResolvers -> New
Vi velger hva vi vil ha: LDAP (AD win, LDAP samba), eller SQL, eller lokale brukere av Flatfile-systemet.
Fyll ut de obligatoriske feltene.
Deretter lager vi REALMS:
I øvre høyre hjørne klikker du LinOTP Config -> Realms -> New.
og gi et navn til våre REALMS, og klikk også på de tidligere opprettede UserIdResolvers.
FreeRadius trenger alle disse dataene i filen /etc/linotp2/rlm_perl.ini, som jeg skrev om ovenfor, så hvis du ikke redigerte den da, gjør det nå.
Serveren er alt konfigurert.
supplere:
Sette opp LinOTP på Debian 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
(som standard, i Debian 9 tilbyr ikke mysql (mariaDB) å sette et root-passord, selvfølgelig kan du la det stå tomt, men hvis du leser nyhetene, fører dette veldig ofte til "epic fails", så vi vil sette det uansett)
# 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
Lim inn koden (sendt av JuriM, takk til ham for det!):
server linotp {
lytte {
ipaddr = *
port = 1812
type=aut
}
lytte {
ipaddr = *
port = 1813
type = akkt
}
autorisere {
forprosess
Oppdater {
&control:Auth-Type := Perl
}
}
autentisere {
Auth-Type Perl {
perl
}
}
regnskap {
unix
}
}
Rediger /etc/freeeradius/3.0/mods-enabled/perl
perl {
filnavn = /usr/share/linotp/radius_linotp.pm
func_authenticate = autentisere
func_authorize = autorisere
}
Dessverre, i Debian 9 er ikke radius_linotp.pm-biblioteket installert fra depotene, så vi tar det fra 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.pm
la oss nå redigere /etc/freeradius/3.0/clients.conf
klientservere {
ipaddr = 192.168.188.0/24
hemmelig = passordet ditt
}
La oss nå korrigere nano /etc/linotp2/rlm_perl.ini
Vi limer inn den samme koden der som ved installasjon på debian 8 (beskrevet ovenfor)
det er alt etter ideen. (ikke testet enda)
Nedenfor vil jeg legge igjen noen lenker for å sette opp systemer som oftest må beskyttes med tofaktorautentisering:
Sette opp tofaktorautentisering i
justering
CMS-ene til mange nettsteder støtter også tofaktorautentisering (for WordPress har LinOTP til og med sin egen spesialmodul for
VIKTIG FAKTA! IKKE merk av for "Google autenteficator" for å bruke Google Authenticator! QR-koden er ikke lesbar da... (merkelig faktum)
For å skrive denne artikkelen ble informasjon fra følgende artikler brukt:
Takk til forfatterne.
Kilde: www.habr.com