だいぶ前に設定した,Apache 2.4系のDoS攻撃対策の設定がうまく働いていなかったので,修正した.
Apacheは2.2系と2.4系で設定ファイルの書き方などが随分と変更されたばかりか,UbuntuなどのDebian系ではhttpd.confなどはない.ネット上の記事はCentOSでのものが多く,あまり参考にならなかった.
Apacheを完全理解しているわけではないが,うまくいった設定を残しておく.
トップ画像の出典はこちら.
Ubuntu Server 16.04.2 LTS
Apache HTTP Server 2.4.18 (Ubuntu)
過去の設定をログを元に復元してみた.
なんか,右往左往しているなぁ.
さらに,当時はapache2.confか000-default.confのどちらに書けばいいかわかっていなかった.
$ cd # apxs とか使うため? $ sudo apt‐get install apache2‐dev # mod_dosdetectorのインストール $ cd git $ git clone https://github.com/stanaka/mod_dosdetector.git $ cd mod_dosdetector/ # Makefile をUbuntu で動作するように修正 $ emacs Makefile # 7‐8 ⾏⽬を以下のように修正 # ここから # APXS=/usr/sbin/apxs # APACHECTL=apachectl APXS=/usr/bin/apxs2 APACHECTL=apache2ctl # ここまで $ sudo make install # Apache2 の設定 # mod_rewrite の有効化 $ sudo a2enmod rewrite # できない... $ service httpd restart # ないって⾔われた... $ service apache2 restart $ sudo a2enmod rewrite # でokだった. $ sudo /etc/init.d/apache2 restart $ cat /etc/apache2/mods-available/rewrite.load # ↓結果 LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so $ cd /etc/apache2/ $ sudo emacs apache2.conf # 最終行以降に以下を追記 # ここから# 使うならオンにしましょう DoSDetection on # DoS 攻撃判定をする為の計測時間 DoSPeriod 1 # DoSPeriod の間にDoS 攻撃の嫌疑をかけるアクセスカウント(ちなみにこれを突破したら変数SuspectDoS が1 になる) DoSThreshold 10 # DoSPeriod の間にDoS 攻撃と確定するアクセスカウント(変数SuspectHardDoSが1 になる) DoSHardThreshold 10 # DoS 攻撃認定されてから解除までの時間(秒) DoSBanPeriod 60 # このモジュールが⼀部使うメモリの名前?よく分からん DoSShmemName dosshm # 嫌疑をかけるIP の保存数 DoSTableSize 100 # X‐Forwarded‐For header をIP として扱うかどうかのチェック DoSForwarded on # 無視リスト。ここではjs とcss と画像全部 DoSIgnoreContentType (image/|text/css|text/javascript) # ここまで $ cd sites‐available/ $ sudo emacs 000‐default.conf # < VirtualHost *:80>に以下を追加 RewriteEngine On # for DoS attack RewriteCond %{ENV:SuspectDoS} .+ [OR] RewriteCond %{ENV:SuspectHardDoS} .+ # クラスA のローカルIP アドレス帯を全て除外 RewriteCond %{REMOTE_ADDR} !^(10¥.[0‐9]+¥.[0‐9]¥.[0‐9])$ # クラスB のローカルIP アドレス帯を全て除外 RewriteCond %{ REMOTE_ADDR} !^(172¥.(1[6‐9]|2[0‐9]|3[0‐ 1])¥.[0‐9]+¥.[0‐9]+)$ # クラスC のローカルIP アドレス帯を全て除外 RewriteCond %{REMOTE_ADDR} !^(192¥.168¥.[0‐9]+¥.[0‐9]+)$ # 対クローラー排除 RewriteCond %{HTTP_USER_AGENT} !(google|yahoo|msn|bing) [NC] RewriteRule .* ‐ [R=503,L] # ここまで $ sudo /etc/init.d/apache2 restart
「」の「」で陥ったように,この設定だと,除外しているはずのクローラーやLANからのアクセスもDoSと判定し,ブロックしてしまう.
えっと,結論がすごくアホらしかったです.
単に,RewriteCond
の{}
が全角になってただけでした....半角に直しましょう.
まあ,これを気に,rewriteについておさらいできたので良しとしましょうか....
たとえば,
RewriteCond
の[OR]
は,[AND]
よりも優先順位が高い,とか.
名前
Email (※公開されることはありません)
コメント