Kubernetes Ingress Behind CF / Get Real-ip

Aşağıdaki topolojiyi inceleyebilirsiniz. İhtiyaç duyulan şartlar;

  1. Cloudflare dışında direkt erişim sağlanılamasın,
  2. CF Proxy kullanılsın + real ip alınabilsin.

Öncelikle ingress’in servisine(ingress-nginx-controller) “externalTrafficPolicy: Local” olarak değiştiriyoruz.

spec:
  clusterIP: x.x.x.x
  externalTrafficPolicy: Local
  internalTrafficPolicy: Cluster

Sonrasında ingress-nginx’in configmap’ini editliyoruz.

apiVersion: v1
data:
  allow-snippet-annotations: "true"
  whitelist-source-range: "173.245.48.0/20, 103.21.244.0/22, 103.22.200.0/22, 103.31.4.0/22, 141.101.64.0/18, 108.162.192.0/18, 190.93.240.0/20, 188.114.96.0/20, 197.234.240.0/22, 198.41.128.0/17, 162.158.0.0/15, 104.16.0.0/13, 104.24.0.0/14, 172.64.0.0/13, 131.0.72.0/22, 2400:cb00::/32, 2606:4700::/32, 2803:f800::/32, 2405:b500::/32, 2405:8100::/32, 2a06:98c0::/29, 2c0f:f248::/32"
  log-format-upstream: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id $http_x_forwarded_for $http_x_real_ip $http_cf_connecting_ip

Whitelist-source : Cloudflare’in ip adreslerini ekliyoruz.

Log-format-upstream: ingress’in logunda real ip adresini de alabilmek için $http_x_real_ip ve $http_cf_connecting_ip ekliyoruz. Cloudflare HTTP request headers · Cloudflare Fundamentals docs

Test

Host dosyama dış bacağı ekleyerek deneme yapıyorum. 403 aldığımı görebilirsiniz.

Host dosyamı eski haline getiriyorum. Erişebildiğimi gözlemliyorum. Gelen logu incelediğimde;

172.69.199.141 (Cloudflare client ip) - - [16/Jan/2024:10:25:49 +0000] "GET /?asda HTTP/1.1" 308 164 "-" "curl/8.1.2" 324 0.000 [foo-test-foo-test-http] [] - - - - 5e3d49fac2d68f959004391ee2443f9b x.x.x.x(Real ip) - x.x.x.x(Real ip)

İstenilen bir T anında CF arkasından dönmeden de sitelerin erişilebilir olduğununun testi;

Whitelist ve proxy modunu kapattığımızda ise erişim devam etmekte, CF adresi yerine real ip gözükmektedir. (Romanya’dan vpn yapılarak test edilmiştir.)

162.158.171.29 - - [16/Jan/2024:14:58:04 +0000] "GET /?asfjklsahjkgasdaf HTTP/2.0" 200 615 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0" 823 0.001 [foo-test-foo-test-http] [] 10.42.0.10:80 615 0.001 200 7a26c8d7075ba0ece3ae845e3469926b 89.187.163.154 - 89.187.163.154

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.