Spring Security ile White ve Black List IP Kontrol
Doğru IP ye sahip olmak ya da olmamak, işte bütün mesele bu -William Shakespeare
Herkese merhabalar bugün ki yazımızda Spring Boot uygulamamızda Security alanında önemli bir çalışma yapacağız, hemen konudan bahsetmek gerekirse, request ‘in sahibinin ip adresini kontrol ettirerek bir güvenlik duvarı oluşturacağız , ki ettirerek kelimesi önemli çünkü bunu biz değil, Spring Security yapısına yaptıracağız.

Aşağıda Bu makalede tam olarak işlenecek konular şunlar:
- Bir Endpoint’e sadece belirlediğimiz IP adreslerine sahip kişiler istek atabilecek.
- Sadece Belirlediğimiz IP adresine sahip kullanıcılar Authorization işlemini gerçekleştirebilecek
- Kara Listeye aldığımız IP lere sahip kimse Authorization işlemini yapamayacak ve istek atamayacak.
- Dikkat Edilmesi Gerekenler
Kısa bir ön bilgilendirme yapmalıyım ki, bu makale içerisinde Spring Security Configuration Anlatılmayacak, o başka bir makalenin konusu. O yüzden bu sistemi implemente edebilmek için en az orta düzeyde Security biliyor veya sisteminizde implemente edilmiş halde var olması gerekmektedir. Anlatım hazır sistem üzerinden olacak.
Endpoint’ i Belirli IP ler ile korumak
Bu duruma ihtiyaç duyabileceğiniz anlar elbette olacaktır, örneğin bir ödeme altyapısının size istek atacağı esnada sadece o ödeme altyapısından gelen istekler olduğuna emin olmak istiyor olabilirsiniz. işte bu durumda endpoint’ i hatta endpoint’ leri IP güvenlik duvarına tabii tutabilirsiniz.
yukarıda gördüğünüz yapı, herhangi bir ip kontrolünden önce ki hali, açıklamak gerekirse
/home ile başlayan tüm endpoint ‘lere herkes istek atabilir, Oturum Açması ya da Doğru Role uygun olma şartı yok.
/user ile başlayan tüm endpoint ’lere sadece Oturum Açmış ve Doğru Role (USER VE ADMIN) uygun kullanıcılar istek atabilir.
/user ile başlayan tüm endpoint’ lere sadece Oturum Açmış ve ADMIN Rolüne sahip kullanıcılar istek atabilir.
Hemen aşağıda ki kodda göreceğiniz üzere bir ip kontrolü ekledim.
Şimdi bu ayarlar ile /home/aws/health endpoint’ ime bir GET isteğinde bulunacağım.

Görüldüğü üzere doğru ip adresi ile istek attığımda Response’ u başarıyla aldım.
Sıra Hata Almakta
şimdi Security Config içerisinde ki hasIpAddress() methodunu 188.3.192.32 IP adresi ile değiştirip tekrardan istek atıyorum.

Görüldüğü üzere başarıyla ‘kontrollü hatamızı’ aldık çünkü beklediğimiz de bu sonuçtu.
Birden çok IP adresine izin verelim
Yeri geldiğinde bu senaryo birden çok ip adresi de istek atabilsin şeklinde değişebilir, bunun için şöyle bir helper method ve ayarlama yapabiliriz.
görüldüğü üzere sadece 3 ip ye izin verip, access() methoduna hasIpAddresses() methodu aracılığıyla tanımladım.
Sadece izin verdiğimiz IP lerin Oturum açabilmesi
Temelde ip kontrol protokolünün ne olduğunu ve nasıl işlediğini anladığımızı varsayarak hızlıca devam ediyorum.
Bu işlem için öncelikle CustomIpAuthenticationProvider oluşturup aşağıda ki gibi içini dolduruyorum.
Şimdi doğruca security config ayarlarına…
İşlemimiz bu kadar. artık sadece kendi sisteminize göre re design etmeniz gerekiyor, nasıl bir security altyapınız var ? nerede ne kullandığınıza göre bu durum değişir burada sadece simülasyon edilerek işlendi bu konu.
Temel işleyiş şudur, Oluşturulan Provider’ı AuthenticationManagerBuilder içine provider olarak set edilmesi gerekir. Ardından kalanı Spring Security Halledecektir.
Aynı İşlemin Black List Versiyonu
Malum Provider üzerinde tamamen logic ile oynayarak tersine çevirip black list provider elde edebiliriz.
Dikkat Edilmesi Gerekenler
Bu security sistemi en ham versiyon baz alınarak tamamen provider ve mantığını açıklamaya yöneliktir, kendi provider stratejinize uydurmanız gerekmektedir.
Bu örnekte kullanılan IPV4 adresidir, eğer kendi cihazınızda java kodunu runlar ve denerseniz ip adresinizi, 0:0:0:0:0:0:0:1 olarak düşünün, Local istemciden, Local sunucuya istek atarken ip adresiniz bu şekildedir.
Umarım bu makale sizlere yardımcı olmuştur. İyi çalışmalar.