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_coreのRequireAllやRequireAnyなどの条件式を記載しても動作しないようで、ひと手間必要なようです。
設定例
「自ホスト(127.0.0.1)と192.0.2.1/32からのアクセス時は認証無し」「それ以外はSAML認証する」場合の設定例は以下の通りです。
- 28〜30行目で「特定アドレスの場合、認証しない(
MellonEnable "off")設定にしています。
- この設定を行うには13〜14行目の設定も必要なようです。
- 上記に一致しない場合、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>
|