質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

86閲覧

rack-attackの導入について

Java_student

総合スコア85

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/12/31 09:27

実現したいこと

railsで作成したサービスのセキュリティをさらに上げるためにrack-attackのgemを導入しました。
管理者ページを自身のIPアドレスのみしか閲覧できないように試しに行うためにまずは、適当な数字を打ち込んだIPアドレスから閲覧規制が掛かるかを試したのですが、普通に閲覧できました。
そもそも規制が掛かった際にどのような状態になるのか分からないので、教えて頂きたいです。

前提

・rack-attack gemはインストール済み
・initializers/rack_attack.rbを作成済み

発生している問題・エラーメッセージ

規制が掛からない

該当のソースコード

application.rb

1class Application < Rails::Application 2 config.middleware.use Rack::Attack 3end

development.rb

1config.middleware.use Rack::Attack

initializers/rack_attack.rb

1class Rack::Attack 2 OFFICE_IP_ADDRESS ='xxx.xxx.xxx.xxx' #IPアドレス 3 4 blocklist('only allow from office') do |req| 5 req.path.match(%r{^/admin}) && (OFFICE_IP_ADDRESS != req.ip) #/adminのところは任意のページのURLに変えてください。 6 end 7 8 # 同一IPアドレスからのリクエストを5回/秒に制限 9 Rack::Attack.throttle('req/ip', limit: 5, period: 1.second) do |req| 10 req.ip 11 end 12 13 # 同一IPアドレスからのリクエストを100回/分に制限 14 Rack::Attack.throttle('req/ip', :limit => 100, :period => 1.minutes) do |req| 15 req.ip 16 end 17 18 # 1.2.3.4からのアクセスを拒否する 19 Rack::Attack.blocklist('block xxx.xxx.xxx.xxx') do |req| 20 'xxx.xxx.xxx.xxx' == req.ip 21 end 22 23 # BadUAが含まれたUserAgentからのログイン画面アクセスを拒否する 24 Rack::Attack.blocklist('block bad UA logins') do |req| 25 req.path == '/users/sign_in' && req.post? && req.user_agent == 'BadUA' 26 end 27 28end

試したこと

users/adminのページを規制したいので、初期はこの記述にしていたのですが、規制が掛かっている様子が無かったので、下記に変更してみて試してみたのですが、ダメでした。
ルーティングが間違っている可能性はありますか?
(%r{^/admin})

補足情報(FW/ツールのバージョンなど)

ruby 3.2.2
rails 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

users/adminのページを規制したい

のでしたら、^/adminの正規表現とはマッチしません。

投稿2024/12/31 12:09

maisumakun

総合スコア146175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Java_student

2024/12/31 16:42

("^/users/admin")や(%{^/users/admin})で試してみましたがダメでした。 ^の部分で不具合と言うか繋がっていない原因になっているのでしょうか?
maisumakun

2025/01/01 07:29

> ("^/users/admin")や(%{^/users/admin})で試してみましたが 正規表現リテラルで書きましたか?
Java_student

2025/01/02 17:57

下記でページがForbiddenと表示されました。 (%r{^/users/admin})
maisumakun

2025/01/02 23:30 編集

(誤記削除)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問