Merhaba arkadaşlar, bugün sizlere Nginx web sunucunuzun güvenliğini artırmak için sıkça kullandığım bir yöntemi anlatacağım. Özellikle kötü niyetli tarama yapan botları, belirli ülkelerden gelen erişimi veya sadece iç ağınızdan bağlanması gereken yönetim panellerini kontrol etmek için IP bazlı erişim kontrolü hayati önem taşır. Bu rehberde, hem engelleme (blacklist) hem de izin verme (whitelist) işlemlerinin nasıl yapılandırılacağını adım adım göstereceğim.
Neden IP Erişim Kontrolü?
Sunucu loglarınızı incelediğinizde, anlamsız istekler yapan, sürekli login sayfasını deneyen veya zararlı sorgular gönderen IP adresleri görebilirsiniz. Bu tür erişimleri baştan engellemek, sunucu kaynaklarınızı korur ve güvenlik duvarınızın önünde ek bir katman oluşturur. Benim sunucularımda, özellikle /wp-admin veya /admin gibi kritik dizinler için bu kuralı mutlaka uygularım.
Yöntem 1: Belirli IP'leri veya Ağları Engelleme (Blacklist)
En basit yöntem, istenmeyen bir IP'yi tüm site için engellemektir. Bunun için Nginx yapılandırma dosyanıza (genellikle site konfigürasyonunuz olan /etc/nginx/sites-available/siteniz dosyasına) aşağıdaki direktifleri eklemelisiniz.
Burada sıra çok önemli! Nginx kuralları yukarıdan aşağı okunur ve ilk eşleşen kural uygulanır.
Dikkat Edilmesi Gerekenler
Kendi IP'nizi yanlışlıkla engellememeye dikkat edin! Kuralı ekledikten sonra mutlaka Nginx konfigürasyon testi yapın ve ardından servisi yeniden başlatın.
Yöntem 2: Sadece Belirli IP'lere İzin Verme (Whitelist)
Bu yöntem daha güvenlidir ve genellikle yönetim panelleri veya API uç noktaları için kullanılır. Örneğin, phpMyAdmin'e sadece ofis IP'nizden erişilsin istiyorsanız:
İpuçları ve İleri Seviye Kullanım
Kurallarınız karmaşıklaştığında, tüm engelleme/izin verme IP listelerinizi ayrı bir dosyada tutmak yönetimi kolaylaştırır. /etc/nginx/conf.d/ip_blacklist.conf gibi bir dosya oluşturup, içine `deny` satırlarınızı yazabilirsiniz. Daha sonra ana konfigürasyon dosyanıza bu dosyayı `include` edersiniz.
Ayrıca, log dosyalarınızda engellenen istekleri görmek için `error_log` seviyesini `notice` veya `info` yapabilirsiniz. Bu sayede kimlerin engellendiğini takip edebilirsiniz.
Umarım bu rehber, sunucu güvenliğinizi sağlamlaştırmanıza yardımcı olur. Benzer kuralları, brute-force saldırılarına karşı limit req modülü ile birlikte kullanmak da çok etkili oluyor. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya sorunuz varsa aşağıya yazmaktan çekinmeyin.
Sunucu loglarınızı incelediğinizde, anlamsız istekler yapan, sürekli login sayfasını deneyen veya zararlı sorgular gönderen IP adresleri görebilirsiniz. Bu tür erişimleri baştan engellemek, sunucu kaynaklarınızı korur ve güvenlik duvarınızın önünde ek bir katman oluşturur. Benim sunucularımda, özellikle /wp-admin veya /admin gibi kritik dizinler için bu kuralı mutlaka uygularım.
En basit yöntem, istenmeyen bir IP'yi tüm site için engellemektir. Bunun için Nginx yapılandırma dosyanıza (genellikle site konfigürasyonunuz olan /etc/nginx/sites-available/siteniz dosyasına) aşağıdaki direktifleri eklemelisiniz.
NGINX:
server {
listen 80;
server_name bingunluk.com;
# 203.0.113.5 IP adresini tamamen engelle
deny 203.0.113.5;
# 198.51.100.0/24 alt ağını (yani 198.51.100.1'den 198.51.100.254'e kadar) engelle
deny 198.51.100.0/24;
# Diğer tüm IP'lere izin ver (Bu satır varsayılan olarak geçerlidir, yazmasanız da olur)
allow all;
... # Diğer sunucu ayarlarınız
}
Burada sıra çok önemli! Nginx kuralları yukarıdan aşağı okunur ve ilk eşleşen kural uygulanır.
Kendi IP'nizi yanlışlıkla engellememeye dikkat edin! Kuralı ekledikten sonra mutlaka Nginx konfigürasyon testi yapın ve ardından servisi yeniden başlatın.
Bash:
sudo nginx -t
sudo systemctl reload nginx
Bu yöntem daha güvenlidir ve genellikle yönetim panelleri veya API uç noktaları için kullanılır. Örneğin, phpMyAdmin'e sadece ofis IP'nizden erişilsin istiyorsanız:
NGINX:
server {
listen 80;
server_name bingunluk.com;
location /phpmyadmin/ {
# Önce izin verilecek IP'leri tanımla
allow 192.168.1.100; # Ofis bilgisayarı
allow 203.0.113.10/32; # Tek bir IP
allow 10.0.0.0/8; # Tüm iç ağ
# Yukarıda tanımlanmayan TÜM IP'leri engelle
deny all;
... # phpMyAdmin yönlendirme ayarları
}
... # Diğer location blokları
}
Kurallarınız karmaşıklaştığında, tüm engelleme/izin verme IP listelerinizi ayrı bir dosyada tutmak yönetimi kolaylaştırır. /etc/nginx/conf.d/ip_blacklist.conf gibi bir dosya oluşturup, içine `deny` satırlarınızı yazabilirsiniz. Daha sonra ana konfigürasyon dosyanıza bu dosyayı `include` edersiniz.
NGINX:
# Ana site konfigürasyonunuzun içinde
include /etc/nginx/conf.d/ip_blacklist.conf;
Ayrıca, log dosyalarınızda engellenen istekleri görmek için `error_log` seviyesini `notice` veya `info` yapabilirsiniz. Bu sayede kimlerin engellendiğini takip edebilirsiniz.
Umarım bu rehber, sunucu güvenliğinizi sağlamlaştırmanıza yardımcı olur. Benzer kuralları, brute-force saldırılarına karşı limit req modülü ile birlikte kullanmak da çok etkili oluyor. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya sorunuz varsa aşağıya yazmaktan çekinmeyin.