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 資料庫,可以在官方文件中找到 鏈接。在那裡您還可以找到命令:dpkg-reconfigure linotp 來更改參數(如果您已經安裝了 mysql)。

# 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

感謝作者們。

來源: www.habr.com

添加評論