IP 화이트리스트를 사용한 Golang 웹 애플리케이션 보안

IP 화이트리스트를 사용한 Golang 웹 애플리케이션 보안
당신과 같은 독자는 MUO를 지원하는 데 도움이 됩니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다. 자세히 알아보기

인터넷 기술의 현대 영역에서 사이버 공격의 빈도와 정교함이 계속 높아짐에 따라 웹 애플리케이션과 서버의 안전을 보장하는 것의 중요성은 아무리 강조해도 지나치지 않습니다. 이로 인해 웹 기반 시스템에 대한 강력한 첨단 보안 대책의 필요성도 대두되고 있습니다.





오늘의 메이크업 비디오 콘텐츠를 계속하려면 스크롤하세요.

IP 주소 화이트리스트는 웹 애플리케이션, 서버 및 API를 보호하기 위한 많은 최신 기술 중 하나입니다. 특정 경우에만 사용되지만 필요할 때 인터넷 리소스에 대한 액세스를 제한하는 데 권장되는 방법입니다.





IP 화이트리스트란 무엇입니까?

IP 화이트리스트는 단순히 화이트리스트 유형 네트워크 또는 리소스에 대한 액세스를 정의된 IP 주소 또는 시스템 액세스 권한이 있는 것으로 간주되는 IP 주소 범위로 제한하는 데 사용되는 웹 보안 조치라고 할 수 있습니다.





IP 화이트리스트가 시스템에 구현되면 화이트리스트에 추가된 IP 주소만 시스템 및 리소스에 액세스할 수 있으며 다른 IP 주소는 차단됩니다.

IP 화이트리스트는 개인 또는 지정된 사람들만 사용할 수 있고 해킹 시도로부터 보호되어야 하는 매우 중요한 데이터를 보호하는 매우 일반적인 방법입니다.



IP 화이트리스트의 일반적인 예는 MongoDB Atlas에 있습니다. 클라우드에서 Mongo 데이터베이스 클러스터 설정 데이터베이스 또는 클러스터에 대한 요청이 컴퓨터에서 올 때만 허용되도록 현재 IP 주소를 목록에 추가하라는 메시지가 표시됩니다.

언제 IP 화이트리스트를 구현해야 합니까?

IP 화이트리스트는 모든 시스템이나 애플리케이션에 필요한 것이 아닙니다. 응용 프로그램이나 시스템에서 구현하는 것이 권장되고 적절한 경우가 있습니다. 다음은 IP 화이트리스트 구현을 고려해야 하는 시나리오의 몇 가지 예입니다.





  • 응용 프로그램이 특정 회사의 직원 또는 고객과 같은 특정 사용자 그룹만 사용하도록 의도된 경우.
  • 특정 위치에서만 애플리케이션에 액세스할 수 있도록 하려면 해당 위치에만 해당하는 IP 주소 범위를 화이트리스트에 추가할 수 있습니다.
  • 응용 프로그램이 연구 데이터베이스 또는 독점 소프트웨어와 같은 기밀 정보 또는 지적 재산에 대한 액세스를 제공하는 데 사용되는 경우.
  • 애플리케이션이 비공개이지만 인터넷을 통해 액세스할 수 있고 DDoS 공격이나 맬웨어 감염과 같은 외부 위협으로부터 보호해야 하는 경우.
  • 애플리케이션이 퍼블릭 클라우드 플랫폼에서 호스팅되고 다른 테넌트 또는 플랫폼 사용자의 무단 액세스로부터 보호되어야 하는 경우.
  • 애플리케이션이 보안 표준 준수가 요구되는 의료 또는 금융과 같은 규제 산업에서 사용되는 경우.

더 많은 경우가 있지만 기본적으로 응용 프로그램에 위에서 언급한 속성이 있을 때마다 IP 화이트리스트 구현을 고려해야 합니다.

Go에서 IP 화이트리스트를 구현하는 방법

Go는 웹 서버 구축을 위한 인기 있는 최신 프로그래밍 언어입니다. 표준 및 보안 웹 애플리케이션을 구축하는 데 필요한 모든 것과 번들로 제공되는 API.





이 섹션에서는 미들웨어 기능인 샘플 서버 및 IP 화이트리스트 논리를 구현하기 위해 Go의 Gin 프레임워크를 사용하는 방법을 보여줍니다. 다음 명령을 실행하여 프로젝트에 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 화이트리스트가 작동하는 방식을 확인할 수 있습니다. 다음 코드는 화이트리스트를 정의하고 두 개의 엔드포인트(제한된 것과 제한되지 않은 것)를 구현하는 프로그램입니다.

 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 미들웨어가 작동하는 방식을 확인하기 위한 엔드포인트. 화이트리스트에서 localhost IP 값을 토글할 수도 있습니다. 진실 그리고 거짓 .

다음은 IP 주소가 화이트리스트에 포함되지 않았거나 화이트리스트의 값이 다음으로 설정된 경우를 보여주는 샘플 요청입니다. 거짓 :

  IP 주소가 화이트리스트에 없는 경우 테스트 요청

다음은 IP 주소가 IP 화이트리스트에 값이 설정된 경우에 대한 또 다른 요청입니다. 진실 :

설치된 프로그램을 다른 드라이브로 이동하는 방법
  IP 주소가 허용 목록에 있는 경우에 대한 테스트 요청