環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

IPアドレス直打ちアクセスを拒否する(apache2.4)

IPアドレス直打ちアクセスを拒否する(apache2.4)

IPアドレスを直接ブラウザに入力した際に、意図しないページが表示されてしまうことを望まない場合が多くある。基本的に公開されたサービスは、独自ドメインでアクセスされたいので、apacheの拒否方法を実践してみる。

環境

今回試した環境は以下の環境です。

  • CentOS7
  • httpd2.4

まず最初に

apacheをインストールして、IPアドレスを入力してみる。

# インストール
yum -y install httpd

# 起動
systemctl start httpd

ブラウザにて、IPアドレスを直接入力してみます。

起動している事が確認できます。ですが、サービス運用していくにあたり、これが永遠と表示されてしまうのは避けたいところです。

このページはどこに?

httpd.confを見てみると、ドキュメントルートの記述があります。

/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"

ですが、デフォルトでは、ここにファイルは存在しませんでした。

ではさきほどのデフォルト表示は、どこから来ているのだろうか。

/etc/httpd/conf.d/welcome.conf

このファイルもデフォルトで読み込まれている設定です。見てみます。

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /.noindex.html
</LocationMatch>

<Directory /usr/share/httpd/noindex>
    AllowOverride None
    Require all granted
</Directory>

Alias /.noindex.html /usr/share/httpd/noindex/index.html
Alias /noindex/css/bootstrap.min.css /usr/share/httpd/noindex/css/bootstrap.min.css
Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png
軽く読み解く
<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /.noindex.html
</LocationMatch>

【説明】
アクセスが「"^/+$"」にマッチしていたら、403ステータスで「/.noindex.html」を表示するという設定。
このLocationMatchの正規表現はIPアドレスのみを入力した場合も含まれるので、この設定が適用される。
ErrorDocument 403 /.noindex.html

& 

Alias /.noindex.html /usr/share/httpd/noindex/index.html

【説明】
「/.noindex.html」が表示される設定だが、「/.noindex.html」というのは、
このファイルであるというのを記述してあるのが、Aliasの設定。
つまり実質見えているのは、このファイル。「/usr/share/httpd/noindex/index.html」

IPアドレス直打ちに対する対処

IPアドレスの直打ちを拒否するということは、独自ドメインによるバーチャルホスト設定が入っているものとする。

【バーチャルホスト設定例】

<VirtualHost *:80>
  ServerName wordpress.example.com
  DocumentRoot /usr/local/apache/vhosts/wordpress.example.com/htdocs
  ErrorLog /usr/local/apache/vhosts/wordpress.example.com/logs/error_log
  CustomLog /usr/local/apache/vhosts/wordpress.example.com/logs/access_log combined
</VirtualHost>

<VirtualHost *:443>
  ServerName wordpress.example.com
  DocumentRoot /usr/local/apache/vhosts/wordpress.example.com/htdocs
  ErrorLog /usr/local/apache/vhosts/wordpress.example.com/logs/error_log
  CustomLog /usr/local/apache/vhosts/wordpress.example.com/logs/access_log combined
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/wordpress.example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/wordpress.example.com/privkey.pem
</VirtualHost>

<Directory "/usr/local/apache/vhosts/wordpress.example.com/htdocs">
  Require all granted
  AllowOverride All
</Directory>

この設定を有効にしつつ、IPアドレスによる直接のアクセスを拒否する場合は、以下のような設定を追加する。

<VirtualHost *:80>
    ServerName any
    <Location />
        Require all denied
    </Location>
</VirtualHost>

この設定をVirtualHostの設定の一番上に記載しておくと、ServerNameにかかれていないものには、これが適用され、拒否されることとなる。

一番上に書くということなので、httpd.confのconf.d読み込みの前に記述することにした。

...略...
<VirtualHost *:80>
    ServerName any
    <Location />
        Require all denied
    </Location>
</VirtualHost>

# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

SSLの場合にも、同様の設定入れる。

<VirtualHost *:443>
  ServerName any
  <Location />
    Require all denied
  </Location>
</VirtualHost>

これで、http(80)の場合もhttps(443)の場合も、IPアドレスによる直接のアクセスが不可能となった。

さいごに

apacheやnginxなどのWEBサーバーをインストールした後や、apache用にmod_sslをインストールした後に、デフォルトで入っている設定について、よく確認しないまま公開してしまって、変な設定が入ったままになっていることには気をつけたいところ。

意外とIPアドレス直打ちの対応を忘れていたりすることがあって、(自分だけか。。

突然意図しないページが表示された時に、「え!?」ってなることが稀にある。も、もちろん、最近はないんだからねっ!!