LoginSignup
0
0

More than 5 years have passed since last update.

apache2.4のIPとdigest認証+GoogleLoadbalancerのhelthcheck通過

Last updated at Posted at 2018-04-12

apache2.4のIPとdigest認証+GoogleLoadbalancerのhelthcheck通過させようとしてちょっとはまったので備忘録です。

要件
$domain3/uri1 
は、特定IPからのみの接続 

$domain1
$domain2
(同じDirectory)
は特定IPからは常時接続可能にして
それ以外はダイジェスト認証

GCPのhttpsLBのバックエンドのhelthcheckのURIは
/check.html

要は固定IPからでない接続を開発期間はdigest認証にしたい
(けどLBからのIPを許可してしまうと全世界のIPを許可した風になってしまうのでそれをなんとかする)

・Digest認証ユーザついか

sudo htdigest -c /path/.htdigest "Digest Auth" user1
sudo htdigest /path/.htdigest "Digest Auth" user2

・モジュールがロードされてることを確認

$ find ../ -type f -name "*conf"|xargs grep basic
../conf.modules.d/00-base.conf:LoadModule auth_basic_module modules/mod_auth_basic.so

$ find ../ -type f -name "*conf"|xargs grep digest
../conf.modules.d/00-base.conf:LoadModule auth_digest_module modules/mod_auth_digest.so

$ find ../ -type f -name "*conf" |xargs grep mod_authz
../conf.modules.d/00-base.conf:LoadModule authz_core_module modules/mod_authz_core.so
../conf.modules.d/00-base.conf:LoadModule authz_dbd_module modules/mod_authz_dbd.so
../conf.modules.d/00-base.conf:LoadModule authz_dbm_module modules/mod_authz_dbm.so
../conf.modules.d/00-base.conf:LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
../conf.modules.d/00-base.conf:LoadModule authz_host_module modules/mod_authz_host.so
../conf.modules.d/00-base.conf:LoadModule authz_owner_module modules/mod_authz_owner.so
../conf.modules.d/00-base.conf:LoadModule authz_user_module modules/mod_authz_user.so

・apache設定追加

$ sudo vi /etc/httpd/conf.d/auth.conf
$ cat auth.conf 
#domain1/2
SetEnvIF X-Forwarded-For "$myip1" AllowIP
SetEnvIF X-Forwarded-For "$myip2" AllowIP
#SetEnvIF Remote_Addr "130.211.0.0/22" HelthchkIP
#SetEnvIF Remote_Addr "35.191.0.0/16" HelthchkIP
SetEnvIf Request_URI "/check.html" Helthchk
<Location />
    <RequireAny>
        AuthType Digest
        AuthName "Digest Auth" 
        AuthUserFile /path/.htdigest
        Require env AllowIP
        Require valid-user
        Require env Helthchk
    </RequireAny>
</Location>
#domain3
<Location /uri1>
    Require env AllowIP
</Location>

$ sudo apachectl configtest
Syntax OK
$ sudo systemctl restart httpd.service
$ sudo systemctl status httpd.service

ちょっとはまったとこ:
VirtualHostDirectoryに書くのだとなんだか<RequireAny>が効かなかったがLocationにしたら効いた
・LBからのIPも許可にするとIPで許可されてしまってダイジェスト認証が効かなくなってしまうのでURI指定さす
・LBのヘルスチェックの到達場所は別でかけてるRewriteもスルーさせててデフォルトのドキュメントルートに来る
・ヘルスチェックのIPはRemote_AddrでクライアントIPはX-Forwarded-Forという差があるが今回は関係なかった
Satisfy any<RequireAny>になった(どれか一致で認証とおすやつ。全部を要求は<RequireAll>

ちなみに直IPとhttpはhttpsにリライト+LBヘルスチェックは通過はこちらにかきました
決済システムへの出口はおそらくデフォルトゲートウェイなので、GCPとAWSは直に行くっぽいのと戻りは直にきたりするのでrewriteしてても名前が一致しないとエラーが出ることがあるっぽいです。AzureはゲートウェイがLBになってるらしい(と先輩に聞いた)。

LBのヘルスチェックの設定についてはURIはデフォルトだと/で、GUIコンソールだとネットワークサービス>負荷分散ではなくコンピュートエンジン>ヘルスチェックに設定する箇所がありました(AWSはLBのとこでヘルスチェックも可能)。

参考:
https://dev.classmethod.jp/cloud/elb-exclude-health-check-url/
https://qiita.com/ysKey2/items/c9f98a3c5d6f2a9cc801
https://qiita.com/mmotoi/items/5d7dcbb9e461feba98cd
https://qiita.com/Ayame/items/1ab7f645b1d77db454e4
https://qiita.com/KurosawaTsuyoshi/items/d9579c9c68666f086e68

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0