Apacheサーバーでウェブサイトへのアクセスを許可または拒否する方法
Apacheは、世界で最も広く使用されているウェブサーバーの一つであり、ウェブサイトをホストするための堅牢で柔軟なプラットフォームを提供します。
ウェブサイトを管理する際、特定のリソースやウェブサイト全体へのアクセスを制御する必要があるかもしれません。例えば、特定のIPアドレスをブロックしたり、特定の地域やネットワークからのみアクセスを許可したりすることがあります。Apacheはアクセス制御と呼ばれる機能を使用することで、これを可能にします。
このガイドでは、シンプルで人間が読める設定を使用して、Apacheでウェブサイトへのアクセスを許可または拒否する手順を説明します。
Apacheアクセス制御の基本
Apacheはアクセス制御のために2つの主要なディレクティブを使用します:
Require: これは特定のユーザー、IPアドレス、またはグループへのアクセスを許可するために使用されます。DenyとAllow(後のバージョンで非推奨): 以前のApacheの古いバージョンで使用されていたが、Requireディレクティブに置き換えられた。
新しいバージョンのApache(2.4以降)では、Requireディレクティブがアクセス制御を管理するための主要な方法です。
ステップ1:Apache設定ファイルを編集する
Apacheの設定ファイルは、システムによって異なる場所にあります。
例えば:
- Ubuntu/Debian:
/etc/apache2/apache2.confまたは仮想ホストファイルの中(例:/etc/apache2/sites-available/your-site.conf)。 - CentOS/RHEL:
/etc/httpd/conf/httpd.confまたは仮想ホストファイル (例:/etc/httpd/conf.d/your-site.conf).
nanoやviのようなテキストエディタを使用して、これらのファイルを編集してください。
ステップ2: Requireディレクティブを使用してアクセス制御を設定する
このRequireディレクティブは、誰がアクセスを許可されているか、または拒否されているかを指定します。アクセスを許可する例と拒否する例を見てみましょう。
例1: 特定のIPアドレスからのアクセスを拒否する
特定のIPアドレスからのアクセスを拒否するには、Require notディレクティブを使用してください。
例えば、IP 192.168.1.100 をブロックするためには:
<Directory /var/www/html>
Require all granted
Require not ip 192.168.1.100
</Directory>
この場合は:
全て許可する: すべてのIPアドレスへのアクセスを許可します。Require not ip 192.168.1.100: 指定されたIPアドレスへのアクセスを拒否します。
例2: 特定のIPアドレスのみにアクセスを許可する
特定のIPまたはIPレンジのみへのアクセスを許可したい場合は、次のようにします:
<Directory /var/www/html>
Require ip 192.168.1.0/24
</Directory>
ここで、Require ip 192.168.1.0/24は、192.168.1.0から192.168.1.255までの範囲内のIPのみアクセスを許可します(一般的なローカルネットワークの範囲です)。
例3: 特定のIPを除いて全てのアクセスを拒否する
特定のIPまたはIPのグループを除いて、すべての人のアクセスを拒否したい場合があります。
<Directory /var/www/html>
Require all denied
Require ip 192.168.1.10
</Directory>
この場合:
すべて拒否: 誰にもアクセスをブロックします。Require ip 192.168.1.10: 192.168.1.10のIPアドレスのみアクセスを許可します。
例4: ホスト名によるアクセス制限
ホスト名に基づいてアクセスを制限することもできます。たとえば、特定のドメイン(example.comのような)からのユーザーのみのアクセスを許可したい場合、次のように使用できます:
<Directory /var/www/html>
Require host example.com
</Directory>
これにより、example.comからの訪問者のみがウェブサイトにアクセスできるようになります。
ステップ3:Apacheで国全体をブロックする
特定の国からのトラフィックをブロックするには、訪問者のIPアドレスに基づいて国を特定するGeoIPデータベースを使用するmod_maxminddbという追加モジュールをインストールする必要があります。
Linuxにmod_maxminddbをインストールする
mod_maxminddbモジュールを使用するには、インストールして設定する必要があります。
Ubuntu/Debianでは、次のコマンドを実行します:
sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
CentOS/RHELでは、次のコマンドを実行します:
sudo yum install epel-release
sudo yum install libmaxminddb libmaxminddb-devel mmdb-bin httpd-devel
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
MaxMind GeoIP データベースをダウンロードする
MaxMindは、IPアドレスに基づいて国を特定するために使用できる無料のGeoLite2データベースを提供しています。
tar -xvzf GeoLite2-Country.tar.gz
sudo mkdir -p /usr/share/GeoIP
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/
mod_maxminddbを使用するようにApacheを設定する
さて、Apacheにmod_maxminddbモジュールとGeoIPデータベースを使用するように指示する必要があります。
sudo nano /etc/apache2/apache2.conf # On Ubuntu/Debian
sudo nano /etc/httpd/conf/httpd.conf # On CentOS/RHEL
mod_maxminddbを有効にし、GeoIPデータベースのパスを指定するには、次の設定を追加してください:
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>
国に基づくアクセス制御を追加する
モジュールが設定されたので、訪問者の国に基づいてアクセスをブロックまたは許可するために使用できます。たとえば、中国 (CN) と ロシア (RU) のユーザーからのアクセスをブロックするには、Apacheの仮想ホストファイルに次の設定を使用します:
<Directory /var/www/html>
SetEnvIf MM_COUNTRY_CODE CN BlockCountry
SetEnvIf MM_COUNTRY_CODE RU BlockCountry
Require all granted
Require not env BlockCountry
</Directory>
新しい設定を追加した後、変更を適用するためにApacheを再起動してください。
sudo systemctl restart apache2 # On Ubuntu/Debian
sudo systemctl restart httpd # On CentOS/RHEL
モジュールが正しくインストールされていることを確認するために、Apacheでmod_maxminddbが読み込まれているかチェックできます:
apachectl -M | grep maxminddb
正しく読み込まれていれば、以下のような出力が表示されるはずです:
maxminddb_module (shared)
結論
ウェブサイトへのアクセスを制御することは、ウェブサーバーのセキュリティと機能を管理する上で重要な側面です。Apacheのアクセス制御機能を使えば、IPアドレス、ホスト名、あるいは地理的位置に基づいてアクセスを許可または拒否できます。
ボットをブロックする場合でも、内部リソースを制限する場合でも、またはウェブサイトを無断のユーザーから保護する場合でも、Apacheはこれらの制御をシンプルかつ効果的に実装することを可能にします。