この記事では、セキュリティ機能がL2TPで使用できないため、レイヤー2 VPNでエンドツーエンドの暗号化を提供するIPsecを使用したレイヤー2トンネリングプロトコル(L2TP)について説明します。 IPsecのオープンソース実装はStrongSwanとOpenSwanであり、どちらもすべてのLinuxディストリビューションでサポートされています。このチュートリアルでは、OpenSwanを使用してL2TPVPNのセキュリティチャネルを提供します。 Freeradiusは、ユーザーにさまざまなタイプの認証を提供する有名なオープンソースツールです。 Freeradiusは、セキュリティで保護されたチャネルを確立する前にL2TPVPNユーザーを認証するために使用されます。 L2TPベースのセキュアトンネルにはAndroidベースのクライアントが使用されます。
以下の重要なパッケージがUbuntu16.04LTSにインストールされます。
- Freeradiusサーバー/クライアント
- Poptop Server
- xl2tpd
- OpenswanforIPsec
- MySQLサーバー/クライアント
- Bison&Flex
- GMP開発ライブラリ
以下に示すように、必要なパッケージのほとんどはすべてUbuntu16.04LTSリポジトリで利用できます。
apt-get update
apt-get install -y mysql-server mysql-client freeradius-mysql pptpd xl2tpd
次のスクリーンショットは、MySQLデータベースサーバーのユーザー「root」のパスワードがインストールプロセス中にどのように設定されているかを示しています。
Ubuntu 16.04プラットフォームにソースからOpenSwanをインストールするには、次のパッケージが必要です。
apt-get install -y build-essential libgmp3-dev bison flex
FreeradiusクライアントとOpenSwanパッケージはリポジトリで利用できないため、両方のツールがソースからインストールされています。
Freeradiusクライアントのインストール
次のリンクから最新のFreeradiusクライアントをダウンロードします:
wget https://github.com/FreeRADIUS/freeradius-client/archive/master.zip
master.zipを解凍
mv freeradius-client-master freeradius-client
cd freeradius-client
まず、プレフィックススイッチを指定してconfigureスクリプトを実行し、makeコマンドを使用してソフトウェアをインストールします。
./ configure --prefix =/
make &&make install
OpenSwanのインストール
OpenSwan IPsecツールのソースコードは、次のリンクから入手できます。アーカイブをダウンロードして解凍します。
wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xzf openswan-latest.tar.gz
cd openswan-*
次のコマンドを実行して、OpenSwanをコンパイルしてインストールします。
プログラムを作成
make install
インストールされたパッケージの構成を開始する前に、Ubuntuプラットフォームで次の基本構成(iptablesおよびsysctl)が必要です。
ターミナルで両方のネットワーク(10.20.30.0/24と10.10.10.0/24)の次のiptablesルールを入力します。
iptables -t nat -I POSTROUTING -s 10.20.30.0 / 24 -j SNAT --to 192.168.15.4
iptables -t nat -I POSTROUTING -s 10.10.10.0/24 -j SNAT --to 192.168.15.4
上記のルールは、 /etc/iptables.rcに保存する必要があります 起動時にそれらを適用するためのファイル。
chmod + x /etc/iptables.rc
sed -i "/iptables.rc/d" /etc/rc.local
sed -i "1a / etc / iptables.rc" /etc/rc.local
/etc/sysctl.confに次の行を追加します Linuxマシンで転送を有効にするファイル。
net.ipv4.ip_forward =1
net.ipv4.conf.default.rp_filter =0
net.ipv4.conf.default.accept_source_route =0
net.ipv4.conf。 all.send_redirects =0
net.ipv4.conf.default.send_redirects =0
net.ipv4.icmp_ignore_bogus_error_responses =1
次のコマンドを実行して、変更を適用します。
sysctl -p
Freeradiusサーバーの構成
次のコマンドを実行して、freeradiusのパスワードを変更します。
sed -i "s / PASSWORD('radpass')/ PASSWORD('test')/ g" /etc/freeradius/sql/mysql/admin.sql
次のMySQLコマンドは、UbuntuでFreeradiusサーバーを構成します。
mysql --protocol =tcp -h localhost -u root -ptest
create database radius #create DB radius
mysql --protocol =tcp -h localhost -u root -ptest radius
mysql --protocol =tcp -h localhost -u root -ptest radius
/etc/freeradius/sql/mysql/cui.sqlの無効なデフォルト値の問題を修正するための適切な日付を追加する 。
/etc/freeradius/sql/mysql/cui.sqlで修正した後 上記のエラーを修正するには、ファイルを作成して上記のコマンドを再実行します。
mysql --protocol =tcp -h localhost -u root -ptest radius
mysql --protocol =tcp -h localhost -u root -ptest radius
mysql --protocol =tcp -h localhost -u root -ptest radius
mysql --protocol =tcp -h localhost -u root -ptest radius
次のsedコマンドを実行して、ユーザー「radius」のデフォルトのパスワードを変更します。このチュートリアルでは、ユーザー「radius」のパスワードは「test」です。サーバーで安全なパスワードを選択してください。sed -i "s / password =\" radpass \ "/ password =\" test \ "/ g" /etc/freeradius/sql.conf
FreeradiusサーバーのmodulesディレクトリにSQL設定のソフトリンクを作成します。
ln -sf /etc/freeradius/sql.conf / etc / freeradius / modules / sql
以下のファイルはUbuntu16.04に存在しないため、説明されている内容で必要なすべてのファイルを作成します。
- / etc / freeradius / modules / hourlylytraffic
- / etc / freeradius / modules / dailytraffic
- / etc / freeradius / modules / monthlytraffic
/ etc / freeradius / modules / hourlytraffic
sqlcounter hourlytrafficcounter {>
counter-name =Hourly-Traffic
check-name =Hourly-Traffic
sqlmod-inst =sql
key =User-Name
reset =1h
query ="SELECT SUM(acctinputoctets + acctoutputoctets)DIV 1048576 FROM radacct WHERE UserName ='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)>'%b'"
}
/ etc / freeradius / modules / dailytraffic
sqlcounter dailytrafficcounter {
counter-name =Daily-Traffic
check-name =Daily-Traffic
sqlmod-inst =sql
key =User-Name
reset =daily
query ="SELECT SUM(acctinputoctets + acctoutputoctets)DIV 1048576 FROM radacct WHERE UserName ='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)>'%b'"
}
/ etc / freeradius / modules / monthlytraffic
sqlcounter Monthlytrafficcounter {
counter-name =Monthly-Traffic
check-name =Monthly-Traffic
sqlmod-inst =sql
key =User-Name
リセット=毎月
クエリ="SELECTSUM(acctinputoctets + acctoutputoctets)DIV 1048576 FROM radacct WHERE UserName ='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)>'%b'"
}
次のファイルは、freeradiusサーバーの構成にとって重要です。実行中の構成を以下に示します。
/ etc / freeradius / sites-enabled / default
承認{
前処理
chap
mschap
ダイジェスト
サフィックス
eap{
ok =return
}
ファイル
sql
有効期限
ログイン時間
pap
hourlytrafficcounter
dailytrafficcounter
Monthlytrafficcounter
}
認証{
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
ダイジェスト
unix
eap
}
preacct {
preprocess
acct_unique
サフィックス
ファイル
}
アカウンティング{
詳細
unix
radutmp
sql
exec
attr_filter.accounting_response
}
セッション{
radutmp
sql
}
post-auth {
sql
exec
Post-Auth-Type拒否{
attr_filter.access_reject
}
}
pre-proxy {
}
プロキシ後{
eap
}
次のコマンドを使用して、freeradiusサーバーを再起動し、構成を確認します。
/etc/init.d/freeradius restart
Freeradiusクライアントの構成
次のコマンドは、freeradiusクライアントの「servers」ファイルにホスト名とシークレットを設定します。
echo -e "localhost \ ttesting123">> / etc / radiusclient / servers
Windowsベースのクライアント用のdictionary.microsoft構成ファイルを作成します。
vi /etc/radiusclient/dictionary.microsoft
#
#MicrosoftのVSA、RFC2548から
#
#\ $ Id:poptop_ads_howto_8.htm、v 1.8 2008/10/02 08:11:48 wskwok Exp \ $
#
VENDOR Microsoft 311 Microsoft
BEGIN VENDOR Microsoft
ATTRIBUTE MS-CHAP-Response MS-CHAP-ResponseMS-1文字列Microsoft
ATTRIBUTE MS-CHAP-CPW-13文字列Microsoft
ATTRIBUTEMS-CHAP-CPW-24文字列Microsoft
ATTRIBUTE MS
ATTRIBUTE MS-CHAP-LM-Enc-PW -NT-Enc-PW 6 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
#これは、RFCでは単数形と複数形の両方と呼ばれています。
#複数のようですより理にかなっています。
ATTRIBUTEMS-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 string Microsoft- =1
ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
ATTRIBUTE MS-Link-Drop-Time> ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
ATTRIBUTE MS
ATTRIBUTE MS-RAS-Version -Password 19 string Microsoft
ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft
ATTRIBUTE 22 MS /> AT TRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft
ATTRIBUTE TS /> ATTRIBUTE MS-CHAP2-Response MS-CHAP2-Response 25 string Microsoft
ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft
ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr
ATTRIBUTE MS- TER
ATTRIBUTE MS-Secondary-DNS Primary-NBNS-Server 30 ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft
#
# br />#
#MS-BAP-使用法の値
VALUEMS-BAP-使用法許可されていません0
VALUE -MS-BAP-Usage B使用法必須2
#MS-ARAP-Password-Change-Reason Values
VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
VALUE MS-ARAP-PW-Change-Reason Expired-Password-W-P 2
VALUE理由Admin-Requires-Password-Change3
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
#MS-Acct-Auth-Type Values
VALUE -Auth-Type PAP 1
VALUE MS-Acct-Auth-Type CHAP 2
VALUE- Auth -1 MS-Acct-Auth-Type MS-Acct-Auth-Type MS-CHAP-2 4
VALUE MS-Acct-Auth-Type 5
#MS-Acct-EAP-Type値
VALUE 5 / MS-Acct-EAP> VALUE MS-Acct-EAP-Type 5
VALUE MS-Acct-EAP-Typeマイクロソフト
vi /etc/radiusclient/dictionary.merit
#
#実験的な拡張機能、構成のみ(チェック項目の場合)
#MERIT拡張機能に基づく名前/番号(可能な場合)。
#
ATTRIBUTE NAS-識別子32列
ATTRIBUTEプロキシステート33列
ATTRIBUTEログイン-LAT-サービス34列
ATTRIBUTEログイン-LATノード35列
ATTRIBUTEログイン-LAT-群36列
ATTRIBUTE Framed-AppleTalk-Link 37 integer
ATTRIBUTE Framed-AppleTalk-Network 38 integer
ATTRIBUTE Framed-AppleTalk-Zone 39 string
ATTRIBUTE> ATTRIBUTE Acct-Output-Packets 48 integer
#8はMERIT拡張機能です。
VALUEサービスタイプAuthenticate-Only8
次の行を/etc / radiusclient / dictionaryに追加します ファイル。
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft
ATTRIBUTE Hourly-Traffic 1000 integer
ATTRIBUTE Daily-Traffic 1001 integer
ATTRIBUTE月次-トラフィック1002整数
以下は、radiusクライアントの実行構成です。
/etc/radiusclient/radiusclient.conf
#一般設定
#どの認証が最初に来るかをそれぞれ指定します
#どの認証が使用されますか。可能な値は次のとおりです。"radius"および"local"。
# "radius、local"を指定すると、RADIUSサーバーは最初に
#、次にローカルサーバーに問い合わせられます。キーワードが1つだけ指定されている場合は、
#このサーバーに問い合わせます。
auth_order radius、local
#ユーザーの最大ログイン試行回数
login_tries 4
#すべてのタイムアウトログイン試行
#この時間を超えると、ユーザーは追い出されます
login_timeout 60
#存在する場合はログインを無効にするnologinファイルの名前。
#ttynameで拡張すると、
#a端末固有のロックが発生する可能性があります(例:/etc/nologin.ttyS2は/ dev / ttyS2でのログインを無効にします
#)
nologin / etc / nologin
#問題ファイルの名前。ユーザー名が渡されていない場合にのみ表示されます
#radloginコマンドラインで
issue /etc/radiusclient/issue
seqfile /var/run/freeradius/freeradius.pid
##RADIUSはホスト名からコロンで区切られてリッスンします。
#ポートが指定されていない場合/ etc/servicesはradius
authserver localhost
#RADIUSサーバーを参照してリクエストのアカウンティングに使用します。
#authserverについて述べたこともすべて当てはまります。
acctserver localhost
#RADIUSクライアントとサーバー間の通信に使用される共有シークレットを保持するファイル
# br /> servers / etc / radiusclient / servers
#通常の
#RADIUSディストリビューションと同じように許可される属性と値の辞書
dictionary / etc / radiusclient / dictionary
#RADIUS認証済みログインを呼び出すプログラム
login_radius /sbin/login.radius
#ttynameとNAS-Port属性間のマッピングを指定するファイル
mapfile / etc / radiusclient / port- id-map
#ユーザーによって明示的に指定されていない場合にすべてのユーザー名に追加するデフォルトの認証レルム
#realm
default_realm
#応答を待つ時間RADIUSサーバーから
radius_timeout10
#次のサーバーを試す前に、これを何度も再送信します
radius_retries 3
#RADIUSパケットの送信元のローカルアドレス
bindaddr *
#ローカルログイン用に実行するプログラム
#事前認証されたログイン用の-fフラグをサポートする必要があります
login_local / bin / login
/ etc / radiusclient / dictionaryファイルの次の構成(IPv6に関連)は次のようになります。 radiusクライアントを実行するためにコメントアウトしました。
ATTRIBUTE NAS-Filter-Rule 92 string
ATTRIBUTE Originating-Line-Info 94 string
ATTRIBUTE-string> ATTRIBUTE Framed-IPv6-Prefix 97 ipv6prefix
ATTRIBUTE Login-IPv6-Host 98 string
ATTRIBUTE string TRI BUTE 100エラー-原因101整数
属性EAP-Key-Name102文字列
#
#IPv6-アドレス
#
ATTRIBUTE
#
ATTRIBUTE> ATTRIBUTE DNS-Server-IPv6-Address 169 ipv6addr
ATTRIBUTE Route-IPv6-Information 170 ipv6prefix
Poptopサーバーの構成
/etc/pptpd.confに次の構成を追加します ファイル。
localip 10.20.30.1
remoteip 10.20.30.2-254
/ etc / ppp / pptpd-optionsで次のsedコマンドを実行します ファイル。
sed -i "/ ^ ms-dns / d" / etc / ppp / pptpd-options
sed -i -e "/radius.so/d" -e "/radattr.so/d" / etc / ppp / pptpd-options
/ etc / ppp / pptpd-optionsに次の行を追加します ファイル。
ms-dns 8.8.8.8
ms-dns 8.8.4.4
plugin /usr/lib/pppd/2.4.7/radius.so
plugin / usr / lib / pppd / 2.4.7 / radattr.so
pptpdサービスを再起動して、上記の変更を適用します。
service pptpd restart
xl2tpの構成
/etc/xl2tpd/xl2tpd.confに次の構成行を含めます 次の図に示すようにファイルします。
[global]
ipsec saref =yes
[lns default]
ip range =10.10.10.2-10.10.10.255
local ip =10.10.10.1
refuse chap =yes
refuse pap =yes
require authentication =yes
ppp debug =yes
pppoptfile =/etc/ppp/options.xl2tpd
長さビット=はい
OpenSwanの構成
/etc/ipsec.secretsに次のipsecシークレットファイルの設定を追加します 。
192.168.15.4%any 0.0.0.0:PSK「テスト」
L2TPトンネルのIPsec構成は、 /etc/ipsec.confに含まれています。 ファイル。
バージョン2.0
config setup
nat_traversal =yes
virtual_private =%v4:192.168.0.0 / 16、%v4:10.0.0.0 / 8、%v4:172.16 .0.0 / 12、%v4:25.0.0.0 / 8、%v4:!10.254.253.0 / 24
protostack =netkey
#protostack =mast#SAref+MASTのみに使用
インターフェース="%defaultroute"
oe =off
conn psk-l2tp
pfs =no
auto =add
rekey =no
# overlapip =yes#SAref +MASTの場合
#sareftrack =yes#SAref+MASTの場合
type=Transportation
left =192.168.15.4
leftprotoport =17/1701
right =%any
rightprotoport =17 /%any
rightsubnet =vhost:%priv、%no
authby =secret
PPPサーバーの構成
/etc/ppp/options.xl2tpdに次の構成を追加します ファイル。
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1200
mru 1200
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
プラグイン/usr/lib/pppd/2.4.7/radius.so
プラグイン/usr/lib/pppd/2.4.7/radattr.so
必要なすべてのパッケージが正常に構成されたら、すべてのサービスを再起動してL2TPVPNをテストします。
IPsecおよびxl2tpサービスを再起動します。
次の図は、freeradiusサーバーがデーモンモードで実行されていることを示しています。これは、サーバーが機能していることを識別するのに役立ちます。
MySQLデータベースにユーザーアカウントを挿入して、構成をテストします。
INSERT INTO radius.radcheck(username、attribute、op、value)VALUES('username'、'User-Password'、':='、'userpassword');
次のコマンドは、Freeradiusサーバーがローカルホストで動作していることを確認します。
radtest username userpassword localhost 0 tests123
L2TPAndroidクライアントの構成
設定に移動==>その他==>VPN==>VPNネットワークを追加 Androidスマートフォンで、新しい L2TP PSKを作成します 以下に示すVPN。
新しいL2TPVPNを作成したら、それをクリックしてユーザー名/パスワード(freeradiusサーバーで構成)を入力します。
次の図は、L2TPVPNが接続していることを示しています。
次の画面は、L2TPVPNがAndroidクライアントを使用して正常に接続されていることを示しています。
L2TPVPNステータス
Freeradiusは、L2TPandroidクライアントの認証が成功したことを示しています。
次のコマンドは、IPsecトンネルのステータスを示しています
ip xfrm state
OpenSwanログ( /var/log/auth.log )およびxl2tpログ( / var / log / syslog )L2TPVPNのステータスも表示されます。
tail -f /var/log/auth.log
tail -f / var / log / syslog
このチュートリアルでは、レイヤー2トンネリングプロトコルをIPSecおよびFreeradiusとともに使用して、セキュリティおよび認証メカニズムを提供します。 Androidベースのクライアントは、IPsecを介したL2TPの動作を示すために使用されます。