Mencatat IP Asli Visitor di Log Nginx Cloudflare

Mencatat IP Asli Visitor di Log Nginx Cloudflare. Ketika kita mengaktifkan cloud protect di Cloudflare, maka IP yang tersimpan di log server kita adalah IP milik Cloudflare. Solusinya, kita bisa memanfaatkan modul ngx_http_realip_module untuk mencatat IP asli visitor kita di server.


Saya sendiri baru menyadari hal ini ketika fail2ban yang saya pasang untuk memproteksi Nginx dari DDOS malah membanned IP milik Cloudflare. lol..


Untuk mencatat IP asli visitor di log Nginx, pertama, pastikan Nginx kalian sudah terpasang modul http-real-ip.
Jika kalian meng-compile Nginx dari source, kalian bisa tambahkan parameter --with-http_realip_module saat compile. Contoh
./configure --with-http_realip_module
Atau jika kalian menginstall paket Nginx dari repisitory sistem, kalian bisa install nginx-extras untuk mendapatkan http-real-ip. Contoh instalasi di Ubuntu
apt-get install nginx-extras
Untuk memastikan modul tersebut sudah aktif, kalian bisa cek dengan command berikut:
nginx -V 2>&1 | tr -- - '\n' | grep realip
Dan pastikan outputnya adalah http_realip_module.
Oke setelah terinstall, langkah selanjutnya adalah menambahkan IP milik Cloudflare di konfigurasi Nginx. Disini kita buat saja file khusus secara terpisah agar lebih rapi. Dan karena IP ini bisa saja update sewaktu waktu, kita buat saja file cron untuk mengecek setiap hari.

Buat satu file dengan nama terserah untuk nantinya kita eksekusi lewat cronjob. Disini saya buat file cloudflare-ip.sh dengan isi berikut:
#!/bin/bash
curl -skL https://www.cloudflare.com/ips-v4 > /tmp/cloudflare
curl -skL https://www.cloudflare.com/ips-v6 >> /tmp/cloudflare
cat /tmp/cloudflare | awk '{print "set_real_ip_from " $1 ";"}' | tee /etc/nginx/cloudflare-ip
Selanjutnya eksekusi file tersebut melalui cronjob. Contoh
0 5 * * * /bin/bash /root/cloudflare-ip.sh
Contoh isi file di /etc/nginx/cloudflare-ip

Langkah selanjutnya adalah mengedit file nginx.conf dan menambahkan konfigurasi berikut di block http.
include /etc/nginx/cloudflare-ip;
real_ip_header CF-Connecting-IP;
Sekarang reload konfigurasi Nginx dengan command
sudo service nginx reload
Seharusnya sekarang log di Nginx sudah mencatat IP asli visitor dan bukan IP milik Cloudflare lagi.

Oke sekian tutorial singkat kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.