概要
自分のサーバのアクセスログを見たら
"GET /picture.php?/6797/category/73 HTTP/1.1" 200 14394 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
と、クローラーが大量にアクセスしてきました。robots.txtも意に介さない悪名高いbotのようなので、このアクセスを、サーバで拒否します。
環境
- Ubuntu 20.04
- Apache 2.4 (aptでインストールしたため、ディレクトリは
/etc/apache2
配下にあります。
また、バーチャルサイトによる複数のサイトを運用しているので、そのうちの1つだけを弾きます。
さっくりとした手順
- Apacheのバーチャルサイトの設定ファイルのバックアップを取ります。
- 設定ファイルを追記します。
- 設定を反映します。
- 拒否されていることを確認します。
設定ファイルのバックアップ
- ディレクトリ移動
cd /etc/apache2/sites-available && pwd
- ファイルバックアップ
sudo cp -pi hoge.conf /path/to/backup/directory/hoge.conf.$(date +%Y%m%d)
設定を行いたい自分の設定ファイルを、任意のバックアップディレクトリにバックアップします。
- バックアップ確認
diff -u /path/to/backup/directory/hoge.conf.$(date +%Y%m%d) hoge.conf
差分が無ければ(エラーがなければ)バックアップは成功です。
設定ファイル追記
上述した設定ファイルを教義・進行に則ったエディタで編集します。(要管理者権限)
- 追記例
DocumentRoot /var/www/html/hoge
<Directory /var/www/html/hoge>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
## GoogleBOTを拒否(正常bot不正bot両方拒否)
SetEnvIfNoCase User-Agent "Googlebot" bot
## Facebookのクローラーを拒否
SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
<RequireAll>
Require all granted
Require not env bot
Require not env fb_bot
</RequireAll>
/var/www/html/hoge
は自分の環境に合わせます。
※ついでにGoogleBOTも拒否します。
- 差分確認
diff -u /path/to/backup/directory/hoge.conf.$(date +%Y%m%d) hoge.conf
- 差分例
- Require all granted
+ ## GoogleBOTを拒否(正常bot不正bot両方拒否)
+ SetEnvIfNoCase User-Agent "Googlebot" bot
+ ## Facebookのクローラーを拒否
+ SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
+ <RequireAll>
+ Require all granted
+ Require not env bot
+ Require not env fb_bot
+ </RequireAll>
設定反映
- 構文確認
sudo apache2ctl configtest
Syntax OK
を確認します。
- Apache再起動
sudo systemctl restart apache2.service
- Apache再起動確認
systemctl status apache2.service
active(running)
を確認します。
設定反映確認
設定を行ったアクセスログを開きます。
403 3772 "-" "facebookexternalhit/1.1
のように、ステータスコードが「403」になっていれば、アクセス拒否されています。