Idag vill jag dela med mig av hur man ställer in en tvåfaktorsautentiseringsserver för att skydda ett företagsnätverk, webbplatser, tjänster, ssh. Servern kommer att köra följande kombination: LinOTP + FreeRadius.
Varför behöver han oss?
Detta är en helt gratis, bekväm lösning, inom sitt eget nätverk, oberoende av tredjepartsleverantörer.
Den här tjänsten är mycket bekväm, ganska visuell, till skillnad från andra produkter med öppen källkod, och stöder också ett stort antal funktioner och policyer (till exempel login+lösenord+(PIN+OTPToken)). Genom API:t integreras den med sms-sändningstjänster (LinOTP Config->Provider Config->SMS Provider), genererar koder för mobilapplikationer som Google Authenticator och mycket mer. Jag tycker att det är bekvämare än tjänsten som diskuteras i
Denna server fungerar perfekt med Cisco ASA, OpenVPN-server, Apache2, och i allmänhet med nästan allt som stöder autentisering via en RADIUS-server (T.ex. för SSH i datacentret).
Det krävs:
1) Debian 8 (jessie) - Krävs! (provinstallation på debian 9 beskrivs i slutet av artikeln)
Start:
Installerar Debian 8.
Lägg till LinOTP-förvaret:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Lägger till nycklar:
# gpg --search-keys 913DFF12F86258E5
Ibland under en "ren" installation, efter att ha kört det här kommandot, visar 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
Detta är den första gnupg-inställningen. Det är ok. Kör bara kommandot igen.
Till Debians fråga:
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 svarar: 1
Nästa:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
Installera mysql. I teorin kan du använda en annan sql-server, men för enkelhetens skull kommer jag att använda den som rekommenderad för LinOTP.
(ytterligare information, inklusive omkonfigurering av LinOTP-databasen, finns i den officiella dokumentationen för
# apt-get install mysql-server
# apt-get update
(det skulle inte skada att kolla uppdateringarna igen)
Installera LinOTP och ytterligare moduler:
# apt-get install linotp
Vi svarar på installatörens frågor:
Använd Apache2: ja
Skapa ett lösenord för admin Linotp: "Ditt lösenord"
Generera självsignerat certifikat?: ja
Använd MySQL?: ja
Var finns databasen: localhost
Skapa en LinOTP-databas (basnamn) på servern: LinOTP2
Skapa en separat användare för databasen: LinOTP2
Vi ställer in ett lösenord för användaren: "Ditt lösenord"
Ska jag skapa en databas nu? (något i stil med "Är du säker på att du vill..."): ja
Ange MySQL root-lösenordet som du skapade när du installerade det: "YourPassword"
Klar.
(valfritt, du behöver inte installera det)
# apt-get install linotp-adminclient-cli
(valfritt, du behöver inte installera det)
# apt-get install libpam-linotp
Och så vårt Linotp webbgränssnitt är nu tillgängligt på:
"<b>https</b>: //IP_сервера/manage"
Jag ska prata om inställningarna i webbgränssnittet lite senare.
Nu, det viktigaste! Vi höjer FreeRadius och länkar det till Linotp.
Installera FreeRadius och modul för att arbeta med LinOTP
# apt-get install freeradius linotp-freeradius-perl
säkerhetskopiera klienten och användarradiekonfigurationer.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Skapa en tom klientfil:
# touch /etc/freeradius/clients.conf
Redigera vår nya konfigurationsfil (den säkerhetskopierade konfigurationen kan användas som exempel)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Skapa sedan en användarfil:
# touch /etc/freeradius/users
Vi redigerar filen och säger till radien att vi kommer att använda perl för autentisering.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Redigera sedan filen /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perl
Vi måste ange sökvägen till perl linotp-skriptet i modulparametern:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
.....
Därefter skapar vi en fil där vi säger vilken (domän, databas eller fil) vi ska hämta data från.
# 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
Jag ska gå in lite mer i detalj här eftersom det är viktigt:
Fullständig beskrivning av filen med kommentarer:
#IP för linOTP-servern (IP-adress för vår LinOTP-server)
URL=https://172.17.14.103/validate/simplecheck
#Vårt område som vi kommer att skapa i LinOTP-webbgränssnittet.)
REALM=rearm1
#Namn på användargruppen som skapas i LinOTP-webbensmynningen.
RESCONF=platt_fil
#valfritt: kommentera om allt verkar fungera bra
Debug=Sant
#valfritt: använd detta, om du har självsignerade certifikat, annars kommentera bort (SSL om vi skapar vårt eget certifikat och vill verifiera det)
SSL_CHECK=False
Skapa sedan filen /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
Och kopiera konfigurationen till den (du behöver inte redigera någonting):
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
}
Därefter skapar vi en SIM-länk:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Personligen dödar jag standard Radius-sajter, men om du behöver dem kan du antingen redigera deras konfiguration eller inaktivera dem.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
Låt oss nu återgå till webbansiktet och titta på det lite mer detaljerat:
I det övre högra hörnet klickar du på LinOTP Config -> UserIdResolvers -> New
Vi väljer vad vi vill ha: LDAP (AD win, LDAP samba), eller SQL, eller lokala användare av Flatfile-systemet.
Fyll i de obligatoriska fälten.
Därefter skapar vi REALMS:
I det övre högra hörnet klickar du på LinOTP Config -> Realms -> New.
och ge ett namn till våra REALMS, och klicka även på de tidigare skapade UserIdResolvers.
FreeRadius behöver all denna data i filen /etc/linotp2/rlm_perl.ini, som jag skrev om ovan, så om du inte redigerade den då, gör det nu.
Servern är konfigurerad.
Tillägg:
Konfigurera 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 erbjuder mysql (mariaDB) inte att ställa in ett root-lösenord, självklart kan du lämna det tomt, men om du läser nyheterna leder detta väldigt ofta till "epic fails", så vi kommer att ställa in det i alla fall)
# 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
Klistra in koden (skickad av JuriM, tack till honom för det!):
server linotp {
lyssna {
ipaddr = *
port = 1812
typ=auth
}
lyssna {
ipaddr = *
port = 1813
typ = acct
}
auktorisera {
förprocess
uppdatering {
&control:Auth-Type := Perl
}
}
autentisera {
Auth-Type Perl {
perl
}
}
bokföring {
unix
}
}
Redigera /etc/freeeradius/3.0/mods-enabled/perl
perl {
filnamn = /usr/share/linotp/radius_linotp.pm
func_authenticate = autentisera
func_authorize = auktorisera
}
Tyvärr, i Debian 9 är biblioteket radius_linotp.pm inte installerat från arkiven, så vi tar det från 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
låt oss nu redigera /etc/freeradius/3.0/clients.conf
klientservrar {
ipaddr = 192.168.188.0/24
hemligt = ditt lösenord
}
Låt oss nu korrigera nano /etc/linotp2/rlm_perl.ini
Vi klistrar in samma kod där som när vi installerade på debian 8 (beskrivs ovan)
det är allt enligt tanken. (ej testat än)
Jag kommer att lämna nedan några länkar för att ställa in system som oftast behöver skyddas med tvåfaktorsautentisering:
Ställer in tvåfaktorsautentisering i
justering
Dessutom stöder cms för många webbplatser tvåfaktorsautentisering (för WordPress har LinOTP till och med sin egen specialmodul för
VIKTIGT FAKTA! Markera INTE rutan "Google autenteficator" för att använda Google Authenticator! QR-koden är inte läsbar då... (konstigt faktum)
För att skriva den här artikeln användes information från följande artiklar:
Tack till författarna.
Källa: will.com