Node.jsでIP制限(IPブロック)の実装手順

Node.jsでサービスをリリースしていて…

  • 特定IPからの大量アクセス
  • 特定IPによるスクレイピング

そういうIPを制限・ブロックしたい

そんな場面がありました。

やり方はとても簡単だったので、
Node.jsでIP制限(IPブロック)手順を紹介です。

0.本当に制限すべきIPか調べる

これはやらなくてもいい作業ですが…

つぎの事故を防ぐために必要です。

  • 検索クローラーをブロックしてしまった
  • 無害なIPなのにブロックしてしまった

だから本当に有害なIPかを調べます。

簡単なのは次のツールを使うことです。

▼ Amazon Data Services NoVa | AbuselIPDB

URL : https://www.abuseipdb.com/check/

▼ IPを入力すると検索結果が表示される

AbuselIPDB - IPを入力すると検索結果が表示される

上記のように危険度が一目で分かります。

この画像だと「This IP was reported 855 times」と表示されてるので、ほぼ間違いなくスクレイパーだったりスパムを行ってるIPです。

IP制限するときの判断基準として使えます。

1.express-ipfilterをインストール

ここからが本当の実装手順です。

以下のモジュールをインストールします。

▼ npmからexpress-ipfilterをインスト

https://www.npmjs.com/package/express-ipfilter

その名の通り、express環境でIP制限できます。

次のような機能を持つモジュールです。

  • 特定IPを1つ1つブロック
  • 指定範囲のIPをまとめてブロック

使ってみると本当に便利でした。

2.特定IPを制限/ブロックするコード例

ということで実際にコードを書いてみます。

試しに以下のウザいIPをブロックしました。

  • 3.224.220.101
  • 23.22.35.162
  • 52.70.240.171

▼ 特定IPを1つ1つブロックするコード例

何をしてるかは説明するまでもなく単純です。

一応説明すると ipfilter  に対してブロックしたいIP配列を渡すだけです。あとログを取りたりならオプションに {log: true}  を設定してください。

範囲指定でまとめてIP制限するには

ちなみに範囲指定でIP制限もできます。

▼ 例を出すならこういう感じ

上記のようなワイルドカードが使用可能

もし1文字以上の任意にマッチさせたいならアスタリスク(*) 、任意の文字数にマッチさせたいならクエスチョン(?)をその回数分だけ使用します。

あとは好きなように設定してください。

IP制限できているかを確認する

本当にIP制限できてるのか不安なので…

試しに自分自身をIPブロックしてみました。

▼ しっかりとIPブロックできていた

しっかりとIPブロックできていた

これでIP制限設定は完了です。

有害IPの締め出しに成功しました。

Node.jsの最適化の関連記事

IPブロックに関連する内容を最後に紹介します。

主にNode.jsの最適化についての関連記事です。

▼ レスポンスでgzip圧縮を有効化…転送量削減の手順

▼ メモリキャッシュ導入で高速化…一番優秀なモジュール

もしかしたら何かの参考になるかも。

以上、Node.jsでIPブロックでした。ではまた