(NW)SSLVPN接続やってみる

投稿者: | 2020年10月8日
皆さんこんにちは。

今回はSSLVPN接続を試してみようかとおもいます。
手元のクライアントLinux <–> FortiGate 60E 間でSSLVPNをはってその通信とかを覗いてみようかとおもいます。

やることとしては、
1,FortigteにSSLVPNの設定を入れる
    – 今回は設定済み
    – まだ、画面ポチポチレベルの操作感なのでコマンド覚えたら別途まとめようとおもいます
2, Linux にクライアントソフトをインストールする
3, SSLVPN接続を行う
4, もろもろ確認

使用機材:
* L3SW : Catalyst 3560
* FW : Fortigate-60E
* ルータ : YAMAHA RTX1210
* クライアントPC : GentooLinux
(※追記 : 2021/06/10)
以下の通りFortiOSのSSLVPNにおいて脆弱性があるみたいです。
https://www.security-next.com/124906

SSLVPN設定

※画面ポチポチで設定したので、そのうちコマンドベースでまとめます

SSLVPNクライアントをインストールする

手元のクライアントPCにソフトをインストールします。
fortinetの公式サイトに各OSのインストール方法がまとまっています。
https://www.forticlient.com/downloads

Gentooのインストール方法が載って無かったのでパッケージが無いか探します。

hiro-gentoo ~ # emerge --search forti

[ Results for search key : forti ]
Searching...

*  net-vpn/networkmanager-fortisslvpn [ Masked ]
      Latest version available: 1.2.10
      Latest version installed: [ Not Installed ]
      Size of files: 359 KiB
      Homepage:      https://wiki.gnome.org/Projects/NetworkManager
      Description:   NetworkManager Fortinet SSLVPN compatible plugin
      License:       GPL-2+

*  net-vpn/openfortivpn
      Latest version available: 1.13.2
      Latest version installed: 1.13.2
      Size of files: 82 KiB
      Homepage:      https://github.com/adrienverge/openfortivpn
      Description:   Fortinet compatible VPN client
      License:       GPL-3-with-openssl-exception openssl

*  sys-libs/fortify-headers [ Masked ]
      Latest version available: 9999
      Latest version installed: [ Not Installed ]
      Size of files: 0 KiB
      Homepage:      http://git.2f30.org/fortify-headers/
      Description:   A standalone implementation of fortify source.
      License:       ISC

[ Applications found : 3 ]

hiro-gentoo ~ #
「net-vpn/openfortivpn」がいけそうです。インストールします。
https://github.com/adrienverge/openfortivpn
hiro-gentoo ~ # emerge -av net-vpn/openfortivpn

SSLVPN接続をする

### FortigateのグローバルIPアドレスあてに接続する
### SSLの証明書は自己証明書を利用しているため「--trusted-cert」にしていする。
### 指定する証明書は最初指定せずに接続するとサジェストされる。

hiro-gentoo ~ # openfortivpn z.z.z.z:10443 --username=hiro --trusted-cert 056aca5c34fa03380d9affab62c2d62a0544a18d9e4e774241e7f47cf81c76ce
VPN account password: 
INFO:   Connected to gateway.
INFO:   Authenticated.
INFO:   Remote gateway has allocated a VPN.
Using interface ppp0
Connect: ppp0 <--> /dev/pts/4
INFO:   Got addresses: [10.1.1.1], ns [0.0.0.0, 0.0.0.0]
INFO:   negotiation complete
INFO:   negotiation complete
local  IP address 10.1.1.1
remote IP address 192.0.2.1
INFO:   Interface ppp0 is UP.
INFO:   Setting new routes...
INFO:   Adding VPN nameservers...
INFO:   Tunnel is up and running.

諸々確認

それではもろもろ確認していこうとおもいます。
まず接続時にログが流れていますが「ppp0」という仮想インターフェースが設定されているみたいです。
hiro-gentoo ~ # ip add show ppp0
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1354 qdisc pfifo_fast state UNKNOWN group default 
qlen 3
    link/ppp 
    inet 10.1.1.1 peer 192.0.2.1/32 scope global ppp0
       valid_lft forever preferred_lft forever
FortigateのSSLVPNアドレスプールに設定した「10.1.1.1」のIPアドレスが設定されています。うまく行ってそう。

つづいてルーティングテーブルを確認します。
hiro-gentoo ~ # ip r
default via 192.168.100.1 dev br0 proto static metric 425
192.0.2.1 dev ppp0 proto kernel scope link src 10.1.1.1
192.168.1.0/24 via 10.1.1.1 dev ppp0 scope link
192.168.100.0/24 dev br0 proto kernel scope link src 192.168.100.220 metric 425
z.z.z.z via 192.168.100.1 dev br0
VPN接続先のNW「192.168.1.0/24」宛の通信は、ppp0 を通って通信するように設定されています。
これでVPN先のNWにルーティングされるようになってるみたいです。

それでは最後にVPN接続先NWにいる「テストサーバ」にSSH接続をしてみようとおもいます。
hiro-gentoo ~ # ssh root@192.168.1.20
root@192.168.1.20's password: 
Last login: Wed Oct  7 19:02:58 2020 from gateway
[root@hiro-install-01 ~]# 
SSLVPN接続をして、リモートのローカルNWのPCに接続することが出来ました。

ちょっと上記の通信を覗いてみようとおもいます。
まずはクライアントPCのppp0の通信を見ようとおもいます。
hiro-gentoo ~ # tcpdump -i ppp0
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp0, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
22:16:36.704917 IP 10.1.1.1.40252 > 192.168.1.20.ssh: Flags [P.], seq 2900425076:2900425112, ack 2773590291, win 502, options [nop,nop,TS val 1792349791 ecr 23702810], length 36
22:16:36.713764 IP 192.168.1.20.ssh > 10.1.1.1.40252: Flags [P.], seq 1:93, ack 36, win 78, options [nop,nop,TS val 23837789 ecr 1792349791], length 92
22:16:36.713772 IP 10.1.1.1.40252 > 192.168.1.20.ssh: Flags [.], ack 93, win 502, options [nop,nop,TS val 1792349800 ecr 23837789], length 0

「10.1.1.1.40252 > 192.168.1.20.ssh」ローカルIP同士の通信になっていてVPN接続されていることが分かります。

つづいてミラーポートを設定してるL3SWに流れる通信を覗いてみようとおもいます。
SSLVPNなのでSSL/TLSで暗号化されたパケットが流れているはずです。
### YAMAHA RTX1210 を接続してるポートのトラフィックをミラーする
L3SW(config)#monitor session 1 source interface fastEthernet 0/7
L3SW(config)#monitor session 1 destination interface fastEthernet 0/1
FortigateのグローバルIPv4アドレス宛の通信をキャプチャしました。
MAP-Eを使っているのでIPv6でカプセル化されたIPv4パケットの中にTLSで暗号化されたSSLVPNの通信が確認できます。
このなかに先ほどtcpdumpで確認した通信が暗号化されて入ってるはずです。


以上で今回の検証を終りたいとおもいます。
リモートワークなどで利用されるSSLVPNについて今回は試してみました。
そのうちL2TPなどの他のVPN手法も試してみようかなとおもいます。

それではまた。


参考:
https://www.jpne.co.jp/ebooks/v6plus-ebook.pdf