ASP.NET Core 6’daki uygulamalarla çalışırken, diğer tüm adreslerden gelen istekleri engellerken, yalnızca belirli IP adreslerinden gelen istemci isteklerine izin vermek için genellikle bir IP adresi beyaz listesi oluşturmak isteyeceksiniz. Bunu, API uç noktalarımızı kötü niyetli kişilerden gelen potansiyel olarak kötü amaçlı isteklerden korurken aynı zamanda güvenilir IP adreslerinden kaynaklanan isteklere izin vermek için yapıyoruz.
IP güvenli listesi olarak da adlandırılan IP beyaz listesi, uygulamamızın hassas verilerinin yalnızca bildiğimiz ve güvendiğimiz IP adreslerine maruz kalmasını sağlamaya yardımcı olur. ASP.NET Core’da bir IP beyaz listesi, ara yazılım veya MVC eylem filtreleri kullanılarak uygulanabilir. Bu makale, ara yazılım kullanarak ASP.NET Core 6’da bir IP beyaz listesini nasıl uygulayabileceğimizi gösterir.
Bu makalede verilen kod örnekleri ile çalışmak için sisteminizde Visual Studio 2022 kurulu olmalıdır. Halihazırda bir kopyanız yoksa, Visual Studio 2022’yi buradan indirin.
Visual Studio 2022’de bir ASP.NET Core Web API projesi oluşturun
Öncelikle Visual Studio 2022’de bir ASP.NET Core projesi oluşturalım. Aşağıdaki adımları takiben Visual Studio 2022’de yeni bir ASP.NET Core Web API projesi oluşturacağız:
- Visual Studio 2022 IDE’yi başlatın.
- “Yeni proje oluştur” u tıklayın.
- “Yeni proje oluştur” penceresinde, görüntülenen şablonlar listesinden “ASP.NET Core Web API” seçeneğini seçin.
- Sonrakine tıkla.
- “Yeni projenizi yapılandırın” penceresinde yeni proje için ad ve konum belirleyin.
- İsteğe bağlı olarak, tercihlerinize bağlı olarak “Çözüm ve projeyi aynı dizine yerleştir” onay kutusunu işaretleyin.
- Sonrakine tıkla.
- Daha sonra gösterilen “Ek Bilgiler” penceresinde, “Denetleyicileri kullan…” onay kutusunun işaretli olduğundan emin olun. “Kimlik Doğrulama Türü”nü “Yok” (varsayılan) olarak bırakın. Ve burada bu özelliklerden hiçbirini kullanmayacağımız için “Docker’ı Etkinleştir”, “HTTPS için Yapılandır” ve “Açık API Desteğini Etkinleştir” onay kutularının işaretli olmadığından emin olun.
- Oluştur’u tıklayın.
Bu makalenin sonraki bölümlerinde IP beyaz listeleriyle çalışmak için bu ASP.NET Core 6 Web API projesini kullanacağız.
ASP.NET Core 6’daki Program sınıfı
Program ve Başlangıç, .NET uygulamalarınızı yapılandırmak için ana sınıflardır. Ancak ASP.NET Core 6, ortak kod kodunun çoğunu kaldıran basitleştirilmiş bir programlama ve barındırma modeli sağlar. Artık Başlangıç sınıfınız yok. Bunun yerine, Program sınıfında istek işleme ardışık düzenini yapılandırmak için kodunuzu yazmanız gerekir.
Visual Studio’da yeni bir ASP.NET Core 6 projesi oluşturduğunuzda, Program sınıfı şöyle görünür:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();
Bu Program sınıfını bu makalenin sonraki bölümlerinde kullanacağız. Ancak önce, ASP.NET Core 6’da bir IP beyaz liste ara yazılımını nasıl uygulayabileceğimizi inceleyeceğiz.
Yapılandırma dosyasında beyaz listeye alınan IP adreslerini belirtin
appsettings.json dosyasında aşağıdaki beyaz listeye alınmış IP adreslerini belirtin.
"IPWhitelistOptions": {
"Whitelist": [ "192.168.0.9", "192.168.1.9", "::1" ]
}
Bu IP adreslerinin yalnızca örnekleme amacıyla verildiğine dikkat edin. Bu IP adreslerini beyaz listeye eklemek istediğiniz IP adresleriyle değiştirmelisiniz.
Şimdi, az önce belirttiğimiz yapılandırma değerlerini (IP adresleri) okuyacak aşağıdaki kodla IPWhitelistOptions adında yeni bir sınıf oluşturun.
public class IPWhitelistOptions
{
public List<string> Whitelist { get; set; }
}
IPWhitelistMiddleware sınıfını oluşturun
IP adreslerimizi beyaz listeye alacak ara yazılımımızı oluşturmak için aşağıdaki kodla IPWhitelistMiddleware adlı yeni bir sınıf oluşturun.
public class IPWhitelistMiddleware
{
private readonly RequestDelegate _next;
private readonly IPWhitelistOptions _iPWhitelistOptions;
private readonly ILogger<IPWhitelistMiddleware> _logger;
public IPWhitelistMiddleware(RequestDelegate next,
ILogger<IPWhitelistMiddleware> logger,
IOptions<IPWhitelistOptions> applicationOptionsAccessor)
{
_iPWhitelistOptions = applicationOptionsAccessor.Value;
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
if (context.Request.Method != HttpMethod.Get.Method)
{
var ipAddress = context.Connection.RemoteIpAddress;
List<string> whiteListIPList =
_iPWhitelistOptions.Whitelist;
var isIPWhitelisted = whiteListIPList
.Where(ip => IPAddress.Parse(ip)
.Equals(ipAddress))
.Any();
if (!isIPWhitelisted)
{
_logger.LogWarning(
"Request from Remote IP address: {RemoteIp}
is forbidden.", ipAddress);
context.Response.StatusCode =
(int)HttpStatusCode.Forbidden;
return;
}
}
await _next.Invoke(context);
}
}
Bu örnekte IP adreslerinin beyaz listeye alınmasının HTTP Get dışındaki tüm HTTP fiilleri için çalışacağını unutmayın. Bu beyaz listenin tüm HTTP fiillerine uygulanmasını istiyorsanız, Invoke yönteminde aşağıdaki ifadeyi yorumlayabilirsiniz.
if (context.Request.Method != HttpMethod.Get.Method)
Ara yazılımımızın Invoke yönteminde, beyaz listeye alınmış tüm IP adreslerini bir dizi listesinde okuyoruz. İsteğin kaynaklandığı IP adresi, listedeki IP adreslerinden biriyle eşleşirse, isteğe izin verilir; aksi takdirde ara yazılım HTTP 403 Forbidden döndürür ve buna göre bir günlük mesajı oluşturulur.
IPWhitelistMiddlewareExtensions sınıfı
Şimdi IPWhitelistMiddlewareExtensions adında bir sınıf oluşturun ve aşağıdaki kodu girin.
public static class IPWhitelistMiddlewareExtensions
{
public static IApplicationBuilder UseIPWhitelist(this
IApplicationBuilder builder)
{
return builder.UseMiddleware<IPWhitelistMiddleware>();
}
}
IP beyaz liste ara katman yazılımımızı Program sınıfında bir sonraki bölümde gösterildiği gibi kullanacağız.
IP beyaz liste ara yazılımını Program sınıfında yapılandırın
Aşağıda verilen kod parçacığında gösterildiği gibi, Hizmet koleksiyonunun Configure yöntemini kullanarak Program sınıfındaki IP beyaz liste ara yazılımını yapılandırmalısınız.
builder.Services.Configure<IPWhitelistOptions>(builder.Configuration.GetSection("IPWhitelistOptions"));
Şimdi, daha önce oluşturduğumuz uzatma yönteminden yararlanmak için aşağıdaki kod satırını Program sınıfına ekleyin.
app.UseIPWhitelist();
Program sınıfınızın şimdi nasıl görünmesi gerektiği:
using IPWhiteListDemo;
using System.Configuration;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<IPWhitelistOptions>(builder.Configuration.GetSection("IPWhitelistOptions"));
builder.Services.AddControllers();
var app = builder.Build();
app.UseIPWhitelist();
app.UseAuthorization();
app.MapControllers();
app.Run();
Son olarak Visual Studio’da F5 tuşuna basarak uygulamayı çalıştırın. Ara yazılımı test etmek için Postman’den bir HTTP Gönderi isteği gönderebilirsiniz. IP adresiniz beyaz listedeki herhangi bir IP adresiyle eşleşirse, isteğe izin verilecektir. Aksi takdirde, istek reddedilecek ve ara katman yazılımı HTTP 403 Forbidden döndürecektir.
Telif Hakkı © 2022 IDG Communications, Inc.
Kaynak : https://www.infoworld.com/article/3663443/how-to-implement-ip-whitelists-in-aspnet-core-6.html#tk.rss_all