ModSecurity WAF ile Apache ve Nginx Güvenliğini Derinlemesine Sağlama
Web uygulamalarının sürekli tehdit altında olduğu bir ortamda, geleneksel ağ güvenlik duvarları uygulama katmanı saldırılarına karşı yetersiz kalır. Bu noktada Web Uygulama Güvenlik Duvarları (WAF) devreye girer. ModSecurity, açık kaynaklı bir WAF motoru olarak Apache ve Nginx gibi popüler web sunucuları için esnek ve güçlü bir koruma katmanı sunar. Bu makale, ModSecurity'nin bu sunucularla entegrasyonunu, teknik derinliklerini ve üretim senaryolarında nasıl kullanılacağını ele almaktadır.
ModSecurity'nin Çalışma Prensibi
ModSecurity, HTTP trafiğini gerçek zamanlı olarak izleyen ve analiz eden kural tabanlı bir motor olarak işler. Geleneksel güvenlik duvarlarından farklı olarak, HTTP isteklerinin ve yanıtlarının içeriğini, başlıklarını ve URL'lerini detaylı bir şekilde inceleyebilir. Bu, SQL Enjeksiyonu, Cross-Site Scripting (XSS), uzaktan kod çalıştırma ve diğer OWASP Top 10 kategorisindeki zafiyetlere karşı koruma sağlar.
ModSecurity'nin kalbinde, belirli desenleri veya koşulları arayan ve bu koşullar karşılandığında önceden tanımlanmış eylemleri (engelleme, günlük kaydı, uyarı vb.) tetikleyen kurallar bulunur. Bu kurallar, Core Rule Set (CRS) gibi geniş kapsamlı setlerle veya özel olarak yazılmış kurallarla yapılandırılabilir.
Apache HTTP Sunucusu ile ModSecurity Entegrasyonu
Apache HTTP sunucusu için ModSecurity, bir modül olarak doğrudan entegre edilir. Bu, Apache'nin istek işleme döngüsünün erken bir aşamasında HTTP trafiğini analiz etmesine olanak tanır.
Kurulum ve Temel Yapılandırma
Debian/Ubuntu tabanlı sistemlerde kurulum oldukça basittir:
sudo apt update
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2Kurulumun ardından ModSecurity, /etc/modsecurity dizinindeki yapılandırma dosyalarını kullanır. Temel yapılandırma dosyası genellikle modsecurity.conf-recommended şeklindedir ve üretim ortamına uygun hale getirmek için kopyalanır ve düzenlenir:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.confBu dosya içinde en kritik parametre SecRuleEngine'dır. Varsayılan olarak DetectionOnly olabilir; koruma sağlamak için On olarak ayarlanmalıdır:
SecRuleEngine OnDiğer önemli yönergeler:
SecAuditEngine RelevantOnly: Sadece kural tetiklendiğinde veya hata oluştuğunda denetim günlüğü kaydı yapar.SecAuditLog /var/log/apache2/modsec_audit.log: Denetim günlüğünün yolu.SecAuditLogParts ABCEFHZ: Günlük kaydının hangi bölümlerini içereceğini belirtir.
OWASP Core Rule Set (CRS) Entegrasyonu
ModSecurity'nin tam potansiyelini kullanmak için OWASP CRS'i entegre etmek şarttır. CRS, genel web uygulaması güvenlik açıklarına karşı geniş bir kural koleksiyonudur.
sudo apt install owasp-crs
sudo ln -s /usr/share/modsecurity-crs/crs-setup.conf /etc/modsecurity/crs-setup.conf
sudo ln -s /usr/share/modsecurity-crs/rules/ /etc/modsecurity/rulesApache yapılandırmanızda (örn. /etc/apache2/mods-enabled/security2.conf veya sanal ana bilgisayar yapılandırmanızda) CRS'i dahil edin:
<IfModule security2_module>
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /etc/modsecurity/crs-setup.conf
IncludeOptional /etc/modsecurity/rules/*.conf
</IfModule>Gerçek Senaryo: SQL Enjeksiyonunu Engelleme (Apache)
Bir e-ticaret uygulamasının arama kutusuna yapılan SQL enjeksiyon denemelerini ele alalım. Saldırgan ' OR 1=1-- gibi bir ifade gönderebilir.
# Örnek SQL Enjeksiyon Denemesi
GET /search?query=' OR 1=1-- HTTP/1.1
Host: example.comCRS, bu tür desenleri otomatik olarak algılayan kurallar içerir. Örneğin, 942100.conf içindeki SQL enjeksiyon kuralları bu isteği yakalayacaktır. ModSecurity bu isteği tespit ettiğinde, Apache loglarında bir uyarı kaydı oluşturacak ve SecRuleEngine On ise isteği engelleyecektir. Varsayılan olarak, bir 403 Forbidden yanıtı dönecektir. Denetim günlüğünde (modsec_audit.log) bu olayın detaylarını görebilirsiniz:
--dae63ce8-A--
[01/Dec/2023:10:30:00 +0300] WAF-AUDIT-LOG-ID: 16789
--dae63ce8-B--
GET /search?query=%27%20OR%201%3D1-- HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
--dae63ce8-F--
HTTP/1.1 403 Forbidden
--dae63ce8-H--
Message: Warning. Pattern match "(?i:(\\W[oO][rR]\\W+[\\d\\w]\\s*[=!]\\s*[\\d\\w])|([\\w_]+[\\s\\t]*(?:=|LIKE|IN)\\s*(?:(?:'[^']*?(?:\\W|\\[\\d\\w]+)\\s*(?:AND|OR|UNION)[\\s\\t]+[\\d\\w]+)|(?:\\(?+))))" at ARGS:query. [file "/etc/modsecurity/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "100"]
Tag: application-attack
Tag: SQLI
Tag: OWASP_CRS/WEB_ATTACK/SQL_INJECTION
Severity: 5
--dae63ce8-Z--Nginx ile ModSecurity Entegrasyonu
Nginx, Apache'den farklı bir mimariye sahip olduğundan, ModSecurity'nin Nginx ile entegrasyonu doğrudan bir modül yüklemesi şeklinde değildir. Bunun yerine, Nginx'in ModSecurity konnektörü (ngx_http_modsecurity_module) aracılığıyla kaynak koddan derlenmesi gerekir.
Kurulum ve Derleme
Nginx'i ModSecurity desteğiyle derlemek için ModSecurity kütüphanesi (libmodsecurity3) ve Nginx kaynak koduna ihtiyacımız var:
# libmodsecurity3 kurulumu
sudo apt install git autoconf automake libtool build-essential doxygen libcurl4-gnutls-dev libxml2-dev libyajl-dev libgeoip-dev libssl-dev libfuzzy-dev
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make -j$(nproc)
sudo make install
# Nginx ModSecurity konnektörü ve Nginx derlemesi
sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
# Nginx kaynak kodu indirme (sürümünüzü kontrol edin)
cd ..
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xvzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
make modules
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/
# Eğer Nginx'i sıfırdan derliyorsanız:
# ./configure --add-module=../ModSecurity-nginx [...diğer Nginx modülleri...]
# make -j$(nproc)
# sudo make installNginx Yapılandırması
Nginx ana yapılandırma dosyasında (nginx.conf) modülü yükleyin:
load_module modules/ngx_http_modsecurity_module.so;Ardından, ModSecurity yapılandırma dosyasını (modsecurity.conf) ve CRS kurallarını Nginx'in erişebileceği bir yere kopyalayın. Örnek olarak, Apache'deki gibi /etc/nginx/modsecurity dizini kullanılabilir.
# Örnek Nginx sunucu bloğu
server {
listen 80;
server_name example.com;
# ModSecurity'yi bu sunucu bloğu için etkinleştir
modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
modsecurity_rules_file /etc/nginx/modsecurity/crs-setup.conf;
modsecurity_rules_file /etc/nginx/modsecurity/rules/*.conf;
location / {
# Diğer Nginx yönergeleri...
proxy_pass http://backend_app;
}
}modsecurity_rules_file yönergesi, belirtilen dosyaları yükler. Nginx, her gelen istekte bu kuralları uygular.
Gerçek Senaryo: XSS Koruması (Nginx)
Bir web formuna JavaScript kodu enjekte etme denemesi yaygın bir XSS saldırı vektörüdür. Saldırgan <script>alert('XSS')</script> gibi bir yük gönderebilir.
# Örnek XSS Denemesi
POST /comment HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
comment=<script>alert('XSS')</script>Nginx üzerindeki ModSecurity ve CRS, bu POST isteğinin gövdesindeki zararlı JavaScript desenini algılayacaktır. CRS'deki XSS kuralları (örn. 941100.conf) tetiklenecek ve ModSecurity, isteği engelleyecektir. Aynı şekilde, Nginx hata loglarında veya ModSecurity denetim loglarında ilgili uyarıları bulabilirsiniz.
Üretim Ortamı İçin Dikkat Edilmesi Gerekenler
- Performans Etkisi: ModSecurity, her isteği analiz ettiği için belirli bir işlem yükü getirir. Özellikle yüksek trafikli sitelerde, kuralları optimize etmek ve sadece gerekli korumaları etkinleştirmek önemlidir.
- Yanlış Pozitifler (False Positives): WAF'lar, meşru trafikleri yanlışlıkla zararlı olarak işaretleyebilir. Bu, kullanıcı deneyimini olumsuz etkiler. Üretim ortamına geçmeden önce kapsamlı testler yapılmalı ve yanlış pozitiflere neden olan kurallar hassas bir şekilde ayarlanmalı veya devre dışı bırakılmalıdır.
SecRuleRemoveByIdveyaSecRuleUpdateTargetByIdgibi yönergelerle kural ince ayarı yapılabilir. - Günlük Kaydı ve İzleme: Detaylı günlük kaydı (
SecAuditLog) ve sürekli izleme, saldırı girişimlerini tespit etmek ve WAF'ın etkinliğini değerlendirmek için kritiktir. SIEM (Security Information and Event Management) sistemleriyle entegrasyon, bu verileri merkezi olarak toplamanıza ve analiz etmenize yardımcı olur. - Kural Seti Yönetimi: OWASP CRS düzenli olarak güncellenir. Bu güncellemelerin takip edilmesi ve üretim sistemlerine kontrollü bir şekilde uygulanması, yeni tehditlere karşı korunmak için önemlidir.
- Ters Proxy (Reverse Proxy) Modunda Çalışma: Hem Apache hem de Nginx genellikle ters proxy olarak kullanılır. ModSecurity'nin istemci ile sunucu arasındaki ilk temas noktası olan ters proxy katmanında çalışması, arkadaki uygulama sunucularına ulaşmadan önce tehditleri filtrelemesi açısından en verimli yaklaşımdır.
Sonuç
ModSecurity, Apache ve Nginx tabanlı web altyapıları için vazgeçilmez bir uygulama katmanı güvenlik aracıdır. Doğru yapılandırıldığında ve etkin bir kural setiyle kullanıldığında, web uygulamalarını geniş bir yelpazedeki saldırılara karşı korur. Kurulum ve entegrasyon süreçleri, sunucu mimarisine bağlı olarak farklılık gösterse de, sağladığı güvenlik katmanı, bu çabaya değer bir yatırımdır. Üretim ortamlarında performans, yanlış pozitifler ve izleme gibi faktörleri göz önünde bulundurarak sürekli optimizasyon ve yönetim, ModSecurity'nin uzun vadeli etkinliğini sağlar.