Top/EBUG勉強会/20170211_SSLVPN

relayd + DeleGate + acme-client = SSLVPN

EBUG 第60回会合
2017年 2月11日、万代市民会館
川俣吉広、kaw@on.rim.or.jp

発端

本件の実装以前、従来は以下の構成でSSL-VPNの運用を行っていた。

INTERNET                      || INTRANET LAN
https://gw.foobar.com/bee/*   || http://sv.inner.foobar.com/quux/baz/*
                              ||
                          +-----------+
                          |OpenBSD 5.8|
 [Web Browser]---HTTPS--->*DeleGate   *---HTTP--->[Web Server]
                         /|     9.9.13|
                        / +-----------+
                       /      ||
                  Basic       ||
                  Auth.       ||

このGWではDeleGateを用いて、以下のことをやっている;

#!/bin/sh

function dgcmd {
    /usr/fuguita/sbin/delegated \
        DGROOT=/home/delegated \
        OWNER=delegated/delegated \
        LOGDIR='log/[date+archived/%Y%m]' \
        "$@"
}

umask 0027

case X"$1" in
    Xstart)  dgcmd \
                -Pgw.foobar.com:443 \       <-(A)
                 SERVER=https \             <-(A)
                 FCL=sslway \               <-(A)
                 REMITTABLE="http,https" \                  <-許可するプロトコル
                 RELIABLE="*.jp,*.gfngfn.net" \             <-許可するアクセス元
                 REACHABLE="inner.foobar.com,google.com" \  <-許可するアクセス先
                 AUTH=proxy:pauth \                                                        <-(B)
                 AUTHORIZER='-list{guest:welcome772,kaw:op2p29eje,ouquser:pvs/neue288}' \  <-(B)
                 MOUNT='/proj1/* http://gwe1.inner.foobar.com/bd/proj1/*' \   <-(C)
                 MOUNT='/proj2/* http://iwf.inner.foobar.com/wf/ntp8x16/*' \  <-(C)
                 MOUNT='/* https://google.com/?q=*' ;;                        <-(C)
    Xstop)    dgcmd -Pfoobar.com:443 -Fkill ;;
    Xrestart) $0 stop; sleep 15; $0 start;;
    *)        echo "$0 start|stop|restart" >&2 ;;
esac

このサーバを更新し、OpenBSD 5.8 -> OpenBSD 6.0 に変更したところ、DeleGateがlibssl, libcryptoをロードしなくなった。
外部よりアクセスすると、ブラウザに

このサイトにアクセスできません
 foobar.com により途中で接続が切断されました。

と表示され(Google Chromeの場合)、接続できない。また、DeleGateのログでは、起動時に

--ERROR: can't link the SSL/Crypto library.

ブラウザ接続時、DeleGateのログに

[OpenBSD/6.0] not OOB: BrokenSocket[25] <= _-select.c91 ####

というエラーが記録される。

代替策として、SSL/TLSの終端を行う部分を他のソフトウェアで置き換えることとした。
候補としては、Squid, Nginx, Varnishなどのリバースプロキシがあるが、今回はOpenBSDネイティブのrelaydを使用した。

併せて、SSL/TLSのサーバ証明書を自己署名のものから、Let's Encryptから発行されたものに変更した。

relaydとは

OpenBSDネイティブなL7ゲートウェイ。これを使用してロードバランサを構築可能。

OpenBSDのウェブ関連daemonの系譜

[4.1]           [4.3]
hoststated------>relayd------+---------------->[6.0]
                             |
                             |
Customized                   V
Apache 1.3.x-------|Nginx---|+OpenBSD httpd--->[6.0]
[2.3]              [5.1]    [5.7]

relaydの機能

LBとしての動作例
                                             +--------+
                                        +--->|Web     |
                                  server|   /|Server 2|
                           health checks|  / +--------+
        +-GW-------------------------+  | /
        |               |relayd      *--+/
        |               ----*--------|  / 
        |     rdr rewriting/         | /|    +--------+
        |-----------------*----------|/ +--->|Web     |
------->| PF | rdr-anchor "relayd/*" *-------|Server 2|
Incoming+----------------------------+\ |    +--------+
Access                                 \|     
                                        \ 
                                        |\
                                        | \  +--------+
                                        +--\->Web     |
                                            \|Server 3|
                                             +--------+

PFを使わずに、relayd単体でも運用可能

Let's Encryptとacme-clientについて

Let's Encryptとは、SSL/TLSのサーバ証明書を発行するCA(Certificate Authority: 認証局)の一つ。

ACMEのクライアントプログラムは幾つもの実装があるacme-clientはmandocの作者でもあるKristaps DzonsonsによってC言語で作成されたもの。以前はletskencryptと称していた。acme-clientはOpenBSD 6.1ではベースシステムに加えられる予定。

SSL-VPNの再実装例

SSLの終端部分をrelaydで置き換え、以下のように構成を変更する。

INTERNET                      || INTRANET LAN
https://gw.foobar.com/bee/*   || http://sv.inner.foobar.com/quux/baz/*
                              ||
                          OpenBSD 6.0
                          +---------------+
 [Web Browser]---HTTPS--->*relayd         |
                          |----|----------|
                          |    v127.0.0.1 |
                          |----*----------|
                          |       DeleGate*---HTTP--->[Web Server]
                         /+---------------+
                        /     ||
                       /      ||
                  Basic       ||
                   Auth.      ||

まとめ


Top/EBUG勉強会/20170211_SSLVPN
recent(50)
2023-01-24 2023-01-22 2022-12-23 2022-12-13 2022-11-17 2022-11-15 2022-11-14 2022-11-13 2022-11-12 2022-11-08 2022-11-05 2022-10-18 2022-09-28 2022-08-08 2022-08-07 2022-04-11 2022-03-10 2022-01-19 2021-12-11 2021-10-02 2021-08-28 2021-05-31 2021-05-21 2021-05-14 2021-04-16 2020-10-07 2020-07-22 2020-06-20 2020-06-14 2020-05-15 2020-02-28 2020-02-07 2019-12-11 2019-10-09 2019-05-25 2019-04-04

Front page   Edit Freeze Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes
Last-modified: 2017-02-11 (Sat) 11:41:40