CentOS7.4 VPNをSAMBA4で認証(2/3)[FreeRADIUS構築編]

シェアする

VPN(L2TP+IPSec)サーバーからの認証リクエストをRADIUSサーバーで認証できるようにします。

なお、ここで構築するRADIUSサーバーで、認証できるようにしますが、のちの工程では、VPNサーバーからSAMBAサーバーへの中継となるサーバーになります。

この記事に関して

以前に構築したVPNサーバーでは、ユーザー認証をVPNサーバー内で行なう様にしていましたが、RADIUSサーバーを追加する事でユーザー認証を一元的に管理することが可能になります。
一元的に管理することで、ユーザー管理の煩雑さも軽減する効果があるかと思います。

[ VPNクライアント ] - [ VPNサーバー ] - [ RADIUSサーバー ]

までの環境構築となります。

FreeRADIUSパッケージのインストール

RADIUS本体のパッケージとRADIUSの動作確認ツールが必要なので、RADIUSユーティリティーもインストールします。

[RAD]# yum info freeradius
    :(省略)
Available Packages
Name        : freeradius
Arch        : x86_64
Version     : 3.0.13
Release     : 8.el7_4
Size        : 1.1 M
Repo        : updates/7/x86_64
Summary     : High-performance and highly configurable free RADIUS server
    :(省略)
[RAD]# yum install freeradius -y
    :(省略)
Installed:
  freeradius.x86_64 0:3.0.13-8.el7_4
 
Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7_4.1
  apr-util.x86_64 0:1.5.2-6.el7
  boost-system.x86_64 0:1.53.0-27.el7
  boost-thread.x86_64 0:1.53.0-27.el7
  libtalloc.x86_64 0:2.1.9-1.el7
  log4cxx.x86_64 0:0.10.0-16.el7
  tncfhh.x86_64 0:0.8.3-16.el7
  tncfhh-libs.x86_64 0:0.8.3-16.el7
  tncfhh-utils.x86_64 0:0.8.3-16.el7
  xerces-c.x86_64 0:3.1.1-8.el7_2
 
Complete!
[RAD]# yum info freeradius-utils
    :(省略)
Available Packages
Name        : freeradius-utils
Arch        : x86_64
Version     : 3.0.13
Release     : 8.el7_4
Size        : 221 k
Repo        : updates/7/x86_64
Summary     : FreeRADIUS utilities
     :(省略)
[RAD]# yum install freeradius-utils -y
    :(省略)
Installed:
  freeradius-utils.x86_64 0:3.0.13-8.el7_4
 
Dependency Installed:
  perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
  perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
  perl-DBI.x86_64 0:1.627-4.el7
  perl-Data-Dumper.x86_64 0:2.145-3.el7
  perl-IO-Compress.noarch 0:2.061-2.el7
  perl-Net-Daemon.noarch 0:0.48-5.el7
  perl-PlRPC.noarch 0:0.2020-14.el7
 
Complete!

FreeRADIUSのローカルホストからの設定

最低限の設定を行ない、FreeRADIUSが動作に問題がないかを確認します。

[RAD]# cd /etc/raddb
[RAD]# ls -l
total 128
drwxrwx---. 2 root radiusd  4096 Jan  9 14:17 certs
-rw-r-----. 1 root radiusd  7476 Aug 24 00:18 clients.conf
-rw-r--r--. 1 root radiusd  1440 Aug 24 00:18 dictionary
lrwxrwxrwx. 1 root radiusd    30 Jan  9 14:17 hints -> ./mods-config/preprocess/hints
lrwxrwxrwx. 1 root radiusd    35 Jan  9 14:17 huntgroups -> ./mods-config/preprocess/huntgroups
drwxr-x---. 2 root radiusd  4096 Jan  9 14:17 mods-available
drwxr-x---. 6 root radiusd    85 Jan  9 14:17 mods-config
drwxr-x---. 2 root radiusd  4096 Jan  9 14:17 mods-enabled
-rw-r-----. 1 root radiusd    52 Aug 24 00:18 panic.gdb
drwxr-x---. 2 root radiusd   145 Jan  9 14:17 policy.d
-rw-r-----. 1 root radiusd 28361 Aug 24 00:18 proxy.conf
-rw-r-----. 1 root radiusd 28621 Aug 24 00:18 radiusd.conf
-rw-r-----. 1 root radiusd 20808 Aug 24 00:18 README.rst
drwxr-x---. 2 root radiusd  4096 Jan  9 14:17 sites-available
drwxr-x---. 2 root radiusd    41 Jan  9 14:17 sites-enabled
-rw-r-----. 1 root radiusd  3470 Aug 24 00:18 templates.conf
-rw-r-----. 1 root radiusd  8536 Aug 24 00:18 trigger.conf
lrwxrwxrwx. 1 root radiusd    29 Jan  9 14:17 users -> ./mods-config/files/authorize
[RAD]# cp -p radiusd.conf radiusd.conf.original
[RAD]# vim radiusd.conf
    :(省略)
log {
    :(省略)
        #  Log authentication requests to the log file.
        #
        #  allowed values: {no, yes}
        #
        auth = yes <= 認証ログの出力可否 ( no => yes )
 
 
        #  Log passwords with the authentication requests.
        #  auth_badpass  - logs password if it's rejected
        #  auth_goodpass - logs password if it's correct
        #
        #  allowed values: {no, yes}
        #
        auth_badpass = yes <= 認証失敗のログ出力 ( no => yes )
        auth_goodpass = yes <= 認証成功のログ出力 ( no => yes )
    :(省略)
[RAD]# cd /etc/raddb/mods-config/files
[RAD]# ls -l
total 16
-rw-r-----. 1 root radiusd  717 Aug 24 00:19 accounting
-rw-r-----. 1 root radiusd 7044 Aug 24 00:19 authorize
-rw-r-----. 1 root radiusd 1030 Aug 24 00:19 pre-proxy
[RAD]# cp -p authorize authorize.original
[RAD]# vim authorize
    :(省略)
#DEFAULT Framed-Protocol == PPP                    <= コメントアウト
#        Framed-Protocol = PPP,                    <= コメントアウト
#        Framed-Compression = Van-Jacobson-TCP-IP  <= コメントアウト
    :(省略)
testuser Auth-Type := CHAP, Cleartext-Password:="testpass" <= 最下行に追記
[RAD]# vim clients.conf
    :(省略)
client localhost {
    :(省略)
  secret = testing123 <= シークレットパスワード
    :(省略)
}
    :(省略)
client vpnserver {
    ipaddr = 192.168.1.10  <= VPNサーバーのIPアドレス
    secret = testing123
    #require_message_authenticator = yes
    shortname = xl2tpd
    nas_type = other
}

FreeRADIUSのサービス起動

FreeRADIUSの動作確認のためサービスを起動します。

[RAD]# systemctl status radiusd
● radiusd.service - FreeRADIUS high performance RADIUS server.
   Loaded: loaded (/usr/lib/systemd/system/radiusd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[RAD]# systemctl start radiusd
[RAD]# systemctl status radiusd
● radiusd.service - FreeRADIUS high performance RADIUS server.
   Loaded: loaded (/usr/lib/systemd/system/radiusd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-01-09 15:38:13 JST; 9s ago
    :(省略)

firewalldの許可設定

ファイアウォールの許可設定をします。

[RAD]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[RAD]# cat /usr/lib/firewalld/services/radius.xml | grep port
  <port protocol="tcp" port="1812"/>
  <port protocol="udp" port="1812"/>
  <port protocol="tcp" port="1813"/>
  <port protocol="udp" port="1813"/>
[RAD]# firewall-cmd --add-service=radius --zone=public --permanent
success
[RAD]# firewall-cmd --reload
success

・RADIUS用

1812/tcp,1812/udp ・・・RADIUS authentication protocol, radius
1813/tcp,1813/udp ・・・RADIUS accounting protocol, radacct

ローカルホストでの認証確認

クライアントをローカルホストとして、認証ができるかを確認します。

[RAD]# radtest -t chap testuser testpass localhost 0 testing123
Sent Access-Request Id 241 from 0.0.0.0:41613 to 127.0.0.1:1812 length 79
        User-Name = "testuser"
        CHAP-Password = 0x43ec42038599719ce627b92ba0a30375fd
        NAS-IP-Address = 192.168.1.100
        NAS-Port = 0
        Message-Authenticator = 0x00
        Cleartext-Password = "testpass"
Received Access-Accept Id 241 from 127.0.0.1:1812 to 0.0.0.0:0 length 20

FreeRADIUSのサービス停止

一旦、FreeRADIUSのサービスを停止します。

[RAD]# systemctl stop radiusd
[RAD]# systemctl status radiusd
● radiusd.service - FreeRADIUS high performance RADIUS server.
   Loaded: loaded (/usr/lib/systemd/system/radiusd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

ここまでで、RADIUSサーバーに関する設定は完了です。

VPNサーバー側の設定変更

前回に作成したVPNサーバーをベースにして、RADIUSサーバーに接続が出来るように変更します。

[VPN]# cd /etc/xl2tpd
[VPN]# cp -p xl2tpd.conf xl2tpd.conf.bak.20180109
[VPN]# vim xl2tpd.conf
[global]
;auth file = /etc/ppp/chap-secrets <= コメントアウト
listen-addr = 192.168.1.10
[lns default]
ip range = 192.168.1.21-192.168.1.29
local ip = 192.168.1.20
refuse chap = yes
refuse pap = yes
require authentication = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
[VPN]# cd /etc/ppp
[VPN]# cp -p options.xl2tpd options.xl2tpd.bak.20180109
[VPN]# vim options.xl2tpd
ipcp-accept-local
ipcp-accept-remot
ms-dns 192.168.1.6
ms-dns 192.168.1.7
noccp
auth
name=xl2tpd
idle 1800
mtu 1410
mru 1410
nodefaultroute
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.log
refuse-pap
require-chap
refuse-mschap
refuse-mschap-v2
plugin radius.so
plugin radattr.so

RADIUSクライアントパッケージのインストール

VPNサーバーからRADIUSサーバーへ接続するため、VPNサーバー側に、RADIUSクライアントをインストールします。

[VPN]# yum info radiusclient-ng --enablerepo=epel
    :(省略)
Available Packages
Name        : radiusclient-ng
Arch        : x86_64
Version     : 0.5.6
Release     : 9.el7
Size        : 43 k
Repo        : epel/x86_64
Summary     : RADIUS protocol client library
    :(省略)
[VPN]# yum install radiusclient-ng --enablerepo=epel
    :(省略)
Installed:
  radiusclient-ng.x86_64 0:0.5.6-9.el7
 
Complete!

RADIUSクライアントの設定

VPNサーバーからRADIUSサーバーへ接続できるように、設定します。

[VPN]# cd /etc/radiusclient-ng
[VPN]# ls -l
total 16
-rw-r--r--. 1 root root  135 Feb  8  2014 issue
-rw-r--r--. 1 root root  410 Feb  8  2014 port-id-map
-rw-r--r--. 1 root root 2622 Feb  8  2014 radiusclient.conf
-rw-------. 1 root root  169 Feb  8  2014 servers
[VPN]# cp -p servers servers.original
[VPN]# vim server
RAD       testing123
[VPN]# cp -p radiusclient.conf radiusclient.conf.original
[VPN]# vim radiusclient.conf
auth_order      radius      <= 「,local」を削除
    :(省略)
authserver      RAD         <= RADIUSサーバーのホスト名に変更
    :(省略)
acctserver      RAD         <= RADIUSサーバーのホスト名に変更
    :(省略)
#bindaddr *                 <= コメントアウト
    :(省略)
[VPN]# cd /etc
[VPN]# ln -s radiusclient-ng radiusclient

ここまでで、VPNサーバーに関する設定は完了です。

各種サービスの再起動と自動起動設定

L2TPの再起動とRADIUSの自動起動設定及び起動を行ないます。

# systemctl restart xl2tpd
# systemctl enable radiusd
Created symlink from /etc/systemd/system/multi-user.target.wants/radiusd.service
 to /usr/lib/systemd/system/radiusd.service.
# systemctl start radiusd