DHY

Cloudflare IP Bloklarını Whitelist Yapma

Problem

Web sunucumda çalışan bir servis vardı ve belirli bir portu (örneğin 3001) dinliyordu.
Ama sıkıntı şu: bu porta herkes erişebiliyordu. Güvenlik açısından pek hoş bir durum değil çünkü araya girip doğrudan bu servise istek atılabiliyor. Benim istediğim şey sadece Cloudflare üzerinden erişilmesiydi. Yani Cloudflare’in IP blokları dışında kimse bu porta giremeyecekti.

Çözüm

Bunu çözmenin en kestirme yolu iptables üzerinden kurallar yazmak oldu.
iptables kuralları sıra ile çalışıyor. Yani önce hangi kuralları yazarsan onlar önden uygulanıyor. Eğer en başta DROP koyarsan, sonrakiler çalışmaz, bunu deneye deneye öğrenmiş oldum 😅 O yüzden önce ACCEPT yazıp izin verdim, en sonda da DROP kuralıyla diğer herkesi kapattım.

Kodlar

Aşağıdaki kurallar, sadece Cloudflare IP bloklarını kabul ediyor ve gerisini engelliyor. Port numarasını kendi servisine göre değiştirebilirsin.

# Cloudflare IP bloklarına izin ver
iptables -A INPUT -p tcp -s 173.245.48.0/20 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 103.21.244.0/22 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 103.22.200.0/22 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 103.31.4.0/22 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 141.101.64.0/18 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 108.162.192.0/18 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 190.93.240.0/20 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 188.114.96.0/20 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 197.234.240.0/22 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 198.41.128.0/17 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 162.158.0.0/15 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 104.16.0.0/13 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 104.24.0.0/14 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 172.64.0.0/13 --dport 3001 -j ACCEPT
iptables -A INPUT -p tcp -s 131.0.72.0/22 --dport 3001 -j ACCEPT

# En sonda diğer herkesi engelle
iptables -A INPUT -p tcp --dport 3001 -j DROP

Böylece servis sadece Cloudflare üzerinden görülebiliyor. Benim için yeterli oldu.