#topicpath
*relayd + DeleGate + acme-client = SSLVPN [#f6ff4c62]
RIGHT:EBUG 第60回会合 ~
2017年 2月11日、万代市民会館 ~
川俣吉広、kaw@on.rim.or.jp

**発端 [#ab0755fb]
本件の例では、以下の構成でSSL-VPNの運用を行っていた。
 INTERNET                      || INTRANET LAN
 https://gw.foobar.com/bee/*   || http://sv.inner.foobar.com/quux/baz/*
                               ||
                           [OpenBSD 5.8]
 [Web Broweser]---HTTPS--->[DeleGate   ]---HTTP--->[Web Server]
                          /[     9.9.13]
                         /     ||
                      Basic    ||
                      Auth.    ||
                           +-----------+
                           |OpenBSD 5.8|
  [Web Browser]---HTTPS--->*DeleGate   *---HTTP--->[Web Server]
                          /|     9.9.13|
                         / +-----------+
                        /      ||
                   Basic       ||
                   Auth.       ||
このGWではDeleGateを用いて、以下のことをやっている;
-(A) SSL/TLSの終端 (証明書はDeleGate内蔵の自己署名されたもの)
-(B) ユーザの認証  (リバースプロキシのBasic認証)
-(C) URLのリダイレクト(書換え)

 #!/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 \
                 -Pfoobar.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とは [#b1d506bc]
OpenBSDネイティブなL7ゲートウェイ。これを使用してロードバランサを構築可能。
-http://www.slideshare.net/GiovanniBechis/relayd-a-load-balancer-for-openbsd とか

 OpenBSDのウェブ関連daemonの系譜
 
 hoststated------>relayd------+-------->relayd
                              |
                              |
 Customized                   V
 Apache 1.3.x-------|Nginx---|+-------->OpenBSD httpd
relaydの機能
-Incoming Connectionの中継
-バックエンドのサーバへのロードバランス(HTTP, HTTPS, DNS)
-同、死活監視
-SSL/TLS終端
-HTTPのフィルタリング
-...etc

 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単体でも運用可能

**acme-clientについて [#pd5f684f]

**実装例 [#s0949dd2]

----
#topicpath


Front page   New Page list Search Recent changes   Help   RSS of recent changes