LoginSignup
4
2

More than 5 years have passed since last update.

LB配下のサーバ(Apache)で複数サイトに別々の設定(Basic認証とIP制限)したい

Last updated at Posted at 2018-09-07

やりたいこと

  • LB配下のサーバ内ApacheでBasic認証とIP制限をする
  • 同一サーバ内に同じドキュメントルートでフロント画面と管理画面がある
    • フロント画面(front-website.com)はIP制限なし、Basic認証あり
    • 管理画面(backend-website.com)はIP制限あり、Basic認証なし

構成

  • サーバにはフロント画面(front-website.com)と管理画面(backend-website.com)がある
  • LB1台、サーバ1台
  • CentOS7
  • Apache2.4
  • AWS

実際に設定した内容 ※該当箇所のみ抜粋

  • allow_ip1~allow_ip3のIPアドレスが管理画面(backend-website.com)
<VirtualHost *:80>
    ServerName front-website.com
    DocumentRoot "/var/www/html"

    <Directory "/var/www/html">
        Options FollowSymLinks ExecCGI Includes
        DirectoryIndex index.html index.php
        AllowOverride All
        EnableMMAP Off
        EnableSendfile Off
    </Directory>

    <Location "/">
##★Basic認証設定★
        AuthType Basic
        AuthUserFile /etc/httpd/conf/.htpasswd
        AuthGroupFile /dev/null
        AuthName "Basic Auth"
        Require valid-user

##★ヘルスチェックからBasic認証を外す★
        Satisfy Any 
        SetEnvIf Request_URI "/health.html" healthcheck
        Order Deny,Allow
        Deny from all granted
        Allow from env=healthcheck
    </Location>
</VirtualHost>

<VirtualHost *:80> 
    ServerName backend-website.com
    DocumentRoot "/var/www/html"

    <Directory "/var/www/html">
        Options FollowSymLinks ExecCGI Includes
        DirectoryIndex index.html index.php
        AllowOverride All
        EnableMMAP Off
        EnableSendfile Off
    </Directory>

    <Location "/">
      Require all denied

      Satisfy Any
      SetEnvIf X-Forwarded-For "123\.123\.123\.123.*" allow_ip1 ★許可するIPアドレス1
      SetEnvIf X-Forwarded-For "456\.456\.456\.456.*" allow_ip2 ★許可するIPアドレス2
      SetEnvIf X-Forwarded-For "789\.789\.789\.789.*" allow_ip3 ★許可するIPアドレス3
      Order Deny,Allow
      Deny from all
      Allow from env=allow_ip1
      Allow from env=allow_ip2
      Allow from env=allow_ip3
    </Location>
</VirtualHost>

つまづいたところ

ApacheでのIP制限がうまくいかない問題

原因

  • ApacheがリモートIPアドレスを拾うことが出来ていなかったため設定が反映されなかった。
    • 以下の設定だとアクセス時のIPはLBのIPをApacheが判断してしまい、allow_ipでアクセスしてもアクセス不可能でした。

もともと設定していた悪い例

<VirtualHost *:80>
    ServerName backend-website.com
    DocumentRoot "/var/www/html"

    <Directory "/var/www/html">
        Options FollowSymLinks ExecCGI Includes
        DirectoryIndex index.html index.php
        AllowOverride All
        EnableMMAP Off
        EnableSendfile Off
    </Directory>

    <Location "/">
      Require all denied

      Require ip 123.123.123.123 allow_ip1 ★許可するIPアドレス1
      Require ip 456.456.456.456 allow_ip2 ★許可するIPアドレス2
      Require ip 789.789.789.789 allow_ip3 ★許可するIPアドレス3
    </Location>
</VirtualHost>
4
2
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
4
2