LinOTP இரு காரணி அங்கீகார சேவையகம்

LinOTP இரு காரணி அங்கீகார சேவையகம்

Сегодня я хочу поделиться, как настроить сервер двухфакторной авторизации, для защиты корпоративной сети, сайтов, сервисов,ssh. На сервере будет работать связка: LinOTP + FreeRadius.

Зачем он нам?
Это полностью бесплатное, удобное решение, внутри своей сети, не зависящее от сторонних провайдеров.

Данный сервис весьма удобен, достаточно нагляден, в отличии от других опенсорс продуктов, а так же поддерживает огромное количество функций и политик (Например login+password+(PIN+OTPToken)). Через API интегрируется с сервисами отправки sms (LinOTP Config->Provider Config->SMS Provider), генерирует коды для мобильных приложений типа Google Autentificator и многое другое. Я считаю он более удобен чем сервис рассматриваемый в கட்டுரை.

Данный сервер отлично работает с 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. Ничего страшного. Просто выполните команду еще раз.
На вопрос Debiana:

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) Выход>

Отвечаем: 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 который создали при его установке: «ВашПароль»
Done.

(опционально, можно и не ставить)

# apt-get install linotp-adminclient-cli 

(опционально, можно и не ставить)

# apt-get install libpam-linotp  

И так наш веб-интерфейс Linotp теперь доступен по адресу:

"<b>https</b>: //IP_сервера/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 { .......
.........
<source lang="bash">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 {
#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
}

Далее сделаем сим линк:

# 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) не предлагает устанавливать пароль рута, конечно вы можете оставить его и пустым, но если вы читаете новости, то очень часто это приводит к «эпик фейлам», поэтому мы его все-таки установим)

# 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 = *
துறைமுகம் = 1812
type = auth
}
listen {
ipaddr = *
துறைமுகம் = 1813
type = acct
}
authorize {
முன்செயல்முறை
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
பேர்ல்
}
}
accounting {
யூனிக்ஸ்
}
}

Редактируем /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 c двухфакторной аутентификации

சரிசெய்தல் двухфакторной аутентификации в ssh (там так же используется LinOTP) — спасибо автору. Там же можно найти интересные вещи по настройке политик LiOTP.

Так же cms многих сайтов поддерживают двухфакторную аутентификацию(Для WordPress у LinOTP даже есть свой специальный модуль на -மகிழ்ச்சியா), например, если вы хотите на своем корпоративном сайте сделать защищенный раздел для сотрудников компании.
ВАЖНЫЙ ФАКТ! НЕ ставьте галочку «Google autenteficator» для использования гугл аутентификатора! QR-код не читается тогда… (странный факт)

Для написания статьи использовалась информация из следующих статей:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Спасибо авторам.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்