AWS ELBでIPアドレスを拒否する


10

私は多かれ少なかれ、AWSの設定に従っています:

3台のマシンまたは3つの異なるアベイラビリティーゾーンを備えたElastic Load Balancer。私のセキュリティグループでは、Railsアプリケーション(nginx、unicorn)であるため、0.0.0.0 / 0:80を許可しています。

特定のパブリックIPアドレスへのアプリへのアクセスを拒否する方法があるかどうか疑問に思っていましたか?私はAWSのドキュメントを読んでいますが、SGは「すべて拒否」であるため、特定のIPアドレスを1つだけ拒否する方法はありません。

何か案は?ロードバランサーの背後にある3台のマシンのiptables?

ありがとう!

回答:


16

簡単な解決策は、VPCネットワークACL受信ルールを使用することです。これは、ELBがVPCにある場合にのみ機能しますが、過去数年間に作成した場合は、デフォルトのELBになるはずです。

たとえば1.2.3.4を禁止するには、次のようにします。

  1. AWSにログインします。
  2. に移動しVPCます。
  3. Network ACLs左側のメニューから選択してください。
  4. ELBがあるVPCに関連付けられているACLを選択します。
  5. Inbound Rulesタブを選択します。
  6. Edit次の属性を持つ新しいルールを選択して追加します。
    • ルール番号:50(ALLから許可するルールよりも小さい限り、任意の数)
    • タイプ:すべてのトラフィック
    • プロトコル:ALL
    • ポート範囲:ALL
    • 出典:1.2.3.4/32
    • 許可/拒否:拒否

ネットワークACLの詳細については、こちらをご覧ください:http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html


1

いいえ、セキュリティグループでIPをブロックするオプションはありません。

セキュリティグループは、本質的にブラックリストではなくホワイトリストです。

デフォルトではすべてが拒否されており、必要に応じて選択的にポートを開くことができますが、特定の人物/ IPをブロックすることはできません。

そのため、あなたが言ったように、3つの異なるマシンのIPtablesが最善のソリューションです。

今後、AWSセキュリティグループにもこの機能が搭載されると確信していますが、現時点ではサポートされていません。


1

少数のIPをブラックリストに登録するだけでよい場合は、おそらくWebサーバーでnginx_http_access_moduleを使用できます。


これの主な問題は、すべての構成がChefによって管理されるため、「自動」で実行する方法を理解する必要があることです。一部のIPアドレスをブロックするように一部のChef構成に指示するには、fail2banやdenyhostなどのものが必要です...
boris quiroz

1

そのため、あなたが言ったように、3つの異なるマシンのIPtablesが最善のソリューションです。

実際には、リモートIP($remote_addrNginx内)はAmazonのロードバランサーからのものになるため、これは良い解決策ではありません。これを禁止すると、転送されるすべてのトラフィックが禁止されます。

パケットを検査してHTTP X-Forwarded-Forヘッダーを見つける必要があります。IPtablesはそのようにプロトコルを認識しません。

私はNginxの2つのいたずらなIPに対する次の解決策で解決しました

set $client_ip $remote_addr;
if ($http_x_forwarded_for) {
  set $client_ip $http_x_forwarded_for;
}

if ($client_ip = "123.123.123.123") {
  return 403;
}

if ($client_ip = "123.123.123.234") {
  return 403;
}

変数の紹介。$client_ipこれは、http_x_forwarded_for利用できない場所でこれをローカルにテストするためでもあります。

少しオフトピックですが、便宜上投稿していますが、そのクライアントIPをアクセスログに追加しました。

log_format main "\$client_ip - \$remote_user [\$time_local] \"\$request\" \$status \$body_bytes_sent \"\$http_referer\" \"\$http_user_agent\"";
access_log /var/log/nginx.access.log main;

きれいではありませんが、お役に立てば幸いです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.