Ubuntu Sunucuda Nginx ile Basit ve Etkili IP Engelleme Rehberi 
Selam sistemciler!
Bugün, özellikle yeni başlayan arkadaşlarımızın sıkça sorduğu ve aslında oldukça basit bir güvenlik önlemini ele alacağız: Nginx üzerinden belirli IP adreslerini veya tüm bir IP bloğunu engellemek. Fail2ban gibi araçlar harikadır ama bazen sadece "şu IP bir daha gelmesin" demek istersiniz. İşte o zaman doğrudan Nginx'in gücü devreye giriyor.
Neden Nginx ile IP Engelleriz?
UFW (Uncomplicated Firewall) sistem seviyesinde bir engelleme yapar ve bu genellikle tercih edilen yoldur. Ancak, Nginx seviyesinde engellemenin de bazı pratik avantajları var:
Yöntem 1: Tekil IP Adresi Engelleme
Bu en yaygın yöntem. Engellemek istediğiniz IP adresini (örneğin, `203.0.113.10`) Nginx yapılandırma dosyanızdaki ilgili `server` bloğuna ekliyoruz.
Öncelikle, genellikle `/etc/nginx/sites-available/` dizininde bulunan sitenizin yapılandırma dosyasını bir metin editörüyle açalım. Ben nano kullanıyorum:
Dosyanın içinde, `server { ... }` bloğunun içine, genellikle `location / { ... }` bölümünün hemen üstüne aşağıdaki satırı ekleyin:
Tam hali şöyle görünebilir:
Önemli Not: `deny` direktifi, eklediğiniz yere göre çalışır. Yukarıdaki gibi `server` bloğu seviyesine koyarsanız, o sunucu bloğundaki (yani web sitesindeki) tüm lokasyonlara erişimi engeller.
Yöntem 2: IP Bloklarını (CIDR) Engelleme
Bazen sadece bir IP değil, bir ülkeden veya bir servis sağlayıcıdan gelen tüm bir IP aralığını engellemek isteyebilirsiniz. Bunun için CIDR notasyonunu kullanıyoruz.
Örneğin, `203.0.113.0/24` bloğunu (203.0.113.1'den 203.0.113.254'e kadar) engellemek için:
Yöntem 3: Belirli Bir URL'ye Erişimi IP'ye Göre Kısıtlama
Bu çok kullanışlı bir yöntem! Diyelim ki WordPress yönetim panelinize (`/wp-admin`) sadece sizin ofis IP'nizden erişilsin istiyorsunuz. Ofis IP'niz `198.51.100.50` olsun.
Mantık sırası önemli! Nginx kuralları yukarıdan aşağı okunur. Önce `allow` ile istisna tanımlar, sonra `deny all` ile geri kalan her şeyi engellersiniz.
Değişiklikleri Aktif Etmek ve Test Etmek
Kuralları yazdıktan sonra, Nginx yapılandırmasında bir sözdizimi hatası olmadığını mutlaka test edin:
Eğer "syntax is ok" ve "test is successful" mesajlarını görürseniz, Nginx'i yeniden yükleyerek değişiklikleri aktif hale getirin:
Test: Engellediğiniz IP adresinden (eğer mümkünse) veya bir VPN üzerinden sitenize erişmeyi deneyin. 403 Forbidden hatası almalısınız. Ayrıca, Nginx erişim loglarını kontrol ederek engellemenin çalıştığını görebilirsiniz:
Önemli Uyarılar ve İpuçları
Umarım bu basit ama etkili yöntem, sunucu güvenlik sandığınıza yeni bir araç eklemenize yardımcı olur. Siz sunucunuzda IP engelleme için hangi yöntemleri tercih ediyorsunuz? Fail2ban kurallarınızda favori "jail"leriniz var mı? Yorumlarda deneyimlerinizi paylaşın!
Selam sistemciler!
Neden Nginx ile IP Engelleriz?
UFW (Uncomplicated Firewall) sistem seviyesinde bir engelleme yapar ve bu genellikle tercih edilen yoldur. Ancak, Nginx seviyesinde engellemenin de bazı pratik avantajları var:
- Hızlı ve Anlık: Değişiklik hemen aktif olur, sunucuyu yeniden başlatmaya gerek yok.
- Esnek: Sadece belirli bir web sitesine (server bloğuna) veya tüm sunucuya erişimi engelleyebilirsiniz.
- Loglama: Engellenen istekler Nginx erişim loglarında (access.log) net bir şekilde görülebilir.
- Ek Kontrol: Sadece belirli URL'lere (/wp-admin, /phpmyadmin gibi) gelen istekleri engellemek için kullanılabilir.
Yöntem 1: Tekil IP Adresi Engelleme
Bu en yaygın yöntem. Engellemek istediğiniz IP adresini (örneğin, `203.0.113.10`) Nginx yapılandırma dosyanızdaki ilgili `server` bloğuna ekliyoruz.
Öncelikle, genellikle `/etc/nginx/sites-available/` dizininde bulunan sitenizin yapılandırma dosyasını bir metin editörüyle açalım. Ben nano kullanıyorum:
Bash:
sudo nano /etc/nginx/sites-available/siteniz.com
Dosyanın içinde, `server { ... }` bloğunun içine, genellikle `location / { ... }` bölümünün hemen üstüne aşağıdaki satırı ekleyin:
NGINX:
deny 203.0.113.10;
Tam hali şöyle görünebilir:
NGINX:
server {
listen 80;
server_name siteniz.com www.siteniz.com;
root /var/www/siteniz.com/html;
index index.html index.htm index.nginx-debian.html;
# IP ENGELİ BURADA
deny 203.0.113.10;
location / {
try_files $uri $uri/ =404;
}
}
Önemli Not: `deny` direktifi, eklediğiniz yere göre çalışır. Yukarıdaki gibi `server` bloğu seviyesine koyarsanız, o sunucu bloğundaki (yani web sitesindeki) tüm lokasyonlara erişimi engeller.
Yöntem 2: IP Bloklarını (CIDR) Engelleme
Bazen sadece bir IP değil, bir ülkeden veya bir servis sağlayıcıdan gelen tüm bir IP aralığını engellemek isteyebilirsiniz. Bunun için CIDR notasyonunu kullanıyoruz.
Örneğin, `203.0.113.0/24` bloğunu (203.0.113.1'den 203.0.113.254'e kadar) engellemek için:
NGINX:
deny 203.0.113.0/24;
Yöntem 3: Belirli Bir URL'ye Erişimi IP'ye Göre Kısıtlama
Bu çok kullanışlı bir yöntem! Diyelim ki WordPress yönetim panelinize (`/wp-admin`) sadece sizin ofis IP'nizden erişilsin istiyorsunuz. Ofis IP'niz `198.51.100.50` olsun.
NGINX:
location /wp-admin {
allow 198.51.100.50; # Sadece bu IP erişebilir
deny all; # Yukarıdaki IP dışındaki HER ŞEY engellenir
}
Mantık sırası önemli! Nginx kuralları yukarıdan aşağı okunur. Önce `allow` ile istisna tanımlar, sonra `deny all` ile geri kalan her şeyi engellersiniz.
Değişiklikleri Aktif Etmek ve Test Etmek
Bash:
sudo nginx -t
Eğer "syntax is ok" ve "test is successful" mesajlarını görürseniz, Nginx'i yeniden yükleyerek değişiklikleri aktif hale getirin:
Bash:
sudo systemctl reload nginx
Test: Engellediğiniz IP adresinden (eğer mümkünse) veya bir VPN üzerinden sitenize erişmeyi deneyin. 403 Forbidden hatası almalısınız. Ayrıca, Nginx erişim loglarını kontrol ederek engellemenin çalıştığını görebilirsiniz:
Bash:
sudo tail -f /var/log/nginx/access.log | grep 203.0.113.10
Önemli Uyarılar ve İpuçları
- Kendi IP'nizi Engellemeyin!
Bu çok sık yapılan bir hatadır. Kuralı eklemeden önce mevcut genel IP adresinizi kontrol edin (`curl ifconfig.me` veya `ipinfo.io/ip`). - Bu yöntem, IP spoofing (sahteciliği) yapılan sofistike saldırılara karşı tek başına yeterli değildir. UFW gibi bir sistem güvenlik duvarı her zaman birincil korumanız olmalıdır. Bu, ek bir katman olarak düşünülmeli.
- Çok fazla IP engellemek Nginx yapılandırma dosyanızı karışık hale getirebilir. Bu durumda, engellenen IP listesini ayrı bir dosyada (`/etc/nginx/blocked_ips.conf` gibi) tutup ana yapılandırma dosyanıza `include` direktifi ile eklemek daha temiz bir yöntemdir.
Umarım bu basit ama etkili yöntem, sunucu güvenlik sandığınıza yeni bir araç eklemenize yardımcı olur. Siz sunucunuzda IP engelleme için hangi yöntemleri tercih ediyorsunuz? Fail2ban kurallarınızda favori "jail"leriniz var mı? Yorumlarda deneyimlerinizi paylaşın!