LinOTP 双因素身份验证服务器

LinOTP 双因素身份验证服务器

今天我想分享如何设置一个双因素身份验证服务器来保护您的公司网络、网站、服务、ssh。 服务器将运行以下组合:LinOTP + FreeRadius。

我们为什么需要它?
这是一个完全免费、方便的解决方案,在自己的网络内,独立于第三方提供商。

与其他开源产品不同,该服务非常方便,非常直观,并且还支持大量的功能和策略(例如,登录+密码+(PIN+OTPToken))。 通过 API,它与短信发送服务集成(LinOTP Config->Provider Config->SMS Provider),为移动应用程序(例如 Google Authentificator 等)生成代码。 我认为这比中讨论的服务更方便 文章.

该服务器可以与 Cisco ASA、OpenVPN 服务器、Apache2 以及几乎所有支持通过 RADIUS 服务器进行身份验证的设备(例如,数据中心中的 SSH)完美配合。

要求:

1) Debian 8 (杰西) - 可以肯定的! (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 <[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 数据库,可以在官方文档中找到 链接。 如果您已经安装了 mysql,您还可以在其中找到命令:dpkg-reconfigure linotp 来更改参数)。

# apt-get install mysql-server

# apt-get update

(再次检查更新也没什么坏处)
安装 LinOTP 和附加模块:

# apt-get install linotp

我们回答安装人员的问题:
使用 Apache2:是
创建管理员 Linotp 的密码:“您的密码”
生成自签名证书?: 是
使用 MySQL?: 是
数据库位于哪里:localhost
在服务器上创建LinOTP数据库(基本名称):LinOTP2
为数据库创建一个单独的用户:LinOTP2
我们为用户设置密码:“您的密码”
我现在应该创建数据库吗? (类似于“您确定要......”):是的
输入您在安装时创建的 MySQL root 密码:“YourPassword”
完成。

(可选,不必安装)

# apt-get install linotp-adminclient-cli 

(可选,不必安装)

# apt-get install libpam-linotp  

因此,我们的 Linotp Web 界面现在可以在以下位置使用:

"<b>https</b>: //IP_сервера/manage"

稍后我将讨论网络界面中的设置。

现在,最重要的是! 我们提出 FreeRadius 并将其与 Linotp 链接。

安装 FreeRadius 和模块以与 LinOTP 配合使用

# apt-get install freeradius linotp-freeradius-perl

备份客户端和用户半径配置。

# 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 # пароль для подключения клиентов
}

接下来,创建一个用户文件:

# touch /etc/freeradius/users

我们编辑该文件,告诉 radius 我们将使用 perl 进行身份验证。

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

接下来,编辑文件 /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

我们需要在模块参数中指定perl linotp脚本的路径:

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

我将在这里详细介绍一下,因为这很重要:

文件的完整描述和注释:
#linotp服务器的IP(我们的LinOTP服务器的IP地址)
URL=https://172.17.14.103/validate/simplecheck
#我们将在 LinOTP Web 界面中创建的区域。)
领域=重新武装1
#在 LinOTP Web 枪口中创建的用户组的名称。
RESCONF=平面文件
#可选:如果一切正常,请注释掉
调试=真
#可选:如果您有自签名证书,请使用此选项,否则请注释掉(如果我们创建自己的证书并想要验证它,则为 SSL)
SSL_CHECK=假

接下来,创建文件 /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
}

接下来我们将创建一个 SIM 卡链接:

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

就我个人而言,我会删除默认的 Radius 站点,但如果您需要它们,您可以编辑它们的配置或禁用它们。

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

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

# service freeradius reload

现在让我们回到 web 界面并更详细地查看它:
右上角点击LinOTP Config -> UserIdResolvers -> New
我们选择我们想要的:LDAP(AD win,LDAP samba),或SQL,或Flatfile系统的本地用户。

填写必填字段。

接下来我们创建 REALMS:
在右上角,单击LinOTP Config -> Realms -> New。
并为我们的 REALMS 命名,然后单击之前创建的 UserIdResolvers。

正如我在上面所写的,FreeRadius 需要 /etc/linotp2/rlm_perl.ini 文件中的所有这些数据,所以如果您当时没有编辑它,现在就编辑它。

服务器全部配置完毕。

补充:

在 Debian 9 上设置 LinOTP:

设置:

# 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 发送,感谢他!):

服务器 linotp {
听 {
ip 地址 = *
端口 = 1812
类型=验证
}
听 {
ip 地址 = *
端口 = 1813
类型 = 帐户
}
授权{
预处理
更新 {
&control:Auth-Type := Perl
}
}
验证{
身份验证类型 Perl {
perl的
}
}
会计{
UNIX
}
}

编辑/etc/freeradius/3.0/mods-enabled/perl

珀尔{
文件名 = /usr/share/linotp/radius_linotp.pm
func_authenticate = 验证
func_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

客户端服务器{
ip 地址 = 192.168.188.0/24
秘密=你的密码
}

现在让我们更正nano /etc/linotp2/rlm_perl.ini

我们粘贴与在 debian 8 上安装时相同的代码(如上所述)

一切都按照这个想法进行。 (尚未测试)

我将在下面留下一些有关设置最常需要通过双因素身份验证进行保护的系统的链接:
设置双因素身份验证 Apache2

使用 Cisco ASA 设置(那里使用不同的令牌生成服务器,但 ASA 本身的设置是相同的)。

具有双因素身份验证的 VPN

调整 ssh 中的两因素身份验证 (那里也使用了 LinOTP) - 感谢作者。 在那里您还可以找到有关设置 LiOTP 策略的有趣内容。

此外,许多网站的cms都支持双因素身份验证(对于WordPress,LinOTP甚至有自己的特殊模块 github上),例如,如果您想在公司网站上为公司员工创建一个受保护的部分。
重要事实! 请勿勾选“Google autenteficator”框来使用 Google Authenticator! 那么二维码就无法读取了...(奇怪的事实)

为了撰写本文,使用了以下文章中的信息:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

感谢作者。

来源: habr.com

添加评论