Web Pencil

ELBを使用したWEBサーバで特定のIPをブロックする

ELBを使用したWEBサーバで、海外などからある特定のIPで攻撃が来ている場合、ブロックする方法の紹介です。

海外などから、SQLインジェクションやクロスサイトスクリプティングなどの攻撃が見られた場合、
特定のIPであったならば、ブロックしてしまおうというものです。

サーバ構成

間違った対応

あるサーバ会社にて、対応していたところ、iptablesで特定IPをブロックする設定をしていました。
これでは、ELBのIPでアクセスが来るため、ブロックできていなかった。

解決方法

ELB経由でアクセスが来るので、対象のIPはiptablesで制限できません。
AWSのNetworkACLでブロックするか、Apacheの設定で、アクセス制限させます。

Apacheの設定例

特定IP「111.111.111.111」と「222.222.222.222」をブロックします。ブラックリスト設定ですね。
httpヘッダーのX-Forwarded-Forで、元のIPを判定し、制限するようにします。

SetEnvIf X-Forwarded-For "111\.111\.111\.111|222\.222\.222\.222" deny_ip
Order Allow,Deny
Allow from all
Deny from env=deny_ip

Apache2.2系で、以下を設定しているならば、もっと簡単に管理できます。

mod_extract_forwardedをインストール
yum --enablerepo=epel install mod_extract_forwarded -y
vim /etc/httpd/conf.d/mod_extract_forwarded.conf

mod_extract_forwarded.confの内容

LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
MEForder refuse,accept
MEFrefuse all
MEFaccept all
Apache設定変更

VirtualHost内に以下を設定

Include conf/http_acl_list

アクセス拒否リストファイルhttp_acl_listを作成

vim /etc/httpd/conf/http_acl_list
http_acl_listの内容

CIDRでの指定も可能です。

## IP Black List
Order Deny,Allow
Deny from 111.111.111.111
Deny from 222.222.222.222/24
       :
       :
記述チェック・反映
/etc/init.d/httpd configtest
/etc/init.d/httpd graceful