Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx'te Basit Erişim Kontrolü: Belirli IP Adreslerine veya Ağlara İzin Verme veya Engelleme

thedevx

Üye
Katılım
14 Mart 2026
Mesajlar
36
Merhaba arkadaşlar, bugün sizlere Nginx web sunucunuzda güvenliğin ilk basamaklarından biri olan, basit IP tabanlı erişim kontrolünü nasıl yapacağınızı anlatacağım. Özellikle yönetim paneli (admin area), test ortamları veya sadece iç ağınızdan erişilmesini istediğiniz kritik dizinleri korumak için bu yöntem oldukça etkilidir. Benim sunucularda genelde ilk yaptığım güvenlik ayarlarından biridir.

🔍 Neden IP Erişim Kontrolü?

Bu yöntem, firewall (güvenlik duvarı) kurallarınıza ek olarak veya onların yerine, uygulama katmanında (7. katman) hızlı ve etkili bir filtreleme sağlar. Örneğin, ofis IP'nizden sunucunuza erişebilirsiniz ama dışarıdan gelen herhangi bir IP adresi engellenir. Bu sayede yetkisiz tarama ve saldırı girişimlerini başlamadan durdurabilirsiniz.

⚙️ İzin Verme (Allow) ile Başlayalım

En yaygın senaryo, sadece belirli IP'lerin veya ağların erişmesine izin vermek, geri kalan her şeyi engellemektir. Bunun için `allow` ve `deny` direktiflerini kullanacağız. İşlem sırası önemlidir, Nginx kuralları yukarıdan aşağı okur ve ilk eşleşen kuralı uygular.

Diyelim ki, sadece kendi ofis IP'miz (örneğin 203.0.113.10) ve iç ağımızdaki (192.168.1.0/24) cihazların `/admin` dizinine erişmesini istiyoruz. Geri kalan tüm IP'leri engelleyeceğiz. Sanal sunucu (server) bloğunuzun içine veya bir `location` bloğuna aşağıdaki gibi ekleme yapmalısınız.

NGINX:
location /admin {
    # Önce izin verilecek IP/Ağ listesi
    allow 203.0.113.10;
    allow 192.168.1.0/24;

    # Yukarıdakiler dışındaki TÜM trafiği engelle
    deny all;

    # ... Bu location'a ait diğer ayarlarınız (proxy_pass, root vb.)
}

Bu konfigürasyonda, Nginx `/admin` yoluna gelen bir isteği kontrol eder. Eğer IP adresi `203.0.113.10` veya `192.168.1.0/24` ağından ise, `allow` kuralına takılır ve erişime izin verilir. Bu IP'lerden değilse, aşağı iner ve `deny all;` kuralı ile karşılaşır, bu da 403 Forbidden hatası döndürür.

⚠️ Dikkat Edilmesi Gerekenler

Şu ayara çok dikkat etmelisiniz: Kural sıralaması. Eğer `deny all;` satırını `allow` satırlarının ÜSTÜNE yazarsanız, hiçbir IP'ye izin veremezsiniz. Her zaman özel kurallar (izinler) genel kuraldan (engelleme) önce gelmelidir.

Ayrıca, bu kuralları ana /etc/nginx/nginx.conf dosyasına, `http` bloğuna yazarsanız, tüm sunucu blokları (virtual host) için geçerli olur. Daha spesifik kontrol için her bir site konfigürasyonu (örneğin /etc/nginx/sites-available/sitem.com) içindeki `server` veya `location` bloklarında kullanmanızı öneririm.

🚫 Sadece Engelleme (Deny) Senaryosu

Bazen sadece belirli problemli IP'leri veya ağları engellemek isteyebilirsiniz. Örneğin, belirli bir ülke aralığından veya sürekli saldırı denemesi yapan bir IP'den gelen trafiği engellemek.

NGINX:
location / {
    # Spam veya saldırı kaynağı olduğunu düşündüğümüz IP'yi engelle
    deny 198.51.100.25;
    deny 203.0.113.0/28;

    # Diğer tüm IP'lere izin ver (varsayılan davranış bu zaten)
    allow all;

    # ... Diğer ayarlar
}

Burada, `deny` kurallarından birine takılmayan tüm isteklere `allow all;` ile izin verilir. `allow all;` varsayılan değer olduğu için aslında yazmasanız da olur, ancak okunabilirlik açısından yazmak faydalı olabilir.

💡 İpucu: Kuralları Ayrı Dosyada Tutmak

Eğer yönetmesi zor, çok sayıda IP listeniz varsa, bu listeleri ayrı bir dosyada tutup Nginx konfigürasyonunuzda o dosyayı `include` edebilirsiniz. Bu, bakımı çok kolaylaştırır.

Önce IP listesi dosyasını oluşturalım (/etc/nginx/allowed_ips.conf):
NGINX:
allow 203.0.113.10;
allow 192.168.1.15;
allow 10.0.0.0/8;

Ardından ana konfigürasyon dosyanızda bu dosyayı dahil edin:
NGINX:
location /secure-area {
    include /etc/nginx/allowed_ips.conf;
    deny all;
}

Bu yöntemle, IP listesini değiştirdiğinizde sadece bir dosyayı güncellemeniz ve Nginx'i yeniden yüklemeniz (`sudo nginx -s reload`) yeterli olacaktır.

Sonuç olarak, Nginx'in bu basit ama güçlü `allow`/`deny` direktifleri ile sunucunuzun kritik bölgelerini hızla koruma altına alabilirsiniz. Tabii ki bu, tek başına eksiksiz bir güvenlik çözümü değildir, güvenlik katmanlı bir yaklaşımla ele alınmalıdır.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle büyük IP listelerini yönetmek için farklı bir yönteminiz var mı? Ya da bu konuda karşılaştığınız ilginç bir sorun oldu mu? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin, birlikte tartışalım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri