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

Ulaş Müezzinoğlu
3 min readOct 13, 2022

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:

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.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response