From e91244099eac3abb9c9d714b7c785380eacf89b3 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Thu, 11 Jul 2024 13:27:32 +0100 Subject: [PATCH] Look through cloudflare to get real client IPs --- cookbooks/web/recipes/frontend.rb | 20 ++++++++++++++++++- .../web/templates/default/apache.frontend.erb | 6 ++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/cookbooks/web/recipes/frontend.rb b/cookbooks/web/recipes/frontend.rb index ec7ce92f5..f9e733c5b 100644 --- a/cookbooks/web/recipes/frontend.rb +++ b/cookbooks/web/recipes/frontend.rb @@ -34,6 +34,7 @@ apache_module "proxy" apache_module "proxy_fcgi" apache_module "lbmethod_byrequests" apache_module "lbmethod_bybusyness" +apache_module "remoteip" apache_module "reqtimeout" apache_module "rewrite" apache_module "unique_id" @@ -52,9 +53,26 @@ remote_directory "#{node[:web][:base_directory]}/static" do files_mode "644" end +remote_file "#{Chef::Config[:file_cache_path]}/cloudflare-ipv4-list" do + source "https://www.cloudflare.com/ips-v4" + compile_time true + ignore_failure true +end + +cloudflare_ipv4 = IO.read("#{Chef::Config[:file_cache_path]}/cloudflare-ipv4-list").lines.map(&:chomp) + +remote_file "#{Chef::Config[:file_cache_path]}/cloudflare-ipv6-list" do + source "https://www.cloudflare.com/ips-v6" + compile_time true + ignore_failure true +end + +cloudflare_ipv6 = IO.read("#{Chef::Config[:file_cache_path]}/cloudflare-ipv6-list").lines.map(&:chomp) + apache_site "www.openstreetmap.org" do template "apache.frontend.erb" - variables :status => node[:web][:status], + variables :cloudflare => cloudflare_ipv4 + cloudflare_ipv6, + :status => node[:web][:status], :secret_key_base => web_passwords["secret_key_base"] end diff --git a/cookbooks/web/templates/default/apache.frontend.erb b/cookbooks/web/templates/default/apache.frontend.erb index fb677769e..9a2cd10a7 100644 --- a/cookbooks/web/templates/default/apache.frontend.erb +++ b/cookbooks/web/templates/default/apache.frontend.erb @@ -26,6 +26,12 @@ ErrorLog /var/log/apache2/error.log SSLCertificateFile /etc/ssl/certs/www.openstreetmap.org.pem SSLCertificateKeyFile /etc/ssl/private/www.openstreetmap.org.key + # Get the real remote IP for requests via a trusted proxy + RemoteIPHeader CF-Connecting-IP +<% @cloudflare.sort.each do |address| -%> + RemoteIPTrustedProxy <%= address %> +<% end -%> + # # Turn on various features # -- 2.39.5