Ubuntu apache2で特定IPからのアクセスのみ許可する

こんにちは。今回はapache2.4で特定のIPアドレスからのアクセスのみ許可する設定を解説していきます。

環境

  • OS: Ubuntu
  • Apache 2.4

設定方法

IPアドレスの制限は特定のディレクトリやファイルに対して設定することができます。Directory、Filesディレクティブや、.htaccessファイルに記述します。今回はDirectoryディレクティブに設定する例を用いて解説したいと思います。

まずはIP制限をかける対象のフォルダを作成し、そのフォルダにindex.htmlファイルを作ります。/var/www/htmlにsampleフォルダを作成し、index.htmlファイルを作成しました。

<html>
    Hello World
<html>

sampleディレクトリに対してipアドレス制限をかけるためにapache2.confを編集します。/etc/apache2/apache2.confをエディタで開いて以下の通り編集しましょう。

<Directory /var/www/html/sample>
  Require ip 172.43.23.123   # 指定したIPアドレスのみアクセスを許可
</Directory>

上記の設定を記述すると/var/www/html/sampleディレクトリには172.43.23.123のIPからのみアクセスすることができるようになります。ブラウザで試しにアクセスしてみてください。他のIPから接続した場合は403 Forbiddenエラーとなります。制限するIPを変更して試してみましょう。

指定したIPのみ拒否する

指定したIPのみ拒否する方法も解説しておきます。設定するにはRequire not ipを使用します。

 <Directory /var/www/html/sample>
   <RequireAll>
     Require all granted
     Require not ip 172.23.208.2
   </RequireAll>
 </Directory>

上述の設定を行うと、172.23.208.2からのアクセスのみ遮断します。注意点がありますので説明します。否定の条件はRequireAllディレクティブの中に記述しなければなりません。Directoryディレクティブ直下に記述すると次のエラーとなります。

negative Require directive has no effect in <RequireAny> directive

これは何も記述しないとデフォルトで<RequireAny>ディレクティブが適用されるため発生しています。こちらは指定したIPのみ許可するディレクティブなので否定の条件は意味をなさないという意味になります。否定の条件を記述する際にはRequireAllディレクティブ配下に記述しましょう。

まとめ

今回はApache2.4でIP制限を設定する方法を解説しました。WebサイトのIP制限というとファイアウォールで遮断するのが一般的ですが、ディレクトリやファイル単位でIP制限する場合はApacheの機能に頼ることなります。サイト全体の設定はファイアウォールで設定し、細かな設定はApacheで設定するのが良いのではないかと思います。

Apache Http Server

Posted by kobainmac