Vandaag wil ik delen hoe je een tweefactorauthenticatieserver instelt om een bedrijfsnetwerk, sites, services en ssh te beschermen. De server draait de volgende combinatie: LinOTP + FreeRadius.
Waarom heeft hij ons nodig?
Dit is een geheel gratis, handige oplossing, binnen het eigen netwerk, onafhankelijk van externe providers.
Deze service is erg handig, behoorlijk visueel, in tegenstelling tot andere open source-producten, en ondersteunt ook een groot aantal functies en beleid (bijvoorbeeld login+wachtwoord+(PIN+OTPToken)). Via de API integreert het met sms-verzenddiensten (LinOTP Config->Provider Config->SMS Provider), genereert het codes voor mobiele applicaties zoals Google Authentificator en nog veel meer. Ik denk dat het handiger is dan de service die wordt besproken
Deze server werkt perfect met Cisco ASA, OpenVPN-server, Apache2 en in het algemeen met vrijwel alles dat authenticatie via een RADIUS-server ondersteunt (bijvoorbeeld voor SSH in het datacenter).
vereist:
1) Debian 8 (jessie) - Verplicht! (proefinstallatie op debian 9 wordt beschreven aan het einde van het artikel)
start:
Debian 8 installeren.
Voeg de LinOTP-repository toe:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Sleutels toevoegen:
# gpg --search-keys 913DFF12F86258E5
Soms geeft Debian tijdens een “schone” installatie, na het uitvoeren van dit commando, het volgende weer:
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
Dit is de eerste gnupg-installatie. Het is ok. Voer de opdracht gewoon opnieuw uit.
Op de vraag van Debian:
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) Выход>
Wij antwoorden: 1
Volgende:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
Mysql installeren. In theorie kun je een andere SQL-server gebruiken, maar voor de eenvoud zal ik deze gebruiken zoals aanbevolen voor LinOTP.
(aanvullende informatie, inclusief het opnieuw configureren van de LinOTP-database, is te vinden in de officiële documentatie voor
# apt-get install mysql-server
# apt-get update
(het kan geen kwaad om de updates nog eens te controleren)
Installeer LinOTP en extra modules:
# apt-get install linotp
Wij beantwoorden de vragen van de installateur:
Gebruik Apache2: ja
Maak een wachtwoord aan voor beheerder Linotp: “Uw wachtwoord”
Zelfondertekend certificaat genereren?: ja
MySQL gebruiken?: ja
Waar bevindt de database zich: localhost
Maak een LinOTP-database (basisnaam) op de server: LinOTP2
Maak een aparte gebruiker aan voor de database: LinOTP2
We hebben een wachtwoord voor de gebruiker ingesteld: “Uw wachtwoord”
Moet ik nu een database aanmaken? (zoiets als “Weet je zeker dat je wilt...”): ja
Voer het MySQL-rootwachtwoord in dat u bij de installatie hebt aangemaakt: “YourPassword”
Klaar.
(optioneel, je hoeft het niet te installeren)
# apt-get install linotp-adminclient-cli
(optioneel, je hoeft het niet te installeren)
# apt-get install libpam-linotp
En dus is onze Linotp-webinterface nu beschikbaar op:
"<b>https</b>: //IP_сервера/manage"
Ik zal het later hebben over de instellingen in de webinterface.
Nu het allerbelangrijkste! We verhogen FreeRadius en koppelen het met Linotp.
Installeer FreeRadius en module voor het werken met LinOTP
# apt-get install freeradius linotp-freeradius-perl
maak een back-up van de client- en gebruikersradiusconfiguraties.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Maak een leeg klantenbestand aan:
# touch /etc/freeradius/clients.conf
Ons nieuwe configuratiebestand bewerken (de geback-upte configuratie kan als voorbeeld worden gebruikt)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Maak vervolgens een gebruikersbestand:
# touch /etc/freeradius/users
We bewerken het bestand en vertellen radius dat we perl zullen gebruiken voor authenticatie.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Bewerk vervolgens het bestand /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perl
We moeten het pad naar het perl linotp-script opgeven in de moduleparameter:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
.....
Vervolgens maken we een bestand waarin we aangeven uit welk domein (domein, database of bestand) we de gegevens moeten halen.
# 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
Ik zal hier wat dieper op ingaan, omdat het belangrijk is:
Volledige beschrijving van het bestand met commentaar:
#IP van de linOTP-server (IP-adres van onze LinOTP-server)
URL=https://172.17.14.103/validate/simplecheck
#Ons gebied dat we zullen creëren in de LinOTP-webinterface.)
REAL=herwapenen1
#Naam van de gebruikersgroep die is aangemaakt in de LinOTP-webmuilkorf.
RESCONF=plat_bestand
#optioneel: geef commentaar als alles goed lijkt te werken
Foutopsporing=Waar
#optioneel: gebruik dit als u zelfondertekende certificaten heeft, geef anders commentaar (SSL als we ons eigen certificaat maken en dit willen verifiëren)
SSL_CHECK=Onwaar
Maak vervolgens het bestand /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
En kopieer de configuratie ernaar (u hoeft niets te bewerken):
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
}
Vervolgens maken we een SIM-link:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Persoonlijk dood ik standaard Radius-sites, maar als je ze nodig hebt, kun je hun configuratie bewerken of uitschakelen.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
Laten we nu terugkeren naar het webgezicht en er wat gedetailleerder naar kijken:
Klik in de rechterbovenhoek op LinOTP Config -> UserIdResolvers -> Nieuw
We kiezen wat we willen: LDAP (AD win, LDAP samba), of SQL, of lokale gebruikers van het Flatfile-systeem.
Vul de verplichte velden in.
Vervolgens creëren we REALMS:
Klik in de rechterbovenhoek op LinOTP Config -> Realms -> Nieuw.
en geef een naam aan onze REALMS, en klik ook op de eerder gemaakte UserIdResolvers.
FreeRadius heeft al deze gegevens nodig in het bestand /etc/linotp2/rlm_perl.ini, zoals ik hierboven schreef, dus als je het toen niet hebt bewerkt, doe het dan nu.
De server is helemaal geconfigureerd.
aan te vullen:
LinOTP instellen op Debian 9:
Omgeving:
# 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 mysql (mariaDB) in Debian 9 niet aan om een root-wachtwoord in te stellen, je kunt het natuurlijk leeg laten, maar als je het nieuws leest, leidt dit heel vaak tot “epische mislukkingen”, dus we zullen het instellen Hoe dan ook)
# 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
Plak de code (verzonden door JuriM, bedankt daarvoor!):
server linotp {
luisteren {
ipaddr = *
port = 1812
type=auth
}
luisteren {
ipaddr = *
port = 1813
soort = acc
}
toestemming geven {
voorbewerken
update {
&control:Auth-Type := Perl
}
}
authenticeren {
Verificatietype Perl {
perl
}
}
boekhouding {
unix
}
}
Bewerk /etc/freeradius/3.0/mods-enabled/perl
perl {
bestandsnaam = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticeren
func_authorize = autoriseren
}
Helaas wordt in Debian 9 de bibliotheek radius_linotp.pm niet vanuit de repository's geïnstalleerd, dus halen we deze van 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
Laten we nu /etc/freeradius/3.0/clients.conf bewerken
clientservers {
ipaddr = 192.168.188.0/24
geheim = uw wachtwoord
}
Laten we nu nano /etc/linotp2/rlm_perl.ini corrigeren
We plakken daar dezelfde code als bij de installatie op debian 8 (hierboven beschreven)
dat is allemaal volgens het idee. (nog niet getest)
Ik laat hieronder een paar links achter voor het opzetten van systemen die meestal moeten worden beschermd met tweefactorauthenticatie:
Tweefactorauthenticatie instellen in
afstelling
Ook ondersteunt het cms van veel sites tweefactorauthenticatie (voor WordPress heeft LinOTP zelfs een eigen speciale module voor
BELANGRIJK FEIT! Vink het vakje “Google autenteficator” NIET aan om Google Authenticator te gebruiken! De QR-code is dan niet leesbaar... (vreemd feit)
Voor het schrijven van dit artikel is informatie uit de volgende artikelen gebruikt:
Met dank aan de auteurs.
Bron: www.habr.com