本文へ移動

IP Restriction ミドルウェア ​

IP Restriction ミドルウェアは、ユーザーの IP アドレスに基づいてリソースへのアクセスを制限します。

インポート ​

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 の第 1 引数に渡します。たとえば、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 表記
  • * - すべてのアドレス

エラー処理 ​

エラーをカスタマイズするには、第 3 引数で Response を返します。

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

MIT ライセンスで公開されています。