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