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,6 +59,8 @@ default['gitlab']['gitlab-core']['external_https'] = false | ||
59 | default['gitlab']['gitlab-core']['notification_email'] = "gitlab@#{node['fqdn']}" | 59 | default['gitlab']['gitlab-core']['notification_email'] = "gitlab@#{node['fqdn']}" |
60 | default['gitlab']['gitlab-core']['support_email'] = "support@example.com" | 60 | default['gitlab']['gitlab-core']['support_email'] = "support@example.com" |
61 | default['gitlab']['gitlab-core']['uploads_directory'] = "/var/opt/gitlab/uploads" | 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,6 +85,21 @@ link "/opt/gitlab/embedded/service/gitlab-core/config/gitlab.yml" do | ||
85 | to gitlab_yml | 85 | to gitlab_yml |
86 | end | 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 | directory node['gitlab']['gitlab-core']['satellites_path'] do | 103 | directory node['gitlab']['gitlab-core']['satellites_path'] do |
89 | owner node['gitlab']['user']['username'] | 104 | owner node['gitlab']['user']['username'] |
90 | group node['gitlab']['user']['group'] | 105 | group node['gitlab']['user']['group'] |
files/gitlab-cookbooks/gitlab/templates/default/rack_attack.rb.erb
0 → 100644
@@ -0,0 +1,18 @@ | @@ -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 |