Commit a93f8709269c566b39216e5b488d0331ccb4d2e4
Exists in
master
and in
17 other branches
Merge branch 'rack_attack' into 'master'
Rack Attack
Showing
3 changed files
with
35 additions
and
0 deletions
Show diff stats
files/gitlab-cookbooks/gitlab/attributes/default.rb
| ... | ... | @@ -59,6 +59,8 @@ default['gitlab']['gitlab-core']['external_https'] = false |
| 59 | 59 | default['gitlab']['gitlab-core']['notification_email'] = "gitlab@#{node['fqdn']}" |
| 60 | 60 | default['gitlab']['gitlab-core']['support_email'] = "support@example.com" |
| 61 | 61 | default['gitlab']['gitlab-core']['uploads_directory'] = "/var/opt/gitlab/uploads" |
| 62 | +default['gitlab']['gitlab-core']['rate_limit_requests_per_period'] = 10 | |
| 63 | +default['gitlab']['gitlab-core']['rate_limit_period'] = 60 | |
| 62 | 64 | |
| 63 | 65 | |
| 64 | 66 | ### | ... | ... |
files/gitlab-cookbooks/gitlab/recipes/gitlab-core.rb
| ... | ... | @@ -85,6 +85,21 @@ link "/opt/gitlab/embedded/service/gitlab-core/config/gitlab.yml" do |
| 85 | 85 | to gitlab_yml |
| 86 | 86 | end |
| 87 | 87 | |
| 88 | +rack_attack = File.join(gitlab_core_etc_dir, "rack_attack.rb") | |
| 89 | + | |
| 90 | +template rack_attack do | |
| 91 | + source "rack_attack.rb.erb" | |
| 92 | + owner "root" | |
| 93 | + group "root" | |
| 94 | + mode "0644" | |
| 95 | + variables(node['gitlab']['gitlab-core'].to_hash) | |
| 96 | + notifies :restart, 'service[gitlab-core]' if should_notify | |
| 97 | +end | |
| 98 | + | |
| 99 | +link "/opt/gitlab/embedded/service/gitlab-core/config/initializers/rack_attack.rb" do | |
| 100 | + to rack_attack | |
| 101 | +end | |
| 102 | + | |
| 88 | 103 | directory node['gitlab']['gitlab-core']['satellites_path'] do |
| 89 | 104 | owner node['gitlab']['user']['username'] |
| 90 | 105 | group node['gitlab']['user']['group'] | ... | ... |
files/gitlab-cookbooks/gitlab/templates/default/rack_attack.rb.erb
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +# 1. Rename this file to rack_attack.rb | |
| 2 | +# 2. Review the paths_to_be_protected and add any other path you need protecting | |
| 3 | +# | |
| 4 | + | |
| 5 | +paths_to_be_protected = [ | |
| 6 | + "#{Rails.application.config.relative_url_root}/users/password", | |
| 7 | + "#{Rails.application.config.relative_url_root}/users/sign_in", | |
| 8 | + "#{Rails.application.config.relative_url_root}/api/#{API::API.version}/session.json", | |
| 9 | + "#{Rails.application.config.relative_url_root}/api/#{API::API.version}/session", | |
| 10 | + "#{Rails.application.config.relative_url_root}/users", | |
| 11 | + "#{Rails.application.config.relative_url_root}/users/confirmation" | |
| 12 | +] | |
| 13 | + | |
| 14 | +unless Rails.env.test? | |
| 15 | + Rack::Attack.throttle('protected paths', limit: <%= node['gitlab']['gitlab-core']['rate_limit_requests_per_period'] %>, period: <%= node['gitlab']['gitlab-core']['rate_limit_period'] %>.seconds) do |req| | |
| 16 | + req.ip if paths_to_be_protected.include?(req.path) && req.post? | |
| 17 | + end | |
| 18 | +end | ... | ... |