ModSecurity Nedir ve Neden Kullanılmalı?
ModSecurity, popüler bir açık kaynak Web Uygulama Güvenlik Duvarı'dır (WAF). Nginx veya Apache gibi web sunucularına bir modül olarak entegre edilerek, HTTP trafiğini gerçek zamanlı olarak incelemesine ve potansiyel saldırıları (SQL Enjeksiyonu, XSS, Path Traversal vb.) engellemesine olanak tanır. Ubuntu üzerinde Nginx ile ModSecurity kullanmak, uygulamanızın güvenliğini önemli ölçüde artırır.
Zorluk Seviyesi
Bu kurulum, temel Linux komut bilgisi ve Nginx yapılandırmasına aşinalık gerektirdiğinden Intermediate (Orta Seviye) olarak sınıflandırılmıştır.
Adım 1: Ön Gereksinimler ve Sistem Güncellemesi
Kuruluma başlamadan önce sisteminizin güncel olduğundan emin olun ve gerekli geliştirme araçlarını yükleyin.
- Sistem paketlerini güncelleyin:
sudo apt update && sudo apt upgrade -y
- Gerekli derleme araçlarını ve kütüphaneleri yükleyin (Nginx'i kaynaktan derleyecekseniz bu gereklidir):
sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev git curl wget gnupg2 software-properties-common
Adım 2: Nginx Kaynaktan Derleme (ModSecurity Entegrasyonu İçin)
ModSecurity'nin Nginx ile sorunsuz çalışması için genellikle Nginx'in kaynaktan derlenmesi ve ModSecurity konektörünün eklenmesi önerilir. Bu örnekte, yaygın olarak kullanılan Nginx sürümünü kullanacağız.
- Nginx kaynak kodunu indirin (Örnek: 1.24.0):
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xvzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
- ModSecurity Connector'ü indirin ve derleme seçeneklerine ekleyin:
# ModSecurity Connector'ü indirin
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
# Nginx'i yapılandırın (Mevcut modüllerinizi koruduğunuzdan emin olun)
./configure --with-compat --add-dynamic-module=./ModSecurity-nginx
UYARI: Eğer mevcut bir Nginx kurulumunuz varsa ve onu yeniden derlemek istemiyorsanız, ModSecurity'yi bir dinamik modül olarak derleyip yükleyebilirsiniz. Ancak bu, özellikle Ubuntu PPA'ları üzerinden kurulan paketlenmiş Nginx sürümleriyle bazen karmaşık olabilir.
Adım 3: ModSecurity Kurulumu ve Yapılandırması
ModSecurity motorunu (libmodsecurity) ve yapılandırma dosyalarını kurmalıyız.
- ModSecurity v3 motorunu indirin ve derleyin:
cd .. # Ana dizine dönün
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
sudo make install
- ModSecurity yapılandırma dosyalarını Nginx dizinine kopyalayın:
sudo cp modsecurity.conf-recommended /etc/nginx/modsecurity.conf
# ModSecurity yapılandırma dosyasını düzenleyin (örn: loglama seviyesini ayarlamak için)
sudo nano /etc/nginx/modsecurity.conf
Dosya içinde SecRuleEngine DetectionOnly satırını bulun ve güvenlik duvarını etkinleştirmek için DetectionOnly yerine On olarak değiştirin:
SecRuleEngine On
Adım 4: OWASP Core Rule Set (CRS) Kurulumu
ModSecurity'nin etkili olabilmesi için temel bir kural setine ihtiyacı vardır. OWASP CRS, endüstri standardıdır.
- CRS'yi indirin (Önerilen sürüm 3.3.x):
cd /etc/nginx/
sudo git clone https://github.com/coreruleset/coreruleset.git modsecurity_crs
cd modsecurity_crs
# Yapılandırma dosyasını yeniden adlandırın
sudo mv crs-setup.conf.example crs-setup.conf
Adım 5: Nginx Yapılandırmasına Entegrasyon
Nginx'in ModSecurity modülünü yüklemesi ve CRS kurallarını kullanması için ana yapılandırma dosyasını düzenlememiz gerekir.
- Nginx ana yapılandırma dosyasını açın (genellikle
/etc/nginx/nginx.conf):
sudo nano /etc/nginx/nginx.conf
http { ... } bloğunun içine aşağıdaki satırları ekleyin:
# ModSecurity global ayarları
load_module modules/ngx_http_modsecurity_module.so;
http {
# ... diğer http ayarları
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity.conf;
modsecurity_rules_file /etc/nginx/modsecurity_crs/crs-setup.conf;
modsecurity_rules_file /etc/nginx/modsecurity_crs/rules/*.conf;
# ...
}
Ayrıca, Nginx sunucu bloğunda (server { ... }) ModSecurity'yi belirli bir site için etkinleştirebilirsiniz:
server {
listen 80;
server_name example.com;
location / {
modsecurity on;
# ... diğer ayarlar
}
}
Adım 6: Test ve Doğrulama
Nginx'i yeniden başlatmadan önce yapılandırmayı kontrol edin ve ardından test edin.
- Nginx yapılandırmasını kontrol edin:
sudo nginx -t
- Nginx servisini yeniden başlatın:
sudo systemctl restart nginx
- Bir SQL Enjeksiyonu denemesi ile WAF'ı test edin (
curlkullanarak):
curl -i -X GET 'http://your_server_ip/?id=1%20OR%201=1'
Eğer ModSecurity başarılı bir şekilde yapılandırıldıysa, bu istek 403 Forbidden hatasıyla engellenmelidir. Log dosyalarını (genellikle /var/log/nginx/error.log) kontrol ederek engellemeyi doğrulayın.



