Skip to content

IP 제한 미들웨어

IP 제한 미들웨어는 사용자의 IP 주소를 기반으로 리소스 접근을 제한하는 미들웨어이다.

Import

ts
import { Hono } from 'hono'
import { ipRestriction } from 'hono/ip-restriction'

사용 방법

Bun에서 실행 중인 애플리케이션에 대해 로컬에서만 접근을 허용하려면 다음과 같이 작성한다. denyList에는 거부할 규칙을, allowList에는 허용할 규칙을 지정한다.

ts
import { Hono } from 'hono'
import { getConnInfo } from 'hono/bun'
import { ipRestriction } from 'hono/ip-restriction'

const app = new Hono()

app.use(
  '*',
  ipRestriction(getConnInfo, {
    denyList: [],
    allowList: ['127.0.0.1', '::1'],
  })
)

app.get('/', (c) => c.text('Hello Hono!'))

환경에 맞는 ConnInfo 헬퍼에서 getConnInfo를 가져와 ipRestriction의 첫 번째 인자로 전달한다. 예를 들어 Deno의 경우 다음과 같이 작성한다.

ts
import { getConnInfo } from 'hono/deno'
import { ipRestriction } from 'hono/ip-restriction'

//...

app.use(
  '*',
  ipRestriction(getConnInfo, {
    // ...
  })
)

규칙 작성 가이드

아래 지침에 따라 규칙을 작성한다.

IPv4

  • 192.168.2.0 - 고정 IP 주소
  • 192.168.2.0/24 - CIDR 표기법
  • * - 모든 주소

IPv6

  • ::1 - 고정 IP 주소
  • ::1/10 - CIDR 표기법
  • * - 모든 주소

에러 처리

에러를 커스텀하려면 세 번째 인자로 Response를 반환한다.

ts
app.use(
  '*',
  ipRestriction(
    getConnInfo,
    {
      denyList: ['192.168.2.0/24'],
    },
    async (remote, c) => {
      return c.text(`Blocking access from ${remote.addr}`, 403)
    }
  )
)

Released under the MIT License.