tsurutanのつぶやき

備忘録としてつぶやきます

HerokuでIP制限

HerokuにてRailsアプリケーションを公開したは良いのですが、海外からのアクセスが多すぎてdynoが耐えきれず response timeout が大量発生してしまいました。 そこで今回はdynoに負荷をかけずに海外からのアクセス制限をした方法について書きます。

はじめに

HerokuではWebサーバーなどの設定が細かくできないため、プロジェクト内に設定ファイルを書いてIP制限を行うということができません。 またRailsアプリで

github.com

などのgemを使うことで、IP制限を行うことができるのですがdynoへの負荷やアプリのパフォーマンス低下(上記だとRack::Attack.callが大量に呼ばれる)へと繋がるため、あまり良い選択ではないと思いました。 理想は許可したIPのみdynoへアクセスさせたいので、ネットワークでうまくできないかと調べたところCloudFlareを使えばうまくできそうだということがわかりました。

以下CloudFlareでの設定方法を説明します

CloudFlare

まずはCloudFlareで会員登録

f:id:tsurutan:20181106143528p:plain

次に登録したいサイトを入力します

f:id:tsurutan:20181106143537p:plain

60秒ほど待つとCNAMEのvalueが解析されるのでContinueを押します

f:id:tsurutan:20181106143607p:plain

そしてCloudFlareのネームサーバーの値が表示されるので、これを使用しているドメインに設定します。

f:id:tsurutan:20181106143616p:plain

ちなみにお名前ドットコムでは下記を編集します。

f:id:tsurutan:20181106144909p:plain

f:id:tsurutan:20181106144940p:plain

f:id:tsurutan:20181106145049p:plain

だいたい登録して1,2hで反映されましたが長いときには1日かかるときもあるそうです。

CloudFlareでのIP制限

CloudFlareでIP制限を行うためにはFirewallの設定を行います。 CloudFlare Firewallでは

  • Cookie
  • AS Num
  • Country
  • Host Name
  • IP Adress
  • Referer
  • Request Method etc

などのフィールドを元に制限ができ非常に便利です。 今回は日本以外のアクセスを制限したかったため下記のように書きました。

f:id:tsurutan:20181106144334p:plain

普通国外を制限する場合は日本のIPアドレスすべて書き込む必要があるのですが、CloudFlareではたったこれだけで制限ができるので非常に便利ですね。

また国外にてどう表示されているかを確認する際は下記のchrome拡張を使うとスムーズに確認できます。

www.betternet.co

実際にサイトを見てみると

f:id:tsurutan:20181106145345p:plain

正常に制限されていることがわかりますね。

CloudFlareは今までCDNなどに用いるイメージがありましたが、無料で且つ簡単にIP制限ができるなんて素晴らしいサービスですね!

現場で使える Ruby on Rails 5速習実践ガイド(特典PDF付き)

現場で使える Ruby on Rails 5速習実践ガイド(特典PDF付き)

  • 作者: 大場寧子,松本拓也,櫻井達生,小田井優,大塚隆弘,依光奏江,銭神裕宜,小芝美由紀
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2018/10/19
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)