Сървър за двуфакторна автентикация LinOTP

Сървър за двуфакторна автентикация LinOTP

Днес искам да споделя как да настроите сървър за двуфакторна автентикация, за защита на корпоративната мрежа, сайтове, услуги, ssh. На сървъра ще работи комбинацията: LinOTP + FreeRadius.

Защо ни е нужен?
Това е напълно безплатно, удобно решение, вътре в своята мрежа, независимо от външни доставчици.

Тази услуга е доста удобна, достатъчно визуална, в сравнение с други open source продукти, и също така поддържа огромно количество функции и политики (например login+password+(PIN+OTPToken)). Чрез API се интегрира с услуги за изпращане на SMS (LinOTP Config->Provider Config->SMS Provider), генерира кодове за мобилни приложения като Google Authenticator и много други. Смятам, че е по-удобна от услугата, разглеждана в статии.

Този сървър работи отлично с Cisco ASA, OpenVPN сървър, Apache2 и почти всичко, което поддържа автентикация чрез RADIUS сървър (например за SSH в ЦОД).

Изисква се:

1) Debian 8 (jessie) — Задължително! (показан е пробен инсталационен процес на debian 9 в края на статията)

Начало:

Инсталираме Debian 8.

Добавяме репозиторий на LinOTP:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Добавяме ключовете:

# gpg --search-keys 913DFF12F86258E5

Понякога при "чиста" инсталация, след изпълнението на тази команда, 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

Това е първоначалната настройка на gnupg. Няма страшно. Просто изпълнете командата отново.
На въпроса на Debian:

gpg: търсене "913DFF12F86258E5" на hkp сървър keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  2048 bit RSA ключ F86258E5, създаден: 2010-05-10
Ключове 1-1 от 1 за "913DFF12F86258E5". Въведете числа, N) Следващ или Q) Изход>

Отговаряме: 1

След това:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Инсталираме mysql. В теоретичен план може да използвате друг sql сървър, но за простота ще го използвам, като препоръчан за LinOTP.

(допълнителна информация, включително за пренастройване на базата данни на LinOTP, можете да намерите в официалната документация за връзката. Там можете да намерите командата: dpkg-reconfigure linotp за промяна на параметрите, ако вече сте инсталирали mysql).

# apt-get install mysql-server

# apt-get update

(допълнително проверяване на актуализации не би навредило)
Инсталираме LinOTP и допълнителните модули:

# apt-get install linotp

Отговаряме на въпросите на инсталатора:
Използва ли Apache2: да
Придумайте парола за admin Linotp: „ВашатаПарола“
Генериране на самоподписан сертификат?: да
Използвайте MySQL?: да
Къде се намира базата данни: localhost
Създаваме база LinOTP (име на базата) на сървъра: LinOTP2
Създаваме отделен потребител за базата данни: LinOTP2
Задаваме паролата на потребителя: «ВашПарола»
Да създадем ли базата сега? (нещо като "Сигурни ли сте, че искате ..."): да
Въвеждаме паролата root от MySQL, която сме създали при инсталацията: «ВашПарола»
Готово.

(по избор, може и да не се слага)

# apt-get install linotp-adminclient-cli 

(по избор, може и да не се слага)

# apt-get install libpam-linotp  

И така, нашият уеб интерфейс Linotp е сега достъпен на адрес:

"<b>https<\/b>: \/\/IP_\u0441\u0435\u0440\u0432\u0435\u0440\u0430\/manage"

За настройките в уеб интерфейса ще говоря по-късно.

Сега, най-важното! Стартираме FreeRadius и свързваме с Linotp.

Инсталираме FreeRadius и модула за работа с LinOTP

# apt-get install freeradius linotp-freeradius-perl

правим резервно копие на конфигурациите client и Users на радиуса.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Създаваме празен файл на клиента:

# touch /etc/freeradius/clients.conf

Редактираме нашия нов файл с конфигурацията (резервният конфиг може да се използва като пример)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # парола за свързване на клиентите
}

След това създаваме файла users:

# touch /etc/freeradius/users

Редактираме файла, казвайки на радиуса, че ще използваме perl за удостоверяване.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

След това редактираме файла /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Трябва да посочим пътя към perl скрипта linotp в параметъра module:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
След това създаваме файл, в който указваме от какъв (домен, база или файл) да извличаме данни.

# 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

Тук ще се спра малко по-подробно, тъй като това е важно:

Пълно описание на файла с коментари:
#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

След това създаваме файла /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

И копираме в него конфигурацията (не е необходимо да се променя нищо):

authorize {
# нормализиране на неправилно формулираното клиентско запитване преди предаване на други модули (виж '/etc/freeradius/modules/preprocess')
preprocess
#  Ако използвате множество видове реалми, вероятно
#  искате да зададете "ignore_null = yes" за всички тях.
#  В противен случай, когато първият стил на реалм не съвпада,
#  другите стилове няма да бъдат проверявани.
# позволява списък с реалми (виж '/etc/freeradius/modules/realm')
IPASS
# разбира нещо като USER@REALM и може да различава компонентите (виж '/etc/freeradius/modules/realm')
suffix
# разбира USERREALM и може да различава компонентите (виж '/etc/freeradius/modules/realm')
ntdomain
#  Чете файла 'users', за да научи за специалната конфигурация, която трябва да се приложи за
# определени потребители (виж '/etc/freeradius/modules/files')
files
# позволява удостоверяването да изтече (виж '/etc/freeradius/modules/expiration')
expiration
# позволява да се определят валидни времена на обслужване (виж '/etc/freeradius/modules/logintime')
logintime
# Нямаме radius_shortname_map!
pap
}
# тук модулът perl на linotp се извиква за по-нататъшна обработка
authenticate {
perl
}

След това ще направим символна връзка:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

Лично убивам дефолтните радиус сайтов, но ако са ви нужни, можете или да редактирате конфигурацията им, или да ги деактивирате.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Сега да се върнем към уеб интерфейса и да го разгледаме малко по-подробно:
В горния десен ъгъл натискаме LinOTP Config -> UserIdResolvers -> New
Избираме какво искаме: LDAP (AD win, LDAP samba), или SQL, или локални потребители на системата Flatfile.

Попълваме необходимите полета.

След това създаваме REALMS:
В горния десен ъгъл натискаме LinOTP Config -> Realms -> New.
и даваме име на нашия REALMS, както и кликваме на създадения по-рано UserIdResolvers.

Всички тези данни са нужни на freeRadius в файла /etc/linotp2/rlm_perl.ini, за което писах по-горе, така че, ако не сте го редактирали тогава, направете го сега.

Серверът е конфигуриран.

Допълнение:

Настройка на LinOTP на 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

(по подразбиране, в Debian 9 mysql (mariaDB) не предлага да инсталирате парола за root; разбира се, можете да я оставите и празна, но ако следите новините, често това води до "епични провали", затова ще я инсталираме)

# 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

Вмъкваме кода (изпратен от JuriM, благодаря му!):

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
}
}

Редактираме /etc/freeradius/3.0/mods-enabled/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

За съжаление в debian 9 библиотеката radius_linotp.pm не е налична в хранилищата, затова ще я вземем от 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

Сега да редактираме /etc/freeradius/3.0/clients.conf

client servers {
ipaddr = 192.168.188.0/24
secret = вашпароль
}

Сега да редактираме nano /etc/linotp2/rlm_perl.ini

Вмъкваме там същия код, който използвахме при инсталацията на debian 8 (описано по-горе)

По идея всичко е готово. (пока не протестированно)

Ще оставя по-долу няколко линка за настройка на системи, които често изискват защита с двуфакторна авторизация:
Настройка на двуфакторна аутентификация в Apache2

Настройка с Cisco ASA(там се използва друг сървър за генериране на токени, но настройките на самата ASA са същите).

VPN с двуфакторна аутентификация

Настройка двуфакторна аутентификация в ssh (там също се използва LinOTP) – благодаря на автора. Там също можете да намерите интересни неща за настройка на политиките на LinOTP.

Също така много CMS поддържат двуфакторна аутентификация (за WordPress LinOTP дори има свой собствен модул на github), например, ако искате на корпоративния си сайт да направите защитена секция за служителите на компанията.
ВАЖЕН ФАКТ! НЕ поставявайте отметка "Google authenticator" за използване на Google аутентификатора! QR кодът не се сканира тогава… (странен факт)

За написването на статията беше използвана информация от следните статии:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Благодаря на авторите.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster