I dag vil jeg dele, hvordan man opsætter en to-faktor autentificeringsserver for at beskytte et virksomhedsnetværk, websteder, tjenester, ssh. Serveren vil køre følgende kombination: LinOTP + FreeRadius.
Hvorfor har vi brug for det?
Dette er en helt gratis, bekvem løsning inden for sit eget netværk, uafhængig af tredjepartsudbydere.
Denne service er meget praktisk, ret visuel i modsætning til andre open source-produkter og understøtter også et stort antal funktioner og politikker (For eksempel login+adgangskode+(PIN+OTPToken)). Gennem API'en integreres den med sms-afsendelsestjenester (LinOTP Config->Provider Config->SMS Provider), genererer koder til mobilapplikationer såsom Google Authenticator og meget mere. Jeg synes, det er mere praktisk end den service, der er diskuteret i
Denne server fungerer perfekt med Cisco ASA, OpenVPN server, Apache2, og generelt med næsten alt, der understøtter autentificering via en RADIUS-server (F.eks. til SSH i datacenteret).
kræver:
1) Debian 8 (jessie) - Altid! (prøveinstallation på debian 9 er beskrevet i slutningen af artiklen)
Home:
Installation af Debian 8.
Tilføj LinOTP-lageret:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Tilføjelse af nøgler:
# gpg --search-keys 913DFF12F86258E5
Nogle gange under en "ren" installation, efter at have kørt denne kommando, 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 den indledende gnupg-opsætning. Det er ok. Bare kør kommandoen igen.
Til Debians spørgsmå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
Næste:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
Installer mysql. I teorien kan du bruge en anden sql-server, men for nemheds skyld vil jeg bruge den som anbefalet til LinOTP.
(yderligere oplysninger, herunder rekonfigurering af LinOTP-databasen, kan findes i den officielle dokumentation for
# apt-get install mysql-server
# apt-get update
(det ville ikke skade at tjekke opdateringerne igen)
Installer LinOTP og yderligere moduler:
# apt-get install linotp
Vi besvarer installatørens spørgsmål:
Brug Apache2: ja
Opret en adgangskode til admin Linotp: "Dit kodeord"
Generer selvsigneret certifikat?: ja
Brug MySQL?: ja
Hvor er databasen placeret: localhost
Opret en LinOTP-database (basenavn) på serveren: LinOTP2
Opret en separat bruger til databasen: LinOTP2
Vi sætter en adgangskode til brugeren: "Dit kodeord"
Skal jeg oprette en database nu? (noget i stil med "Er du sikker på, at du vil..."): ja
Indtast MySQL root-adgangskoden, som du oprettede, da du installerede den: "YourPassword"
Udført.
(valgfrit, du behøver ikke at installere det)
# apt-get install linotp-adminclient-cli
(valgfrit, du behøver ikke at installere det)
# apt-get install libpam-linotp
Og derfor er vores Linotp-webgrænseflade nu tilgængelig på:
"<b>https</b>: //IP_сервера/manage"
Jeg vil tale om indstillingerne i webgrænsefladen lidt senere.
Nu, det vigtigste! Vi hæver FreeRadius og forbinder det med Linotp.
Installer FreeRadius og modul til at arbejde med LinOTP
# apt-get install freeradius linotp-freeradius-perl
sikkerhedskopiere klient- og brugerradius-konfigurationerne.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Opret en tom klientfil:
# touch /etc/freeradius/clients.conf
Redigering af vores nye konfigurationsfil (den sikkerhedskopierede konfiguration kan bruges som eksempel)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Opret derefter en brugerfil:
# touch /etc/freeradius/users
Vi redigerer filen og fortæller radius, at vi vil bruge perl til godkendelse.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Rediger derefter filen /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perl
Vi skal angive stien til perl linotp-scriptet i modulparameteren:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
... ..
Dernæst opretter vi en fil, hvori vi siger, hvilket (domæne, database eller fil) vi skal tage dataene 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 vil gå lidt mere i detaljer her, fordi det er vigtigt:
Fuld beskrivelse af filen med kommentarer:
#IP for linotp-serveren (IP-adressen på vores LinOTP-server)
URL=https://172.17.14.103/validate/simplecheck
#Vores område, som vi vil oprette i LinOTP-webgrænsefladen.)
REALM=rearm1
#Navn på den brugergruppe, der er oprettet i LinOTP-webmulden.
RESCONF=flad_fil
#valgfrit: kommenter, hvis alt ser ud til at fungere fint
Debug=Sandt
#valgfrit: brug dette, hvis du har selvsignerede certifikater, ellers kommenter ud (SSL hvis vi opretter vores eget certifikat og ønsker at verificere det)
SSL_CHECK=Falsk
Opret derefter filen /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
Og kopier konfigurationen ind i den (ingen grund til at redigere noget):
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
}
Dernæst vil vi oprette et SIM-link:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Personligt dræber jeg standard Radius-websteder, men hvis du har brug for dem, kan du enten redigere deres konfiguration eller deaktivere dem.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
Lad os nu vende tilbage til web-ansigtet og se på det lidt mere detaljeret:
I øverste højre hjørne skal du klikke på LinOTP Config -> UserIdResolvers -> New
Vi vælger, hvad vi vil have: LDAP (AD win, LDAP samba), eller SQL, eller lokale brugere af Flatfile-systemet.
Udfyld de påkrævede felter.
Dernæst opretter vi REALMS:
I øverste højre hjørne skal du klikke på LinOTP Config -> Realms -> New.
og giv et navn til vores REALMS, og klik også på de tidligere oprettede UserIdResolvers.
FreeRadius har brug for alle disse data i filen /etc/linotp2/rlm_perl.ini, som jeg skrev om ovenfor, så hvis du ikke redigerede det dengang, så gør det nu.
Serveren er alt sammen konfigureret.
supplement:
Opsætning af 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 tilbyder mysql (mariaDB) ikke at sætte en root-adgangskode, selvfølgelig kan du lade den stå tom, men hvis du læser nyhederne, fører dette meget ofte til "epic fails", så vi indstiller det alligevel)
# 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
Indsæt koden (sendt af JuriM, tak til ham for det!):
server linotp {
Hør efter {
ipaddr = *
port = 1812
type=aut
}
Hør efter {
ipaddr = *
port = 1813
type = acct
}
autorisere {
forproces
opdatering {
&control:Auth-Type := Perl
}
}
autentificere {
Auth-Type Perl {
perl
}
}
regnskab {
unix
}
}
Rediger /etc/freeradius/3.0/mods-enabled/perl
perl {
filnavn = /usr/share/linotp/radius_linotp.pm
func_authenticate = godkende
func_authorize = autorisere
}
Desværre er radius_linotp.pm-biblioteket i Debian 9 ikke installeret fra lagrene, så vi tager 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
lad os nu redigere /etc/freeradius/3.0/clients.conf
klientservere {
ipaddr = 192.168.188.0/24
hemmelig = din adgangskode
}
Lad os nu rette nano /etc/linotp2/rlm_perl.ini
Vi indsætter den samme kode der, som ved installation på debian 8 (beskrevet ovenfor)
det er alt efter ideen. (ikke testet endnu)
Nedenfor vil jeg efterlade et par links om opsætning af systemer, der oftest skal beskyttes med to-faktor-godkendelse:
Opsætning af to-faktor-godkendelse i
justering
CMS'erne på mange websteder understøtter også to-faktor-autentificering (for WordPress har LinOTP endda sit eget specielle modul til
VIGTIG FAKTA! Markér IKKE afkrydsningsfeltet "Google Autenteficator" for at bruge Google Authenticator! QR-koden kan da ikke læses... (mærkeligt faktum)
For at skrive denne artikel blev oplysninger fra følgende artikler brugt:
Tak til forfatterne.
Kilde: www.habr.com