見出し画像

SoftEtherVPN Serverをソースからリージョンロックを解除し、ワンタイムパスワード対応とした時のメモ

すでに、バイナリ形式のSoftEtherVPNサーバーが動作しているものとして、
バイナリ形式にない、RADIUSサーバーへの接続をできるようにするものです。

SoftEtherダウンロードセンターから所定のLinux64bit版のソースをダウンロードして、/usr/local/srcに置きます。今回は、

softether-src-v4.42-9798-rtm.tar.gz

というファイルになります。

cd /usr/local/src/
tar xzvf softether-src-v4.42-9798-rtm.tar.gz
vi v4.42-9798/src/Cedar/Server.c
------------------------------------------------------------------
10900 bool SiIsEnterpriseFunctionsRestrictedOnOpenSource(CEDAR *c)
10901 {
10902 /*
10903         char region[128];
10904         bool ret = false;
10905         // Validate arguments
10906         if (c == NULL)
10907         {
10908                 return false;
10909         }
10910
10911
10912         SiGetCurrentRegion(c, region, sizeof(region));
10913
10914         if (StrCmpi(region, "JP") == 0 || StrCmpi(region, "CN") == 0)
10915         {
10916                 ret = true;
10917         }
10918
10919         return ret;
10920 */
10921         return false;
10922 }
------------------------------------------------------------------
保存し、viを終了

10902行から10920行をコメントアウトして、return falese;とする。

cd v4.42-9798/
./configure
make

#バイナリ形式のファイルを一旦、退避
mv /usr/local/vpnserver/vpnserver /usr/local/vpnserver/vpnserver_binary
mv /usr/local/vpnserver/vpncmd /usr/local/vpnserver/vpncmd_binary
mv /usr/local/vpnserver/hamcore.se2 /usr/local/vpnserver/hamcore.se2_binary

#makeしたファイルを所定のフォルダへコピー
cp -p /usr/local/src/v4.42-9798/bin/vpncmd/vpncmd /usr/local/vpnserver/
cp -p /usr/local/src/v4.42-9798/bin/vpnserver/* /usr/local/vpnserver/

#権限の再設定
chmod 600 /usr/local/vpnserver/*
chmod 700 /usr/local/vpnserver/vpncmd
chmod 700 /usr/local/vpnserver/vpnserver

#プロセスを再起動
systemctl restart vpnserver
#確認
/usr/local/vpnserver/vpncmd /TOOLS /CMD check

一部、不合格の表示になりました。しかし、動作には、影響がないようにみえます。

■RADIUSサーバーの構築
SoftEtherVPNサーバーと同居するものとして、ワンタイムパスワードは、スマホアプリのgoogle-authenticatorを使う。としています。

dnf install freeradius freeradius-utils pam-devel -y

vi /etc/raddb/radiusd.conf
------------------------------------------------------------------
337行付近
#auth = no
auth = yes

362行付近
#auth_badpass = no
#auth_goodpass = no
auth_badpass = yes
auth_goodpass = yes

505行付近
#user = freerad
#group = freerad
user = root
group = root
------------------------------------------------------------------

vi /etc/raddb/proxy.conf 
------------------------------------------------------------------
修正なしで、確認のみ
ipaddr = 127.0.0.1
port = 1812
secret = testing123    #SoftEtherVPNサーバーで設定するシークレットの文字列
------------------------------------------------------------------

vi /etc/raddb/users
------------------------------------------------------------------
67行あたりに挿入
DEFAULT    Group != "radius-enabled", Auth-Type := Reject
       Reply-Message = "Your account has been disabled."
DEFAULT        Auth-Type := PAM
------------------------------------------------------------------

vi /etc/raddb/sites-available/default
------------------------------------------------------------------
520行付近 #をはずす
#	pam
	pam
------------------------------------------------------------------

vi /etc/pam.d/radiusd
------------------------------------------------------------------
# auth       include    password-auth
# account    required   pam_nologin.so
# account    include    password-auth
# password   include    password-auth
# session    include    password-auth
auth    requisite /usr/lib64/security/pam_google_authenticator.so
account required  pam_permit.so
session required  pam_permit.so
------------------------------------------------------------------

vi /etc/raddb/clients.conf
------------------------------------------------------------------
末尾に追記
client 192.168.0.0/16 {                 # VPC の CIDR
        secret          = testing123    # SoftEtherで設定していた共有シークレット
        shortname       = from-vpc      # ログに出てくるだけ?
}
------------------------------------------------------------------

#pamを有効にする
ln -s /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/

systemctl restart radiusd
systemctl enable radiusd

#radiusdの起動をデバッグする場合は、次を実行する。
/usr/sbin/radiusd -C -lstdout -xxx

■google-authenticatorに読み込ますQRコードの準備

dnf install epel-release -y
dnf install google-authenticator -y

#ユーザー名をuser001として、
groupadd radius-enabled
useradd -g radius-enabled user001

sudo -u user001 /usr/bin/google-authenticator
------------------------------------------------------------------
Do you want authentication tokens to be time-based (y/n) y

Warning: pasting the following URL into your browser exposes the OTP secret to Google:
  https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=ot~ 

上記、URLは、QRコードが表示されます。そのQRコードをスマホアプリの Google authenticator で読み込み、
ワンタイムパスワードを表示します。

Failed to use libqrencode to show QR code visually for scanning.
Consider typing the OTP secret into your app manually.
Your new secret key is: E3CLHOIFLOKEG2ZVHKMZ5G6BCE

Enter code from app (-1 to skip): 184--- #ここに表示されたワンタイムパスワードをいれます。
Code confirmed
Your emergency scratch codes are:
  28482981
  12908965
  39563570
  64432661
  98739621

Do you want me to update your "/home/user001/.google_authenticator" file? (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y
------------------------------------------------------------------

■SoftEtherVPNサーバーの設定

共有シークレットは、Defaultでは、testing123 となります。

SoftEtherVPNクライアントから、ユーザー名とスマホアプリのgoogle-authenticatorに表示されるパスワードを入力して、サーバーに接続します。

いいなと思ったら応援しよう!