![画像](https://habrastorage.org/storage1/513d5154/9ad1b7bf/6e255d9f/596af9ef.png)
ここでは、MySQLのユーザーを使用してCentOS6にVPNサーバーをインストールおよび構成し、ms-chap-v2およびmppeを使用して暗号化された接続のRADIUS経由で承認するプロセスについて説明します。
前文
これらの記事はどこから来たのですか? すべてがシンプルです。 たとえば、システム管理者の地位などの求職者を探している場合、予備面接の候補者を選択した後、テストタスクがコンパイルされ、独自に実装されてから、応募者が解決できるように提供します。 タスクを完了するために、申請者には仮想マシン、インターネットアクセス、および一定の時間が提供されます。 時間は単純に計算されます-実装* 2。 同時に、必要なすべてのソリューション(ハウツー)はインターネットで見つけることができると考えることができますが、これを考慮に入れているため、既成のソリューションは使用しませんが、最初に新しいディストリビューションで作成して解決します。 ちなみに、実装中に特定の問題(文書化されていない小さな開発者のいたずら)に出くわすことがあります。候補者が正しいコースをたどりながら、この問題に関するギャグに陥った場合は、解決策を提案します。
与えられた
白いIPとCentOS6 x86_64最小インストール済みのKVM仮想マシン。
挑戦する
1.多くのpptpd、freeradius2、radiusclient-ng、mysqlにインストールして設定します。
2. 2つのクライアントを作成して、構成済みVPNサーバーに接続し、NATを介してnoにアクセスします。 動的アドレス取得を使用するクライアントと、固定IPを使用するクライアント。
3.動的クライアントに配布するアドレスのプールをpptpdからradiusに転送します。
解決策
最初のステップは、必要なすべてのパッケージをインストールすることです。 radiusclient-ngとpptpdは標準リポジトリにないため、radiusclient-ngの場合はEPELリポジトリに接続し、pptpdパッケージを直接ダウンロードします。
# rpm -Uhv fedora-epel.mirror.lstn.net/6/x86_64/epel-release-6-5.noarch.rpm
# yum install freeradius freeradius-mysql radiusclient-ng radiusclient-ng-utils freeradius-utils mysql mysql-devel mysql-server
#rpm -Uhv poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm
次に、mysqlを構成し、パスワードを設定します。
mysql_secure_installation
実際に、pptpdの構成に移りましょう。 構成ファイルを次の形式にします。
# cat /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.80.1
remoteip 192.168.80.5-35
# cat /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
plugin radius.so
plugin radattr.so
pptpdが終了したら、radiusclient-ngの設定に進みます。
最初に遭遇した問題は、pptpdがインストールされているパスのために、radiusclient-ngで動作することに抵抗があるため、次のようにソフトリンクを作成します。
# ln -s /etc/radiusclient-ng /etc/radiusclient
ファイルの/etc/radiusclient-ng/radiusclient.confの行をコメントアウトします
#bindaddr *
そうでなければ、未知のパラメーターを誓います。
/ etc / radiusclient-ng / serversを編集し、クライアントがアクセスするローカルradiusサーバーを追加します
localhost YouRsUpErpAAs
対処しなければならなかった2番目の問題は、radiusclient-ngパッケージにmircosoftの属性が不足していたことです。グーグルの後、必要なartibootが見つかりました。 / usr / share / radiusclient-ng /から/ etc / radiusclient-ng /に属性を持つ既存のファイルをコピーします
# cp /usr/share/radiusclient-ng/diction* /etc/radiusclient-ng/
/ etc / radiusclient-ngで/次の内容のdictionary.microsoftファイルを作成します。
VENDOR Microsoft 311 Microsoft
ATTRIBUTE MS-CHAP-Response 1 string Microsoft
ATTRIBUTE MS-CHAP-Error 2 string Microsoft
ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft
ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft
ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft
ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft
ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft
ATTRIBUTE MS-CHAP-Domain 10 string Microsoft
ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft
ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft
ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft
ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
ATTRIBUTE MS-RAS-Version 18 string Microsoft
ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft
ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft
ATTRIBUTE MS-Filter 22 string Microsoft
ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft
ATTRIBUTE MS-CHAP2-Response 25 string Microsoft
ATTRIBUTE MS-CHAP2-Success 26 string Microsoft
ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft
ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft
ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft
ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
VALUE MS-BAP-Usage Not-Allowed 0
VALUE MS-BAP-Usage Allowed 1
VALUE MS-BAP-Usage Required 2
VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
VALUE MS-Acct-Auth-Type PAP 1
VALUE MS-Acct-Auth-Type CHAP 2
VALUE MS-Acct-Auth-Type MS-CHAP-1 3
VALUE MS-Acct-Auth-Type MS-CHAP-2 4
VALUE MS-Acct-Auth-Type EAP 5
VALUE MS-Acct-EAP-Type MD5 4
VALUE MS-Acct-EAP-Type OTP 5
VALUE MS-Acct-EAP-Type Generic-Token-Card 6
VALUE MS-Acct-EAP-Type TLS 13
ファイル/etc/radiusclient-ng/radiusclient.confを編集して
dictionary /etc/radiusclient-ng/dictionary
ファイル/ etc / radiusclient-ng /辞書を編集して、最後に追加します
INCLUDE /etc/radiusclient-ng/dictionary.microsoft
INCLUDE /etc/radiusclient-ng/dictionary.merit
クライアントも終了しました。mysqlのセットアップに進みます。
freeradius-mysqlパッケージには、mysqlにインポートするために必要なファイルが含まれており、/ etc / raddb / sql / mysql /にあります
admin.sqlファイルを編集して、標準とは異なるパスワードを設定しましょう
vim admin.sql
:%s/radpass/radpass235/g
:wq
mysqlへの接続、DBの作成、テーブルのインポート、ユーザーの作成
mysql -p
mysql> create database radius;
mysql> \. admin.sql
mysql> use radius;
mysql> \. schema.sql
次に、ユーザーとその設定を作成します
mysql> INSERT INTO radusergroup (username,groupname) values ('user1','static-ip-vpn');
mysql> INSERT INTO radusergroup (username,groupname) values ('user2','dinamic-ip-vpn');
以下を取得する必要があります
mysql> select * from radusergroup;
+----------+----------------+----------+
| username | groupname | priority |
+----------+----------------+----------+
| user1 | static-ip-vpn | 1 |
| user2 | dinamic-ip-vpn | 1 |
+----------+----------------+----------+
mysql> INSERT INTO radcheck (username,attribute,op,value) values ('user1','User-Password','==','pass1');
mysql> INSERT INTO radcheck (username,attribute,op,value) values ('user2','User-Password','==','pass2');
mysql> select * from radcheck;
+----+----------+---------------+----+-------+
| id | username | attribute | op | value |
+----+----------+---------------+----+-------+
| 1 | user1 | User-Password | == | pass1 |
| 2 | user2 | User-Password | == | pass2 |
+----+----------+---------------+----+-------+
radgroupreplyテーブルに記入します
mysql> INSERT INTO radgroupreply (groupname, attribute, op, value) values ('dinamic-ip-vpn','Service-Type',':=','Framed-User');
以下を取得するために
mysql> select * from radgroupreply;
+----+----------------+--------------------+----+---------------------+
| id | groupname | attribute | op | value |
+----+----------------+--------------------+----+---------------------+
| 1 | dinamic-ip-vpn | Service-Type | := | Framed-User |
| 2 | dinamic-ip-vpn | Framed-Protocol | := | PPP |
| 3 | dinamic-ip-vpn | Framed-Compression | := | Van-Jacobsen-TCP-IP |
| 4 | static-ip-vpn | Framed-Compression | := | Van-Jacobsen-TCP-IP |
| 5 | static-ip-vpn | Framed-Protocol | := | PPP |
| 6 | static-ip-vpn | Service-Type | := | Framed-User |
+----+----------------+--------------------+----+---------------------+
radreplyテーブルに入力して、最初のクライアントに永続的なIPを設定します
mysql> INSERT INTO radreply (username, attribute, op, value) values ('user1','Framed-IP-Netmask',':=','255.255.255.255');
mysql> INSERT INTO radreply (username, attribute, op, value) values ('user1','Framed-IP-Address',':=','192.168.80.90');
mysql> select * from radreply;
+----+----------+-------------------+----+-----------------+
| id | username | attribute | op | value |
+----+----------+-------------------+----+-----------------+
| 1 | user1 | Framed-IP-Netmask | := | 255.255.255.255 |
| 2 | user1 | Framed-IP-Address | := | 192.168.80.90 |
+----+----------+-------------------+----+-----------------+
その結果、パスワードpass1と静的ip-192.168.80.90を持つuser1、パスワードpass2を持つuser2、およびpptpd設定で指定されたプールから動的IPを取得する2つのクライアントのこのデータベースに入りました。 ここでは、ユーザーがさらに増加することを考慮して、ユーザーを意図的にグループに分けています.radreplyテーブルで両方の顧客のすべての属性を簡単に作成できましたが、多数の顧客の場合、同じ属性がグループの顧客に示されているグループを使用する方が便利です。 また、グループでは、さまざまなアドレスプールなどを指定できますが、問題を時間通りに解決する必要があるため、ここでは説明しません。
半径設定に移動します。 ここで、変更が加えられたファイルの例を示します。
/etc/raddb/clients.conf
client 127.0.0.1 {
secret = YouRsUpErpAAs
shortname = localhost
nastype = other
}
3番目の問題は 、デバッグ時に、radiusがまだmysqlに接続されていなかったため、/ etc / raddb / usersファイル内のクライアントがファイルの先頭に登録されていないと、何も機能しないという事実に直面しました。
/ etc / raddb /ユーザー
DEFAULT Simultaneous-Use := 1
Fall-Through = 1
これは、同じログインで複数の接続が同時に存在しないように登録する必要があります
/etc/raddb/radiusd.conf
モジュールセクションで、コメントを削除します
$INCLUDE sql.conf
/etc/raddb/sql.conf
mysqlに接続するためのデータを登録する
password = "radpass235"
/ etc / raddb /サイト対応/デフォルト
承認、セッション、認証後、およびアカウンティングのセクションで、SQLを有効にします
承認セクションでmschapを有効にします
/ etc / raddb / modules / mschap
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
}
おそらく、タスクはほとんど解決されたが、いくつかのタッチが残った。
iptablesをセットアップし、フォワードを有効にしてクライアントを世界にリリースします
iptables -I INPUT -p gre -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -s 192.168.80.0/24 -o eth0 -j ACCEPT
iptables -I FORWARD -d 192.168.80.0/24 -i eth0 -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.80.0/24 -o eth0 -j MASQUERADE
/etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
すでにこの段階で、インストールされたサービスを実行すると、vpnを介してマシンに接続できます。動的クライアントに発行されたアドレスのプールをpptpdからradiusに転送するだけです。 これには、プールをmysqlに置くことまで、いくつかのオプションがあります。 単純なオプションを使用します。
/ etc / raddb / modules / ippool
ippool main_poolセクションで、アドレスプールを編集します
range-start = 192.168.80.35
range-stop = 192.168.80.65
/ etc / raddb / sites-enabled / defaultファイルで適切なセクションに追加します
accounting {
main_pool
}
post-auth {
main_pool
}
次に、プールが保存されるファイルを作成します
touch /etc/raddb/db.ipindex /etc/raddb/db.ippool
chmod 664 /etc/raddb/db.ipindex /etc/raddb/db.ippool
chown root:radiusd /etc/raddb/db.ipindex /etc/raddb/db.ippool
/ etc / raddb / usersに追加します
DEFAULT Pool-Name := main_pool
Fall-Through = Yes
radiusを再起動し、vpn経由でマシンに接続してみてください。すべてが機能するはずです。 radius.radacctテーブルで詳細な接続統計を確認できます。
プールから選択したアドレスは、次のコマンドで表示できます。
rlm_ippool_tool -av /etc/raddbdb/db.ippool /etc/raddbdb/db.ipindex
あとがき
私は、私たちが直面しなければならない問題を慎重に強調しました。 このシステムの展開には1時間強かかりました。 候補者には2.5時間が割り当てられました。 4人の応募者の誰も、このタスクを完全に完了していません。 そのうちの1人だけがほとんど旅の終わりに達しました。 彼と、おそらく私たちは協力し続けるでしょう。
もちろん、すべての雇用主が求職者をテストするこの方法を使用しているわけではないことを理解しています。 ただし、これは候補者の知識と能力を実際にテストする最良の方法の1つだと思います。 結局、候補者が同様の問題を解決した(またはほぼ解決した)場合、しばらくしてからチームに参加し、ネットワーク構造に没頭した後、候補者に頼ることはかなり可能です。
「労働者の選び方」という記事に名前を付けて、一般的な用語で予備選択と実際のタスクのプロセスを説明することができますが、記事は技術に近いほど価値がなく、ハウツーという形ではありませんが、私の意見では、あまり有用ではありません。 abillsとリンクするまで、類似の記事がいくつかあることは知っていますが、それらは1年半以上前のものであり、他のディストリビューションの下にあります。
UPD:求職者はおそらくHabrを読み、最後に、彼らがパスしなかったタスクの解決策を見るでしょう。
UPD2:実装の時間不足について、彼らは2.5時間では不十分だと書いています。 重要な指標ではあるが 、 時間がメインではないことを強調する。 主なものは「正しい方法」です。
UPD3: pptpプロトコルスラッジに関するコメントに触発されました。 状況はl2tpと同じです。
pptpdの代わりに、xl2tpdを入れます
#yum install xl2tpd
構成ファイルは次の形式に縮小されます。
# cat /etc/xl2tpd/xl2tpd.conf
[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets
access control = no
rand source = dev
[lns default]
exclusive = no
ip range = 192.168.80.5-192.168.81.35
local ip = 192.168.80.1
require chap = yes
refuse pap = yes
require authentication = yes
name = VPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
flow bit = yes
# cat /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
lcp-echo-failure 30
lcp-echo-interval 5
noccp
nodeflate
auth
crtscts
idle 1800
mtu 1410
mru 1410
defaultroute
debug
proxyarp
connect-delay 5000
lock
plugin radius.so
plugin radattr.so