【ITニュース解説】Automating AWS WAF IP Threat list with ProxyCheck.io
2025年09月12日に「Dev.to」が公開したITニュース「Automating AWS WAF IP Threat list with ProxyCheck.io」について初心者にもわかりやすく解説しています。
ITニュース概要
AWS WAFへ、Cloudfrontログから検出した不審なIPアドレスをProxyCheck.ioで自動判定し、高リスクなものを自動的に追加する仕組みを解説する。S3、Lambda、Redisなどを連携させ、ウェブサイトへの攻撃を自動で防ぎセキュリティを強化する。
ITニュース解説
この文章では、ウェブサイトを悪意のあるアクセスから守るための自動化された仕組みについて解説する。具体的には、AWS(アマゾン ウェブ サービス)のセキュリティサービスと外部の脅威情報サービスを連携させ、疑わしいIPアドレスからの接続を自動的にブロックするシステムを構築する方法を説明する。システムエンジニアを目指す初心者にも理解しやすいように、一つ一つの技術要素とその役割を丁寧に見ていく。
まず、ウェブサイトやアプリケーションをインターネット上の脅威から守ることは非常に重要である。悪意のある第三者は、偵察(Reconnaissance)、サービス拒否攻撃(DoS)、情報窃取など、さまざまな目的で不正なアクセスを試みる。AWSにはWAF(Web Application Firewall)というサービスがあり、これを使うことでこれらの攻撃から保護できる。WAFは、ウェブトラフィックを監視し、定義されたルールに基づいて怪しい通信をブロックしたり、許可したりする役割を果たす。AWS自身も、一般的な悪評のあるIPアドレスや、偵察・DoS攻撃に使われるIPアドレスのリストを提供しているが、さらに詳細な脅威情報を使って独自の保護を強化することが今回の目的である。
この仕組みの中心となるのは、ProxyCheck.ioという外部サービスである。ProxyCheck.ioは、特定のIPアドレスがプロキシ経由のアクセスなのか、VPNを使っているのか、または過去に不正行為に使われた履歴があるかなど、そのIPアドレスのリスクスコアを評価してくれるサービスだ。このサービスを活用し、ウェブサイトへのアクセスログから得られたIPアドレスのリスクを自動でチェックし、リスクが高いと判断されたIPアドレスをAWS WAFに自動的に追加してブロックする。
この自動化されたシステムを構築するために、いくつかのAWSサービスと外部サービスが連携する。
まず、AWS Lambdaは、サーバーを意識することなくコードを実行できるコンピューティングサービスである。このシステムでは、IPアドレスのチェックやWAFの更新といった一連の処理を行うPythonスクリプトがLambda関数として動作する。 次に、AWS S3(Simple Storage Service)は、ファイルをインターネット上に保存するストレージサービスである。今回の場合、ウェブサイトのアクセスログから抽出された、チェックすべきIPアドレスのリストをCSVファイルとしてS3バケットにアップロードする。 AWS EventBridgeは、AWSサービスやアプリケーションからのイベント(出来事)を監視し、それに応じて他のサービスを起動するサービスである。S3バケットに新しいIPアドレスリストのCSVファイルがアップロードされると、EventBridgeがそれを検知し、Lambda関数を自動的に起動するトリガーとなる。 AWS Elasticache Valkeyは、高速なデータキャッシュサービスである。ProxyCheck.ioのような外部サービスにIPアドレスのリスクを問い合わせる際には、APIコールという通信が発生し、多くの場合、呼び出し回数に制限があったり、費用がかかったりする。そこで、一度問い合わせて判明したIPアドレスのリスクスコアをValkeyに一時的に保存しておき、同じIPアドレスが再度現れた場合にはキャッシュから情報を取得することで、ProxyCheck.ioへの無駄な問い合わせを減らし、処理を効率化する。 また、AWS IAM(Identity and Access Management)は、AWSの各サービスやユーザーがどのリソースにアクセスできるかを細かく制御するためのサービスである。Lambda関数がS3からファイルを読み込んだり、WAFのIPセットを更新したりするために必要な権限は、IAMによって付与される。 さらに、Telegramというメッセージングアプリのボットを利用して、IPアドレスのチェック結果やWAFへの更新状況、またはエラーが発生した場合に、リアルタイムで通知を受け取れるようにする。
これらのサービスを組み合わせた具体的な処理の流れは次のようになる。 まず、ウェブサイトのアクセスログから怪しいIPアドレスを抽出したCSVファイルをS3バケットにアップロードする。このCSVファイルは、IPアドレスが特定の列(例: 2列目)に記載されていることを想定している。S3へのアップロードをEventBridgeが検知すると、定義されたLambda関数が自動的に実行される。 Lambda関数が起動すると、PythonスクリプトがS3から最新のCSVファイルを読み込み、そこに含まれるIPアドレスのリストを取得する。このとき、リスト内のIPアドレスが重複しないように処理される。 次に、取得したIPアドレス一つ一つについて、ProxyCheck.ioに問い合わせてリスクスコアをチェックする。この際、効率化のためにElasticache Valkeyが活用される。もし過去に同じIPアドレスをチェックしたことがあり、その結果がValkeyにキャッシュされていれば、ProxyCheck.ioへの問い合わせはスキップされ、キャッシュされたリスクスコアが使われる。これにより、APIコールの回数が節約される。 ProxyCheck.ioからの応答、またはキャッシュから取得したリスクスコアが、一定の基準(例: スコア33以上)を超えている場合、そのIPアドレスは「リスクが高い」と判断される。 リスクが高いと判断されたIPアドレスは、AWS WAFのIPセットというブロックリストに自動的に追加される。IPアドレスは「192.168.1.1/32」のようなCIDR形式で追加され、これは特定のIPアドレスからのアクセスをブロックする設定となる。このIPセットは、ウェブサイトへのアクセスを受け付けるAWS CloudFrontディストリビューションのようなサービスと連携し、不正なアクセスを効果的に遮断する。 最後に、この一連の処理が完了すると、処理されたIPアドレスの総数、リスクが高いと判断されたIPアドレスの数、WAFに追加されたIPアドレスの数、そしてキャッシュの利用効率などの情報が、Telegramボットを通じて指定されたチャットに通知される。もし処理中にエラーが発生した場合も、Telegramに通知が送られるため、問題に素早く気づくことができる。
このような自動化された仕組みを構築することで、手作業でIPアドレスの脅威情報を確認し、WAFに設定する手間を省き、より迅速かつ継続的にウェブサイトのセキュリティを向上させることが可能となる。特に、ウェブアプリケーションへのアクセスを高速化し、セキュリティを強化する役割を持つCloudFrontのようなサービスを保護する際に、非常に効果的なアプローチだと言える。このシステムはIPv4アドレスの保護を目的としているが、同じ考え方でIPv6アドレスにも対応させることができる。