Penghentian SSL HAProxy dengan pengalihan http ke https kehilangan informasi X-Client-IP dengan pengiriman-proxy ke NGINX

MASALAH

Saya tidak dapat melihat remote-ip asli datang dari luar, ketika saya menggunakan SSL-Termination di HAProxy dan memaksa HTTPS. Jika saya tidak memaksa pengalihan HTTP ke HTTPS, saya dapat melihat dari nginx-logs bahwa send-proxy sebenarnya berfungsi dengan HTTP. Saya juga dapat melihat hal yang sama dari HAProxy-logs.

TEORI

Jika saya menghapus semua cookie situs, menonaktifkan pengalihan, dan membuka versi HTTP, HAProxy akan menampilkan remote-ip dengan benar. Setelah mengalihkan pengalihan ke HTTPS dan membuka situs HTTP yang sama, log pertama-tama akan menampilkan koneksi dari remote-ip ke backend:

    176.93.182.162:49300 [14/Feb/2020:23:40:30.254] 80_443_frontend 80_443_frontend/(NOSRV) 

dan kemudian koneksi dari localhost (127.0.0.1):

    127.0.0.1:35304 [14/Feb/2020:23:40:30.776] 80_443_frontend~ 80_443_backend/git 0/0/0/1/1 200

KESIMPULAN

Pikiran saya adalah, HAProxy akan mengarahkan lalu lintas internal dari 443 kembali ke port 80 menuju backend, dan pada saat yang sama mengalihkan IP header ke IP-nya sendiri. Semoga ada yang punya ide.

HAProxy ada di dalam wadah lxdnya sendiri, begitu pula NGINX!! Jika ini mengubah sesuatu?

Ini adalah konfigurasi di HAProxy:


    frontend 80_443_frontend
        bind *:80
        bind *:443 ssl crt /etc/ssl/git.domain.org/git.domain.org.pem alpn h2,http/1.1
        redirect scheme https code 301 if !{ ssl_fc }
        timeout client 1m
        option forwardfor
        option http-server-close
        acl letsencrypt-acl path_beg /.well-known/acme-challenge/
        use_backend letsencrypt_backend if letsencrypt-acl
        acl git_host hdr(host) -i git.domain.org

        use_backend 80_443_backend if git_host

    backend letsencrypt_backend
        server letsencrypt 127.0.0.1:8888

    backend 80_443_backend
        http-request set-header X-Client-IP %[src]
        server git git.lxd:80 send-proxy


person dicksteel    schedule 15.02.2020    source sumber
comment
Ini dari log HAProxy dengan pengalihan HTTPS aktif: Hubungkan dari 127.0.0.1:35314 ke 127.0.0.1:443 (80_443_frontend/HTTP)   -  person dicksteel    schedule 15.02.2020
comment
Ini dari log HAProxy dengan pengalihan HTTP nonaktif: Hubungkan dari 176.93.182.162:49651 ke 10.4.21.53:80 (80_443_frontend/HTTP)   -  person dicksteel    schedule 15.02.2020


Jawaban (1)


Baiklah, persetan denganku ke samping!

Kita perlu mengingat port apa yang diteruskan ke container!!

Inilah yang hilang:

sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d PUBLIC_IP/32 --dport 443 -j DNAT --to-destination 10.4.21.53:443
person dicksteel    schedule 15.02.2020