Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@smallpalace

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?