IP ホワイトリストを使用した Golang Web アプリケーションの保護

IP ホワイトリストを使用した Golang Web アプリケーションの保護
あなたのような読者が MUO をサポートします。当社サイトのリンクを使用して商品を購入すると、アフィリエイト手数料が発生する場合があります。 続きを読む。

現代のインターネット技術の領域では、サイバー攻撃の頻度と巧妙さが高まり続けているため、Web アプリケーションとサーバーの安全性を確保することの重要性はどれだけ強調してもしすぎることはありません。このため、Webベースのシステムに対する堅牢かつ最先端のセキュリティ対策の必要性も高まっています。





パッケージを入手しなかったことをAmazonに伝える方法
その日のメイクアップビデオ スクロールしてコンテンツを続けてください

IP アドレスのホワイトリスト登録は、Web アプリケーション、サーバー、API を保護するための多くの最新技術の 1 つです。これは一部の特定のケースでのみ使用されますが、必要な場合にインターネット上のリソースへのアクセスを確実に制限するには推奨される方法です。





IP ホワイトリストとは何ですか?

IP ホワイトリストは単に ホワイトリストの種類 これは、ネットワークまたはリソースへのアクセスを、システムへのアクセスが許可されているとみなされる定義済みの IP アドレスまたは IP アドレスの範囲に制限するために使用される Web セキュリティ対策と呼ばれます。





IP ホワイトリストがシステムに実装されている場合、ホワイトリストに追加された IP アドレスのみがシステムおよびその上のリソースにアクセスでき、他の IP アドレスはブロックされます。

IP ホワイトリストは、個人または特定の人々のみが利用できるようにし、あらゆるハッキングの試みから保護されるべき非常に重要なデータを保護するための非常に一般的な方法です。



IP ホワイトリストの一般的な例は MongoDB Atlas にあります。 クラウドでMongoデータベースクラスターをセットアップする また、データベースまたはクラスターへのリクエストがコンピューターから送信された場合にのみ許可されるように、現在の IP アドレスをリストに追加するように求められます。

IP ホワイトリストをいつ実装する必要がありますか?

IP ホワイトリストは、すべてのシステムやアプリケーションに必要なものではありません。アプリケーションやシステムに実装することが推奨され、適切な場合があります。以下に、IP ホワイトリストの実装を検討する必要があるシナリオの例をいくつか示します。





  • アプリケーションが、特定の会社の従業員や顧客など、特定のユーザー グループによる使用のみを目的としている場合。
  • 特定の場所からのみアプリケーションにアクセスできるようにする場合は、その場所にのみ固有の IP アドレスの範囲をホワイトリストに登録できます。
  • 研究データベースや独自ソフトウェアなどの機密情報や知的財産へのアクセスを提供するためにアプリケーションが使用される場合。
  • アプリケーションがプライベートであるが、インターネット経由でアクセス可能であり、DDoS 攻撃やマルウェア感染などの外部の脅威から保護する必要がある場合。
  • アプリケーションがパブリック クラウド プラットフォームでホストされており、プラットフォームの他のテナントやユーザーによる不正アクセスから保護する必要がある場合。
  • セキュリティ標準への準拠が必要な医療や金融などの規制された業界でアプリケーションが使用される場合。

他にも多くのケースがありますが、基本的に、アプリケーションに上記のいずれかのプロパティがある場合は、IP ホワイトリストの実装を検討する必要があります。

Go で IP ホワイトリストを実装する方法

Go は、Web サーバーを構築するための人気のある最新のプログラミング言語です。 標準的で安全な Web アプリケーションを構築するために必要なものがすべてバンドルされた API。





MacでWindowsソフトウェアを実行する方法

このセクションでは、Go の Gin フレームワークを使用して、サンプル サーバーとミドルウェア機能である IP ホワイトリスト ロジックを実装する方法を示します。次のコマンドを実行して、Gin フレームワークをプロジェクトにインストールできます。

 go get github.com/gin-gonic/gin 

Gin フレームワークをインストールしたら、IP ホワイトリスト ミドルウェアの実装に進むことができます。プロジェクトのアーキテクチャに応じて、プロジェクト内のどこにでも新しいミドルウェア ファイルを作成できます。ミドルウェア機能の実装は次のとおりです。

 package middlewares 

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func IPWhiteListMiddleware(whitelist map[string]bool) gin.HandlerFunc {
    return func(c *gin.Context) {
        userIP := c.ClientIP()

        if !whitelist[userIP] {
            c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
                "error": "You are not authorized to access this resource!",
            })
        } else {
            c.Next()
        }
    }
}

上記のコードでは、 IPWhiteListミドルウェア 関数は、定義された IP アドレス ホワイトリストを引数として受け入れるように定義されています。ホワイトリストはマップ データ構造として実装されているため、IP アドレスに次の値を簡単に割り当てることができます。 真実 間違い アクセシビリティを示すために。

次に、この関数は、Gin フレームワークの クライアントIP リクエストを行おうとしているユーザーの現在の IP アドレスを取得する関数。それがホワイトリストに存在するかどうかをチェックします。 真実 価値。見つからない場合、または値が見つかった場合は、 間違い の場合、ミドルウェアはリクエストを中止し、403 エラー (禁止) を返します。

この機能をテストするサンプル エンドポイントを実装して、IP ホワイトリストがどのように機能するかを確認できます。次のコードは、ホワイトリストを定義し、2 つのエンドポイント (制限付きエンドポイントと制限なしエンドポイント) を実装するプログラムです。

iphone 12proの最大サイズの比較
 package main 

import (
    "github.com/gin-gonic/gin"
    "go-ip-whitelist/middlewares"
    "net/http"
)

var IPWhitelist = map[string]bool{
    "127.0.0.1": true,
    "111.2.3.4": true,
    "::1": true,
}

func main() {
    router := gin.Default()

    router.GET("/index", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Welcome to my secure application!",
        })
    })

    restrictedPage := router.Group("/")
    restrictedPage.Use(middlewares.IPWhiteListMiddleware(IPWhitelist))

    restrictedPage.GET("/adminZone", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "This endpoint is secured with IP whitelisting!",
        })
    })

    router.Run(":3333")
}

アプリケーションを実行するとき main.go を実行します 、サーバーはポート 3333 で起動し、 /adminZone エンドポイントを参照して、ミドルウェアがどのように動作するかを確認します。ホワイトリスト内のローカルホスト IP の値を次の間で切り替えることもできます。 真実 間違い

IP アドレスがホワイトリストに登録されていない場合、またはホワイトリストの値が に設定されている場合を表示するリクエストのサンプルを次に示します。 間違い :

  IPアドレスがホワイトリストに登録されていない場合のテストリクエスト

IP アドレスが IP ホワイトリストに存在し、その値が に設定されている場合の別のリクエストを次に示します。 真実 :

  IP アドレスがホワイトリストに登録されている場合のテスト リクエスト