
Vandaag wil ik delen hoe je een server voor twee-factor authenticatie instelt, ter bescherming van netwerken, websites, diensten en SSH. Op de server zal de combinatie LinOTP + FreeRadius draaien.
Waarom hebben we dit nodig?
Dit is een volledig gratis, gebruiksvriendelijke oplossing binnen je eigen netwerk, zonder afhankelijkheid van externe providers.
Deze service is zeer gebruiksvriendelijk, duidelijker dan andere open-source producten en ondersteunt een groot aantal functies en beleidslijnen (bijvoorbeeld login + wachtwoord + (PIN + OTPToken)). Het integreert met sms-verstuurservices via API (LinOTP Config->Provider Config->SMS Provider), genereert codes voor mobiele apps zoals Google Authenticator en nog veel meer. Ik beschouw het als handiger dan de service die wordt besproken in .
Deze server werkt uitstekend met Cisco ASA, OpenVPN-server, Apache2 en vrijwel alles wat RADIUS-authenticatie ondersteunt (bijvoorbeeld voor SSH in een datacenter).
Benodigd:
1) Debian 8 (jessie) — Verplicht! (de proefinstallatie op Debian 9 wordt aan het einde van het artikel beschreven)
Begin:
Installeer Debian 8.
Voeg de LinOTP-repository toe:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listVoeg de sleutels toe:
# gpg --search-keys 913DFF12F86258E5Soms, bij een 'schone' installatie, geeft Debian na het uitvoeren van deze opdracht:
gpg: gemaakt catalogus `/root/.gnupg'
gpg: nieuwe configuratiebestand `'/root/.gnupg/gpg.conf' aangemaakt
gpg: WAARSCHUWING: parameters in `/root/.gnupg/gpg.conf' zijn bij deze uitvoer nog niet actief
gpg: sleutelring tabel `/root/.gnupg/secring.gpg' aangemaakt
gpg: sleutelring tabel `/root/.gnupg/pubring.gpg' aangemaakt
gpg: geen sleutelservers opgegeven (gebruik --keyserver)
gpg: fout bij het zoeken op sleutelserver: slechte URI
Dit is de initiële configuratie van gnupg. Geen probleem. Voer de opdracht gewoon nogmaals uit.
Op de vraag van Debian:
gpg: zoeken naar "913DFF12F86258E5" op hkp-server keys.gnupg.net
(1) LSE LinOTP2 Packaging
2048 bit RSA-sleutel F86258E5, aangemaakt: 2010-05-10
Sleutels 1-1 van 1 voor "913DFF12F86258E5". Voer cijfers in, N) Volgende of Q) Afsluiten>Antwoord met: 1
Vervolg:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInstalleer mysql. In theorie kan je een andere SQL-server gebruiken, maar voor de eenvoud gebruik ik deze, die wordt aanbevolen voor LinOTP.
(aanvullende informatie, inclusief over het opnieuw configureren van de LinOTP-database, kan in de officiële documentatie worden gevonden . Daar kun je ook het commando vinden: dpkg-reconfigure linotp om parameters te wijzigen als je mysql al hebt geïnstalleerd).
# apt-get install mysql-server# apt-get update (het is geen kwaad om updates nogmaals te controleren)
Installeer LinOTP en aanvullende modules:
# apt-get install linotp Beantwoord de vragen van de installateur:
Gebruik Apache2: ja
Bedenk een wachtwoord voor admin Linotp: 'UwWachtwoord'
Genereer een zelfondertekend certificaat?: ja
MySQL gebruiken?: ja
Waar bevindt de database: localhost
We creëren een database LinOTP (databasenaam) op de server: LinOTP2
We maken een aparte gebruiker voor de database aan: LinOTP2
We stellen een wachtwoord in voor de gebruiker: «UwWachtwoord»
Wilt u de database nu aanmaken? (iets in de trant van “Bent u zeker dat u wilt …”): ja
Voer het root-wachtwoord van MySQL in dat we tijdens de installatie hebben aangemaakt: «UwWachtwoord»
Klaar.
(optioneel, hoeft niet te worden ingesteld)
# apt-get install linotp-adminclient-cli (optioneel, hoeft niet te worden ingesteld)
# apt-get install libpam-linotp En zo is onze webinterface LinOTP nu beschikbaar op het adres:
"<b>https<\/b>: \\\/\\\/IP_server\\\/manage"Over de instellingen in de webinterface zal ik later meer vertellen.
Nu, het belangrijkste! We starten FreeRadius en koppelen het aan LinOTP.
We installeren FreeRadius en de module voor samenwerking met LinOTP
# apt-get install freeradius linotp-freeradius-perlWe maken een back-up van de configuraties van de client en gebruikers van Radius.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldWe creëren een leeg klantbestand:
# touch /etc/freeradius/clients.confWe bewerken ons nieuwe configuratiebestand (de back-up configuratie kan als voorbeeld worden gebruikt)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # wachtwoord voor klantverbinding
}Vervolgens maken we het gebruikersbestand aan:
# touch /etc/freeradius/usersWe bewerken het bestand en vertellen Radius dat we Perl voor authenticatie zullen gebruiken.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlVervolgens bewerken we het bestand /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlWe moeten het pad naar het Perl-script linotp in de moduleparameter opgeven:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Vervolgens maken we een bestand aan waarin we aangeven waaruit (domein, database of bestand) de gegevens moeten worden verkregen.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_van_uw_LinOTP_server(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseHier stop ik even gedetailleerd, omdat dit belangrijk is:
Volledige beschrijving van het bestand met opmerkingen:
#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
Vervolgens maken we het bestand /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpEn kopiëren we de configuratie erin (niets hoeft aangepast te worden):
authorize {
#normalizes malformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
# Als u meerdere soorten domeinen gebruikt, wilt u waarschijnlijk
# "ignore_null = yes" voor allemaal instellen.
# Anders, wanneer de eerste stijl van domein niet overeenkomt,
# zullen de andere stijlen niet worden gecontroleerd.
#staat een lijst van domeinen toe (zie '/etc/freeradius/modules/realm')
IPASS
#begrijpt iets als USER@REALM en kan de componenten onderscheiden (zie '/etc/freeradius/modules/realm')
suffix
#begrijpt USERREALM en kan de componenten onderscheiden (zie '/etc/freeradius/modules/realm')
ntdomain
# Lees het 'users'-bestand om meer te leren over speciale configuratie die moet worden toegepast voor
# bepaalde gebruikers (zie '/etc/freeradius/modules/files')
files
# maakt het mogelijk om authenticatie te laten verlopen (zie '/etc/freeradius/modules/expiration')
expiration
# maakt het mogelijk om geldige servicetijden te definiëren (zie '/etc/freeradius/modules/logintime')
logintime
# We hebben geen radius_shortname_map!
pap
}
#hier wordt de linotp perl-module aangeroepen voor verdere verwerking
authenticate {
perl
}Vervolgens maken we een symlink aan:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledPersoonlijk elimineer ik de standaard Radius-websites, maar als je ze nodig hebt, kun je hun configuratie bewerken of ze uitschakelen.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Laten we nu teruggaan naar de webinterface en die iets gedetailleerder bekijken:
Klik rechtsboven op LinOTP Config -> UserIdResolvers -> Nieuw
Kies wat je wilt: LDAP (AD win, LDAP samba), SQL of lokale gebruikers van het systeem Flatfile.
Vul de vereiste velden in.
Vervolgens maken we REALMS aan:
Klik rechtsboven op LinOTP Config -> Realms -> Nieuw.
Geef onze REALM een naam en klik op de eerder gemaakte UserIdResolvers.
Al deze gegevens zijn nodig voor freeRadius in het bestand /etc/linotp2/rlm_perl.ini, waarover ik eerder schreef. Zorg ervoor dat je dit nu bewerkt als je dat nog niet gedaan hebt.
De server is geconfigureerd.
Addition:
Instelling van LinOTP op Debian 9:
Installatie:
# 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(standaard biedt Debian 9 geen rootwachtwoord aan voor mysql (mariaDB), je kunt het natuurlijk leeg laten, maar als je het nieuws volgt, leidt dit vaak tot 'epische faillissementen', dus we zullen het wel instellen)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('hier_wachtwoord') 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/linotpPlak de code (gestuurd door JuriM, waarvoor dank!):
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
}
}
Bewerk /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Helaas is de radius_linotp.pm bibliotheek in Debian 9 niet beschikbaar in de repositories, dus we zullen deze van GitHub halen.
# 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.pmNu passen we /etc/freeradius/3.0/clients.conf aan.
client servers {
ipaddr = 192.168.188.0/24
secret = jouwwachtwoord
}
Nu passen we nano /etc/linotp2/rlm_perl.ini aan.
Plak daar dezelfde code als bij de installatie op Debian 8 (beschreven hierboven)
in principe is alles klaar. (nog niet getest)
Ik laat hieronder een paar links achter voor het instellen van systemen die vaak beveiligd moeten worden met two-factor authenticatie:
Instelling van two-factor authenticatie in
(daar wordt een andere token-generatieserver gebruikt, maar de instellingen van de ASA zijn dezelfde).
Instellingen (daar wordt ook LinOTP gebruikt) — dank aan de auteur. Ook zijn er interessante dingen te vinden over het instellen van LiOTP-beleidsregels.
Ook ondersteunen veel CMS-systemen van websites two-factor authenticatie (Voor WordPress heeft LinOTP zelfs een speciale module op ), bijvoorbeeld als je een beveiligd gedeelte voor medewerkers van het bedrijf wilt maken op je bedrijfswebsite.
BELANGRIJK FEIT! Zet het vakje "Google authenticator" niet aan voor het gebruik van de Google-authenticator! De QR-code wordt dan niet gelezen… (vreemd feit)
Voor het schrijven van het artikel is gebruikgemaakt van informatie uit de volgende artikelen:
Bedankt aan de auteurs.
Bron: habr.com
