Skip to content

Apache+mod_auth_mellon構成で「特定アドレスは認証無し」「それ以外はSAML認証」させる設定

以前にAmazon Linux 2023 + Apache + mod_auth_mellon + Entra で SSO を設定するというメモを書きました。mod_auth_mellonを使ってSAML認証させつつ、「特定アドレスからのアクセス時のみ、認証させない」設定方法をメモしておきます。

検証環境

対象 バージョン
Ubuntu 24.04.3 LTS
Apache 2.4.58
mod_auth_mellon 0.19.0

「mod_auth_mellon利用時、特定条件時のみ認証無しにする」設定は注意が必要?

RequireAny + Require valid-user vs MellonEnable "auth" #120というIssueで報告されていますが、「mod_auth_mellon利用時、特定条件時のみ認証無しにする」設定にはコツが必要?なようです。詳しくは後述しますが、いわゆるApacheのmod_authz_coreRequireAllRequireAnyなどの条件式を記載しても動作しないようで、ひと手間必要なようです。

設定例

「自ホスト(127.0.0.1)と192.0.2.1/32からのアクセス時は認証無し」「それ以外はSAML認証する」場合の設定例は以下の通りです。

  1. 28〜30行目で「特定アドレスの場合、認証しない(MellonEnable "off")設定にしています。
  2. この設定を行うには13〜14行目の設定も必要なようです。
  3. 上記に一致しない場合、15行目以下の処理が継続されmod_auth_mellonで認証が実施されます。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName www.example.com
        DocumentRoot /var/www/html
        ServerSignature Off
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
        LogLevel info ssl:warn
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/certificates/www.example.com.crt
        SSLCertificateKeyFile /etc/letsencrypt/certificates/www.example.com.key
        <Location />
            Require ip 127.0.0.1
            Require ip 192.0.2.1
            Require valid-user
            AuthType "Mellon"
            MellonEnable "auth"
            MellonDecoder "none"
            MellonVariable "cookie"
            MellonSecureCookie On
            MellonEndpointPath /saml/
            MellonSPMetadataFile /etc/apache2/mellon/https_www_example_net.xml
            MellonSPPrivateKeyFile /etc/apache2/mellon/https_www_example_net.key
            MellonSPCertFile /etc/apache2/mellon/https_www_example_net.cert
            MellonIdPMetadataFile /etc/apache2/mellon/www_example_net.xml
            MellonUser "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
        </Location>
        <If "%{REMOTE_ADDR} == '127.0.0.1' || %{REMOTE_ADDR} == '192.0.2.1'">
            MellonEnable "off"
        </If>
    </VirtualHost>
</IfModule>