ApacheでIPアドレスによってアクセス制限する方法(特定IPからの許可と拒否)
目次
スポンサードリンク
ApacheはオープンソースのWebサーバソフトウェアです。この記事では、WebサイトにアクセスしてきたユーザーのIPアドレスを条件にアクセスを制限する方法を紹介します。
特定のIPアドレスからのみアクセスを許可したり、逆に特定のIPアドレスからのアクセスを拒否したりすることができます。社内ネットワークからのみアクセスを許可したり、特定の国のIPアドレスからのアクセスを制限する、特定のIPアドレスからの攻撃を防止するなどの利用シーンがあります。
特定のIPアドレスからのアクセスを許可する方法
下記例では、Require ディレクティブで設定したIPアドレスに対し、/var/www/html 配下へのアクセスを許可しています。
最初に、Require all denied が記述されています。 このディレクティブは、そのディレクトリに対する全てのリクエストが拒否されることを意味します。後続の条件は、このデフォルトの拒否設定の例外を設定するためのものです。後続の条件として、RequireAny ディレクティブで囲まれた Require ディレクティブが続きます。Require ディレクティブを RequireAny で囲んでいるので、どちらかの IPアドレスにマッチした場合には、アクセスが許可されます。
<Directory "/var/www/html">
Require all denied
<RequireAny>
Require ip 192.168.1.100
Require ip 10.0.0.1
</RequireAny>
</Directory>
特定のIPアドレスからのアクセスを拒否する方法
下記例では、IPアドレスが 192.168.0.1 のユーザーはサイトにアクセスできなくなります。
RequireAll ディレクティブは、全ての条件を満たす場合にのみアクセスを許可します。つまり、この例では、全てのユーザーがアクセスを許可され、かつIPアドレスが192.168.0.1でないという条件を満たすユーザーしかアクセスできません。これは、事実上、192.168.0.1からのアクセスを禁止することになります。
<Directory "/var/www/html">
<RequireAll>
Require all granted
Require ip !192.168.0.1
</RequireAll>
<Directory "/var/www/html">
設定を記述する場所
Require ディレクティブによるアクセス制御の設定は、Apacheの設定ファイルか .htaccess に記述することができます。
.htaccess による設定は、.htaccess 自体が置かれるディレクトリとその下の全てのサブディレクトリに設定が適用されます。.htaccess での設定は非常に柔軟なアクセス制御が可能である点が特徴です。
設定を反映する際、設定ファイルに記述した場合はApacheの再起動が必要です。.htaccessの場合は、多くの場合、即座に反映されますが、サーバーの設定やキャッシュの状態によって、反映に時間がかかる場合があります。反映されない場合は、ブラウザのキャッシュクリアやサーバーの再起動を試します。
まとめ
特定のIPアドレスからのアクセスを許可する方法(ホワイトリスト方式)と特定のIPアドレスからのアクセスを拒否する方法(ブラックリスト方式)について紹介しました。
IPアドレスによるアクセス制限は、セキュリティ対策の一つとして役に立つテクニックです。ただし、IPアドレスを偽装されるなどの攻撃に対しては効果がない場合があるため、万能ではありません。その点は認識しながら活用してみてください。
Linuxの基礎からセキュリティまで、サーバー運用に必要な知識をまとめた書籍
Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)