CentOS7.4 VPNをSAMBA4で認証(1/3)[L2TP/IPsec構築編]

シェアする

外部からの接続でVPN(L2TP/IPSec)を利用していますが、以前にSambaを構築していたので、ユーザー管理をそちらで行なうようにしたいと思います。

概略メモ

Samba4からは、LDAPが内蔵されているので、VPN接続ユーザーを、Samba4の内蔵LDAPで認証できることを目標とします。が、VPNから直接、LDAPへ接続できることが出来ないようですので、中間にRADIUSを配置することで実現しました。

| VPNクライアント |---| VPNサーバー |---| RADIUSサーバー |---| SAMBAサーバー |

 段階を踏んで、順番に構築してきます。 

構築する上で、ザックリと下記のようなサーバー構成とします。

サーバー名 ホスト名 IPアドレス
VPNサーバー VPN 192.168.1.10
RADIUSサーバー RAD 192.168.1.100
SAMBAサーバー SMB 192.168.1.200

この記事に関して

まずは、入口となるVPNクライアントからVPNサーバーまでの接続ができるように設定します。
以前にも、VPNサーバーを構築していますが、再度、あらためて、加筆と訂正にて記事を起こしました。

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

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

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

L2TP/IPsecを構成するL2TPパッケージをEPELからインストールします。

[VPN]# yum info xl2tpd --enablerepo=epel
   :(省略)
Available Packages
Name        : xl2tpd
Arch        : x86_64
Version     : 1.3.8
Release     : 2.el7
Size        : 97 k
Repo        : epel/x86_64
Summary     : Layer 2 Tunnelling Protocol Daemon (RFC 2661)
   :(省略)
[VPN]# yum install xl2tpd -y --enablerepo=epel
   :(省略)
Installed:
  xl2tpd.x86_64 0:1.3.8-2.el7
 
Complete!

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

L2TP/IPsecを構成するIPsecパッケージをインストールします。
CentOSの標準リポジトリーでは、このlibreswanがパッケージングされています。
なお、strongswanは、EPELリポジトリーにあります。
また、openswanは、メンテされていませんので、特に使う理由はないでしょう。

[VPN]# yum info libreswan
   :(省略)
Available Packages
Name        : libreswan
Arch        : x86_64
Version     : 3.20
Release     : 5.el7_4
Size        : 1.3 M
Repo        : updates/7/x86_64
Summary     : IPsec implementation with IKEv1 and IKEv2 keying protocols
   :(省略)
[VPN]# yum install libreswan -y
   :(省略)
Installed:
  libreswan.x86_64 0:3.20-5.el7_4
 
Dependency Installed:
  ldns.x86_64 0:1.6.16-10.el7
  libevent.x86_64 0:2.0.21-4.el7
  unbound-libs.x86_64 0:1.4.20-34.el7
 
Complete!

L2TPの設定

L2TPの設定をします。

[VPN]# cd /etc/xl2tpd
[VPN]# ls -l
total 8
-rw-------. 1 root root  109 Aug 12  2016 l2tp-secrets
-rw-r--r--. 1 root root 1400 Aug 12  2016 xl2tpd.conf
[VPN]# cp -p xl2tpd.conf xl2tpd.conf.original
[VPN]# cat /dev/null > xl2tpd.conf
[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]# ls -l
total 56
-rw-------. 1 root root   78 Jun 10  2014 chap-secrets
-rw-------. 1 root root  324 Aug 12  2016 chap-secrets.sample
-rw-------. 1 root root  349 Jun 10  2014 eaptls-client
-rw-------. 1 root root  405 Jun 10  2014 eaptls-server
-rwxr-xr-x. 1 root root  386 May  3  2017 ip-down
-rwxr-xr-x. 1 root root 3214 May  3  2017 ip-down.ipv6to4
-rwxr-xr-x. 1 root root  430 May  3  2017 ip-up
-rwxr-xr-x. 1 root root 6426 May  3  2017 ip-up.ipv6to4
-rwxr-xr-x. 1 root root 1687 May  3  2017 ipv6-down
-rwxr-xr-x. 1 root root 3182 May  3  2017 ipv6-up
-rw-r--r--. 1 root root    5 Jun 10  2014 options
-rw-r--r--. 1 root root  748 Dec 23  2016 options.xl2tpd
-rw-------. 1 root root   77 Jun 10  2014 pap-secrets
drwxr-xr-x. 2 root root    6 Aug  4 08:57 peers
[VPN]# cp -p options.xl2tpd options.xl2tpd.original
[VPN]# cat /dev/null > options.xl2tpd
[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
[VPN]# vim chap-secrets
"testuser" "xl2tpd" "testpass" *

IPSecの設定

IPSecの設定をします。

[VPN]# cd /etc
[VPN]# ls -l ipsec*
-rw-r--r--. 1 root root 2050 Dec  1 05:28 ipsec.conf
-rw-------. 1 root root   31 Dec  1 05:28 ipsec.secrets
 
ipsec.d:
total 4
drwx------. 2 root root   95 Dec 28 17:13 policies
-rw-r--r--. 1 root root 1338 Dec  1 05:28 v6neighbor-hole.conf
[VPN]# cp -p ipsec.conf ipsec.conf.original
[VPN]# cat /dev/null > ipsec.conf
[VPN]# vim ipsec.conf
config setup
    protostack=netkey
    virtual_private=%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:192.168.0.0/16
include /etc/ipsec.d/*.conf
[VPN]# cd ipsec.d
[VPN]# vim l2tp-psk.conf <= 新規作成
conn L2TP-PSK-LEFT
    leftsubnet=0.0.0.0/0
    dpddelay=10
    dpdtimeout=30
    dpdaction=clear
    forceencaps=yes
    left=%any
    leftprotoport=17/%any
    also=L2TP-PSK-RIGHT
conn L2TP-PSK-RIGHT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    type=transport
    right=192.168.1.10
    rightprotoport=17/1701
[VPN]# vim /etc/ipsec.d/default.secrets
: PSK "testsecret"
[VPN]# chmod 600 default.secrets

カーネルパラメータの変更

通信周りのカーネルパラメータを変更します。

[VPN]# sysctl -a > /tmp/sysctl_a.old
[VPN]# cd /etc/sysctl.d
[VPN]# ls -l
lrwxrwxrwx. 1 root root 14 Dec 3 18:32 99-sysctl.conf -> ../sysctl.conf
[VPN]# vim 60-sysctl_ipsec.conf <= 新規作成
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.rp_filter = 0
[VPN]# sysctl -p

xl2tpd(L2TP)の自動起動設定

xl2tpdが自動で起動できるようにします。

[VPN]# systemctl status xl2tpd
● xl2tpd.service - Level 2 Tunnel Protocol Daemon (L2TP)
Loaded: loaded (/usr/lib/systemd/system/xl2tpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[VPN]# systemctl enable xl2tpd
Created symlink from /etc/systemd/system/multi-user.target.wants/xl2tpd.service
 to /usr/lib/systemd/system/xl2tpd.service.
[VPN]# systemctl status xl2tpd
● xl2tpd.service - Level 2 Tunnel Protocol Daemon (L2TP)
Loaded: loaded (/usr/lib/systemd/system/xl2tpd.service; enabled; vendor preset: disabled)
Active: inactive (dead)

ipsecの自動起動設定

ipsecが自動で起動できるようにします。

[VPN]# systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
Loaded: loaded (/usr/lib/systemd/system/ipsec.service; disabled; vendor preset: disabled)
Active: inactive (dead)
  Docs: man:ipsec(8)
   man: pluto(8)
   man: ipsec.conf(5)
[VPN]# systemctl enable ipsec
Created symlink from /etc/systemd/system/multi-user.target.wants/ipsec.servic
 to /usr/lib/systemd/system/ipsec.service.
[VPN]# systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled)
Active: inactive (dead)
  Docs: man:ipsec(8)
   man: pluto(8)
   man: ipsec.conf(5)

firewalldの許可設定

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

[VPN]# 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:
[VPN]# cat /usr/lib/firewalld/services/ipsec.xml | grep port
  <port protocol="ah" port=""/>
  <port protocol="esp" port=""/>
  <port protocol="udp" port="500"/>
  <port protocol="udp" port="4500"/>
[VPN]# firewall-cmd --add-service=ipsec --zone=public --permanent
success
[VPN]# firewall-cmd --add-port=4500/udp --zone=public --permanent
success
[VPN]# firewall-cmd --add-port=1701/udp --zone=public --permanent
success
[VPN]# firewall-cmd --reload
success

・ipsec用 (ルータ側でも許可する)

500/udp・・・・ISAKMP(Internet Security Association and Key Management Protocol)用
4500/udp ・・・IPSec NAT-Traversal用
/esp・・・・・・ESP(Encapsulated Security Payload)用[プロトコル番号50]

・xl2tpd用

1701/udp ・・・L2TP(Layer 2 Tunneling Protocol)用

※ 補足 
/ah ・・・・・・AH(Authentication Header)用[プロトコル番号51]

マシンリブート

一通りの設定が終わったので、ここで一旦、マシンリブートをします。

[VPN]# shutdown -r now

状態の確認

マシンリブート後にサービスの状態が正常であるかを確認します。

[VPN]# systemctl status xl2tpd
● xl2tpd.service - Level 2 Tunnel Protocol Daemon (L2TP)
   Loaded: loaded (/usr/lib/systemd/system/xl2tpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-12-31 12:59:19 JST; 6s ago
     :(省略)
[VPN]# systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
   Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-12-31 12:44:27 JST; 17min ago
     :(省略)
[VPN]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh ipsec
  ports: 1701/udp 4500/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[VPN]# ipsec verify
Verifying installed system and configuration files
 
Version check and ipsec on-path                         [OK]
Libreswan 3.20 (netkey) on 3.10.0-693.11.1.el7.x86_64
Checking for IPsec support in kernel                    [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                    [OK]
         ICMP default/accept_redirects                  [OK]
         XFRM larval drop                               [OK]
Pluto ipsec.conf syntax                                 [OK]
Two or more interfaces found, checking IP forwarding    [OK]
Checking rp_filter                                      [OK]
Checking that pluto is running                          [OK]
Pluto listening for IKE on udp 500                      [OK]
Pluto listening for IKE/NAT-T on udp 4500               [OK]
Pluto ipsec.secret syntax                               [OK]
Checking 'ip' command                                   [OK]
Checking 'iptables' command                             [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options                [OK]