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)
}
)
)