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.