質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

1回答

4926閲覧

apache mod_dosdetectorが動かない

kei777

総合スコア13

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

1クリップ

投稿2016/10/21 07:34

apacheの設定でDos対策としてmod_dosdetectorを設定しましたがうまく動作しません
原因切り分けの方法についてご教授いただけますでしょうか。

環境:
Red Hat Enterprise Linux Server release 6.6 (Santiago)
Apache/2.4.12 (Red Hat)

httpd.confに以下設定を追加
#######################
DoSDetection on
DoSPeriod 10
DoSThreshold 20
DoSHardThreshold 20
DoSBanPeriod 30
DoSTableSize 3000
DoSIgnoreContentType image|javascript|css

LogLevel alert rewrite:trace8

RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .* - [R=503,L]
ErrorDocument 503 "Server is busy.(SuspectHardDoS)"

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
CustomLog "logs/dos_suspect_log" combined

RewriteCond %{ENV:SuspectDoS} =1
RewriteRule .* - [R=503,L]
ErrorDocument 503 "Server is busy.(SuspectDoS)"
##################################################

想定では、Topページ(ログインページ)に対して10秒間に20回以上のアクセスをされた場合、
閾値を超え"Server is busy"を表示させようとしていますが、思うように動作しません。
操作としてはIEでTopページを表示し、F5キー連打でアクセス数をあげようとしています。
原因切り分けの方法などありましたらよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Apache の 2.4.Xと理解して回答します。
まず本来のこのオプションの目的はDos攻撃に対してのサーバーの挙動制限です。
このオプションが出来る事をまず理解。

  1. クライアントのIPアドレス一覧を共有メモリに保持
  2. IPに紐付けてアクセス数やアクセス時間を記録
  3. 一定時間内のアクセス数が設定した閾値を超えたらSuspectDoSという環境変数に1をセットする

さて、このオプションを正常動作させるための設定は?
貴殿は"httpd.conf"の設定を示されています。
ではそのディレクティブに関しての設定を確認します。
本オプションでは
<DoSIgnoreIpRange>
を用いてDoS検査の対象から除外するIP範囲を指定。
これは複数行の記述が可能です。
まあ既知のつなぐべきマシンのIPを列挙。
続いて
<IncludePath/ExcludePath>
DoS検査を行う対象をrequest_uriで絞り込み。

  1. ExcludePath優先、ExcludePathにマッチしたらDoS検査を行わない。
  2. IncludePathを次に検査、IncludePathが1つも設定されていない場合はIncludePathに / が指定されているのと同じ動作をする。
  3. IncludePathが1つ以上ある場合は明示的にIncludePathに指定されたパスのみDoS検査の対象とします。

この設定は”OR”設定ですのでどれか条件が当てはまったら動作。

続いて
X-Forwarded-Forに複数IPを含む場合の処理を変更します。
X-Forwarded-Forヘッダの末尾からIP候補を探します。カンマ区切りで順に取得して、IPとして無効な文字列やDoSIgnoreIpRangeに含まれるIPを除外した最初(より末尾に近い)のIPをDoS検査対象とします。
これで X-Forwarded-Forヘッダを偽装されても正しくDoS検査を行うことができます。

DoSForwardedがOnでX-Forwarded-Forが存在しない場合の処理を変更。
DoSForwardedがONの場合は、X-Forwarded-Forが存在しなければDoS検査を行わないようになってます。

詳しくは”mod_dosdetector”の設定を確認して下さい。
ここら辺が怪しいと思いましたので。

投稿2016/10/21 16:48

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei777

2016/10/24 03:20

コメントありがとうございます。指摘いただきました、<DoSIgnoreIpRange><IncludePath/ExcludePath>ともに使っておりません。したがって全てのアクセスが検査対象となると認識しております。 検証のうごきからすると、Topページに対しては閾値設定が有効でない(きいてない)ように思えます。 一方Webサーバから他サーバへリクエストを投げているのですがそこは有効になっている(エラー画面503busyが表示される)ような動きです。 httpd.confを掲載します(一部変更しています)何か無効設定となってしまう箇所があるのでしょうか ServerRoot "/opt/rh/httpd24/root/etc/httpd" Listen 80 LoadModule dosdetector_module /opt/rh/httpd24/root/usr/lib64/httpd/modules/mod_dosdetector.so Include conf.modules.d/*.conf User apache Group apache ServerAdmin root@localhost ServerName 127.0.0.1 <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/opt/rh/httpd24/root/var/www/html" <Directory "/opt/rh/httpd24/root/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> <Directory "/opt/rh/httpd24/root/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error_log" LogLevel info <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module> Alias /○○○○/image /var/lib/tomcat6/webapps/○○○○/image Alias /○○○○/script /var/lib/tomcat6/webapps/○○○○/script Alias /○○○○/style /var/lib/tomcat6/webapps/○○○○/style Alias /image /var/lib/tomcat6/webapps/○○○○/image Alias /script /var/lib/tomcat6/webapps/○○○○/script Alias /style /var/lib/tomcat6/webapps/○○○○/style ScriptAlias /cgi-bin/ "/opt/rh/httpd24/root/var/www/cgi-bin/" </IfModule> <Directory "/opt/rh/httpd24/root/var/www/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <Directory "/var/lib/tomcat6/webapps/○○○○/image"> AllowOverride None Options None Require all granted </Directory> <Directory "/var/lib/tomcat6/webapps/○○○○/script"> AllowOverride None Options None Require all granted </Directory> <Directory "/var/lib/tomcat6/webapps/○○○○/style"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf <Files ~ "\.(css|js)$"> FileEtag None RequestHeader unset If-Modified-Since Header set Cache-Control no-store </Files> ProxyTimeout 1200 ProxyPass /iwfm/servlet/FMServlet http://192.168.XXX.XX:8080/iwfm/servlet/FMServlet max=20 smax=5 ProxyPassReverse /iwfm/servlet/FMServlet http://192.168.XXX.XX:8080/iwfm/servlet/FMServlet ProxyPass /test_print ajp://localhost:8009/test_print/ ProxyPass /○○○○/image ! ProxyPass /○○○○/script ! ProxyPass /○○○○/style ! ProxyPass /image ! ProxyPass /script ! ProxyPass /style ! ProxyPass /○○○○ ajp://localhost:8009/○○○○/ ProxyPassReverse /○○○○ ajp://localhost:8009/○○○○/ DoSDetection on DoSPeriod 10 DoSThreshold 20 DoSHardThreshold 20 DoSBanPeriod 30 DoSTableSize 3000 DoSIgnoreContentType ^(image/|application/|script/javascript|style/css) ############################################################################ LogLevel alert rewrite:trace8 RewriteEngine On RewriteCond %{ENV:SuspectHardDoS} =1 RewriteRule .* - [R=503,L] ErrorDocument 503 "Server is busy.(SuspectHardDoS)" LogFormat "%{SuspectHardDoS}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" dos_suspect CustomLog logs/dos_suspect_log dos_suspect env=SuspectDoS CustomLog logs/access_log combined env=!SuspectDoS RewriteCond %{ENV:SuspectDoS} =1 RewriteRule .* - [R=503,L] ErrorDocument 503 "Server is busy.(SuspectDoS)" #############################################################################
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問