- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
#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