今日は、企業ネットワーク、サイト、サービス、ssh を保護するために XNUMX 要素認証サーバーをセットアップする方法を共有したいと思います。 サーバーは、LinOTP + FreeRadius の組み合わせで実行します。
なぜそれが必要なのですか?
これは、サードパーティのプロバイダーから独立した、独自のネットワーク内での完全に無料の便利なソリューションです。
このサービスは、他のオープンソース製品とは異なり、非常に便利で非常に視覚的であり、膨大な数の機能とポリシー (たとえば、ログイン+パスワード+(PIN+OTPToken)) もサポートしています。 API を通じて、SMS 送信サービス (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 データベースの再構成を含む追加情報は、
# 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"
Web インターフェースの設定については後ほど説明します。
さて、最も重要なことです! FreeRadiusを上げてLinotpと連携させます。
FreeRadius と LinOTP を操作するためのモジュールをインストールする
# apt-get install freeradius linotp-freeradius-perl
クライアントとユーザーの RADIUS 構成をバックアップします。
# 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
ファイルを編集して、認証に perl を使用することを radius に伝えます。
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
次に、ファイル /etc/freeradius/modules/perl を編集します。
# nano /etc/freeradius/modules/perl
module パラメーターで 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 インターフェイスで作成する領域。)
REALM=再武装1
#LinOTP Web マズルで作成されるユーザー グループの名前。
RESCONF=フラットファイル
#optional: すべてが正常に動作しているように見える場合はコメントアウトします
デバッグ=真
#optional: 自己署名証明書がある場合はこれを使用し、そうでない場合はコメントアウトします (独自の証明書を作成し、それを検証したい場合は 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 {
聞く {
ipaddr = *
ポート= 1812
タイプ=認証
}
聞く {
ipaddr = *
ポート= 1813
タイプ = アカウント
}
許可する{
前処理
アップデート {
&control:認証タイプ := 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 を編集しましょう
クライアント サーバー {
ipaddr = 192.168.188.0/24
シークレット = あなたのパスワード
}
次に、nano /etc/linotp2/rlm_perl.ini を修正しましょう。
debian 8 にインストールするときと同じコードをそこに貼り付けます (上記)。
それはすべてアイデアに従っています。 (まだテストされていません)
XNUMX 要素認証で保護する必要が最も多いシステムのセットアップに関するリンクを以下にいくつか残しておきます。
での XNUMX 要素認証の設定
調整
また、多くのサイトの cms は XNUMX 要素認証をサポートしています (WordPress の場合、LinOTP には独自の特別なモジュールもあります)
重要な事実! Google Authenticator を使用する場合は、「Google autenteficator」ボックスをオンにしないでください。 するとQRコードが読み取れなくなりました…(奇妙な事実)
この記事を書くために、次の記事の情報が使用されました。
著者に感謝します。
出所: habr.com