tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

ApacheのProxyをかます途中でBasic認証を入れてConfluenceにアクセスさせようとしたら失敗した件

よくある1サーバーでConfluenceを複数稼働させたい場合のリバースProxy設定ですね。

こんな感じ。
f:id:tohokuaiki:20180416182940p:plain

あるいは、iptablesで無駄にポートを開けたくない場合とか。

で、内輪向けのConfluenceなんで、Basic認証をかければゼロデイアタックとかも多少は防げるんじゃないかって思ってBasic認証つけたかったんです。

Basic認証は通るけど、ConfluenceでAuthエラー

余裕じゃん・・と思ってこんな感じでProxy設定にBasic認証の設定をかけたわけです。

<VirtualHost *:80>
    <Location />
        Order deny,allow
        Allow from all
        AuthType Basic
        AuthName "Authentication"
        AuthUserFile /etc/apache2/htpasswd
        Require valid-user
    </Location>
    ProxyTimeout 8000
    ProxyRequests Off
    ProxyPreserveHost On
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
    ProxyPass / http://localhost:8090/ retry=1 acquire=3000 timeout=600 Keepalive=On
    ProxyPassReverse / http://localhost:8090/
</VirtualHost>

すると、こんなエラーが出る。
f:id:tohokuaiki:20180416183247p:plain

HTTPステータス 401 - Basic Authentication Failure - Reason : AUTHENTICATION_DENIED
type ステータスレポート
メッセージ Basic Authentication Failure - Reason : AUTHENTICATION_DENIED
説明 This request requires HTTP authentication.
Apache Tomcat/8.0.50

なんでTomcat側でエラーが出るんだ????

と思い、Tomcat使ってるのはConfluenceなのでこちら側を疑う。Confluenceで一旦ログイン後に、ApacheBasic認証をつけるとこのエラーは出ない。

ということは、Confluenceは

  1. COOKIEによる認証を試みる
  2. COOKIE認証に失敗した場合、Basic認証のAuthorization ヘッダから認証を試みる

となっているのではないか???

余計なことしてほしくないなぁ…と思い、そのAuthenticateをしているだろうプラグインを探す。
f:id:tohokuaiki:20180416182401p:plain

なんとなくこいつっぽいなーって思い、「無効」にしたが全然だめだった。

Confファイルを探すもなんか見つからない…。

ということで、Apache側で設定

だったら、Proxyする際にAuthenticationヘッダを送らなければいいんじゃんって思って、Apacheにmod_headersを導入

# a2enmod headers

した後に、apache.conf(debianなんでsites-enables内だけど)を書き換えて

    RequestHeader unset Authorization

を追加。

すると問題なくConfluence側がBasic認証をやめてくれた。

Confluence、REST and os_authTypeとか読むとquery stringsにos_authType=basicって入れないとBasic認証ヘッダをスルーしてくれそうなんだけどな。ま、いいや。。