GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu16.04でFreeradius認証を使用したOpenSwanを使用したL2TPoverIPsec

この記事では、セキュリティ機能が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 T​​S /> 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の動作を示すために使用されます。


Ubuntu
  1. Ubuntu20.04でvnStatを使用してネットワークトラフィックを監視する

  2. ターミナルUbuntu14.04でのプロキシ認証?

  3. Ubuntu16.04で2要素認証を使用してSSHを保護する

  1. Ubuntu20.04でGooglePageSpeedを使用してNginxをインストールする方法

  2. Ubuntu20.04にMinikubeを使用してKubernetesをインストールする方法

  3. 2画面セットアップでUbuntuを使用していますか?

  1. Ubuntu 16で3つのノードを使用してMongoDBクラスターをセットアップするにはどうすればよいですか?

  2. Ubuntu18.04LTSにMinikubeを使用してKubernetesをインストールする方法

  3. Ubuntu18.04LTSにNginxを使用してGitBucketをインストールする方法