Güncelleme: Geçerli cevap tamamen güncellenmiştir.
Bu tartışmaya göre WWW Güvenlik Asistanı adlı bir GitHub deposu oluşturdum . ask_ubuntu
Bu cevaba adanmış denilen bir şube var . Daha önce burada bulunan tüm referanslar karakter sınırlaması nedeniyle kaldırılmıştır - GitHub'da kullanılabilir.
İşte Ubuntu 16.04'te Apache2 güvenliğinin nasıl artırılacağı , tam bir mekanizmaya dahil olan birkaç yol .
İçerik tablosu:
- WWW Güvenlik Yardımcısı Komut Dosyası (WSAS) ► Iptables
- Iptables - Temel Yapılandırma - Kaydet ve Geri Yükle
- Apache2 için ModEvasive
- ModEvasive ► WSAS ► Iptables
- Apache2 için ModSecurity 2.9
- ModSecurity OWASP Çekirdek Kural Seti 3.x
- ModSecurity Kuralları Beyaz Liste
- ModSecurity Kuralları ► WSAS ► Iptables
- ModSecurity ve Apache Günlük Dosyaları
- ModSecurity Günlük Dosyaları ► Fail2Ban ► Iptables
- ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► Iptables
- ModSecurity GuardianLog ► HTTPD Özel Analiz ► WSAS ► Iptables
Ayrıca HTTPS kullanmanın her zaman iyi olduğunu varsayalım:
WWW Güvenlik Yardımcısı Komut Dosyası ► Iptables
İşte senaryo sunulmaktadır www-security-assistant.bash
. Kötü amaçlı IP adreslerinin ele alınmasında size yardımcı olabilir. Komut dosyasının iki modu vardır.
Otomatik mod
Harici bir program, Apache's gibi mod_security
kötü amaçlı bir $IP
adres sağlar. Bu durumda, komut dosyasını çağıran sözdizimi şöyle olmalıdır:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
Bu modda komut dosyası iki işlem aşaması sağlar ve her işlem için yöneticilere bir e-posta gönderir .
İlk aşama: İlk birkaç için 'ihlallerde' kaynak $IP
olacak bir süre boyunca yasaklı değerine eşit $BAN_TIME
. Bu mod komutu kullanır at
.
İkinci aşama: Belli olan geçişlerin sayısı $IP
değerine eşit olduğunda $LIMIT
, bu $IP
adres Iptables aracılığıyla kalıcı olarak yasaklanacak ve $BAN_LIST
.
Manuel mod
Bu mod aşağıdaki seçenekleri kabul eder:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Dosyaya bir girdi oluşturur /var/www-security-assistant/iptables-DROP.list
ve şu şekilde bir kural oluşturur:
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Dosyaya bir girdi oluşturur /var/www-security-assistant/iptables-DROP-CLEAR.list
, belirli Iptables kuralını kaldırır $IP
, geçmişten ve aşağıdakilerden kaldırır $BAN_LIST
:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Dosyaya yalnızca bir girdi oluşturur /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Dosyaya bir girdi oluşturur /var/www-security-assistant/iptables-ACCEPT.list
ve şu şekilde bir kural oluşturur:
iptables -A GUARDIAN -s $IP -j ACCEPT
Bağımlılıklar
Senaryo kullanır iptables-save.sh
ve sonraki bölümde açıklanan iptables
zincir GUARDIAN
. İçinde birkaç dosya oluşturur ve saklar $WORK_DIR
:
www-security-assistant.history
- önceki IP işlemlerinin verilerini içerir.
www-security-assistant.mail
- komut dosyası tarafından gönderilen son e-postanın içeriği.
iptables-ACCEPT.list
; iptables-DROP.list
ve iptables-DROP-CLEAR.list
.
Komut dosyası, e-posta göndermek için minimum bir yapılandırmaya ihtiyaç duyar:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
Herhangi bir yapılandırılmış HTTPS hizmeti varsa TLS sertifikası Postfix hizmetinde kullanılabilir.
Buna ek olarak komut kullanır at
: sudo apt install at
.
Kurulum
Çalışma dizini oluşturun, diyelim /var/www-security-assistant
. İndirin www-security-assistant.bash
ve yürütülebilir yapın:
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
www-security-assistant.bash
Özel komut olarak kullanılabilir yap :
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Üzerinden şifre olmadan www-data
çalıştırma izni verin . Ek ' ' kuralıyla yeni bir dosya oluşturmak ve düzenlemek için aşağıdaki komutu kullanın :www-security-assistant.bash
sudo
sudoers
sudo visudo -f /etc/sudoers.d/www-security-assistant
Dosyanın içine aşağıdaki satırı ekleyin - dosyayı kaydedin ve çıkın:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Tweak www-security-assistant.bash
. En azından değişkenin değerini değiştirin $EMAIL_TO
.
Kontrol etmek
Kendinizi temsil $AGENT
edin ve Otomatik MOD'un düzgün çalışıp çalışmadığını kontrol edin:
www-security-assistant.bash 192.168.1.177 Guardian
Sonra e-postanızı kontrol edin, yazın iptables -L GUARDIAN -n
, dosyaları gözden geçirin www-security-assistant.history
ve www-security-assistant.mail
. Yukarıdaki komutu 5 kez çalıştırın ve dosyaları gözden iptables-DROP.list
ve iptables-CURRENT.conf
.
Manuel MOD'un düzgün çalışıp çalışmadığını kontrol edin - localhost'unuzu Beyaz Listeye ekleyin:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Sonra dosyayı kontrol edin iptables-ACCEPT.list
.
Bu öğreticinin geri kalanı www-security-assistant
, sisteminizle nasıl tümleştireceğinizdir .
Iptables - Temel Yapılandırma - Kaydet ve Geri Yükle
Temel yapılandırma
Aşağıdaki kuralları eklemeden önce lütfen bu kılavuzu okuyun .
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Sonraki eylemleri yapmadan önce yeni bir SSH bağlantısı açın ve her şeyin yolunda olup olmadığını kontrol etmek için sisteminize giriş yapmayı deneyin!
Kaydet ve Geri Yükle
Bu, iptables
sistemin durdur-başlat (veya yeniden başlat) işlemi sırasında koniyi kaydedecek ve geri yükleyecek özel komut dosyaları aracılığıyla gerçekleştirilebilir . (Iptables kurallarını ayarlamak için UFW kullanırsak, bu adıma gerek yoktur.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Yeni zincir oluştur
Yeni zincir oluşturun, çağırın GUARDIAN
ve INPUT
zincire 3 numara olarak ekleyin :
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Kontrol etmek
Sistemi yeniden başlatın ve yapılandırmayı kontrol edin. Lütfen kullanın sudo systemctl reboot
(zorlama seçeneğini kullanmayın reboot -f
). Sistem tekrar çevrimiçi olduğunda, yeni oluşturulan zincirin var olup olmadığını kontrol edebiliriz:
sudo iptables -L GUARDIAN -n
Apache2 için ModEvasive
ModEvasive, Apache'nin HTTP DoS veya DDoS saldırısı veya kaba kuvvet saldırısı durumunda kaçırma eylemi sağlaması için kaçırma manevraları modülüdür. Daha fazla oku...
Kurulum
Modülü kurun ve etkinleştirin:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Günlük Dizini oluşturun ve aşağıdakiler için erişilebilir olmasını sağlayın www-data
:
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
Temel yapılandırmayı ayarlayın - yapılandırma dosyasındaki açıklamayı kaldırın ve belirli yönergeleri düzenleyin:
/etc/apache2/mods-enabled/evasive.conf
Yeniden Apache: sudo systemctl restart apache2.service
.
Kontrol etmek
- Sunucunuzdan bir web sayfası açın ve tarayıcı penceresini birkaç kez yoğun bir şekilde yenileyin (basın
F5
) - 403 Yasak hata mesajı almalısınız . Günlük dizinine yeni bir kilit dosyası oluşturulur. Bu IP adresinden daha fazla geçiş tespiti için bu dosya silinmelidir.
ModEvasive ► WSAS ► Iptables
Burada , yukarıdaki bölümde oluşturulan, üzerinden mod_evasive
konuşacağız .iptables
www-security-assistant.bash
Düzenleme /etc/apache2/mods-available/evasive.conf
bu şekilde:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
Günlük dosyası oluşturun ve Apache'yi yeniden başlatın:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Biz ile DDOS saldırısı simüle Bu konfigürasyon test etmek için F5
bir yöntem, yukarıda belirtildiği gibi, ya da bir komutları kullanarak ab
, hping3
vs.
Uyarı:iptables
WSAS'ta kullanılan kural SSH bağlantılarınız da dahil olmak üzere tüm yeni bağlantıları kaynaktan DROP yapacağından dikkatli olun $IP
. Sınamalar sırasında sunucuya bağlanmak için yedek bir yol olması iyidir. Bu kuralı yalnızca HTTP / HTTPS bağlantı noktalarıyla çalışacak şekilde değiştirebilirsiniz.
Apache2 için ModSecurity 2.9
ModSecurity , kendi başına çok az koruma sağlayan bir web uygulaması güvenlik duvarı motorudur. Yararlı olması için ModSecurity'nin kurallarla yapılandırılması gerekir. Kullanıcıların ModSecurity'den tam olarak yararlanabilmesi için Trustwave's Spider Labs, sertifikalı ücretsiz bir kural seti sunuyor ... Devamını oku ...
Kurulum
Modülü kurun ve etkinleştirin:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Yapılandırma dosyası oluştur:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
/etc/modsecurity/modsecurity.conf
Dikkatlice okuyun ve düzenleyin ! En azından aşağıdaki yönergeleri ekleyin veya değiştirin:
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
Dosya /etc/apache2/mods-enabled/security2.conf
içerir /etc/modsecurity/modsecurity.conf
Apache yapılandırma içine. Bu aşamada security2.conf
şöyle görünecektir:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Günlük Dizini Oluştur:
sudo mkdir -p /var/log/apache2_mod_security
Günlük döndürmeyi ayarlayın. İlk olarak config dosyası oluşturun:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Ardından yeni dosyayı şu şekilde düzenleyin:
/var/log/apache2_mod_security/*.log { … }
Apache'yi yeniden başlatın.
Kontrol etmek
/etc/modsecurity
İçinde ek bir yapılandırma dosyası oluşturun , örneğin arayın z-customrules.conf
ve içeriği olarak aşağıdaki kuralı ekleyin:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Sunucuyu yeniden başlatın: sudo systemctl restart apache2.service
. Tarayıcınızı açın ve yazın https://example.com/?abc=../
. Sonuç: 403 Yasak . /var/log/apache2_mod_security
Daha fazla ayrıntı için günlük dosyalarına bakın.
İşleri daha eğlenceli hale getirmek için , komut dosyasını issues.php
içinde uygun bir yere yerleştirin DocumentRoot
(burada bu yer olduğunu varsayıyorum /var/www/html
):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Ardından yukarıdaki kuralı aşağıdaki şekilde değiştirin:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Apache'yi yeniden başlatın, ardından tarayıcınızı açın ve https://example.com/?abc=../
;-) Fikir SE'nin senaryosundan ödünç alınmıştır BotLovin.cs
.
Düzenleme /etc/modsecurity/z-customrules.conf
bir kez daha ve yorum (devre dışı) kural - bu sadece bir test örneği olduğunu ve sonraki bölümde açıklanan, OWASP CRS kaplıdır.
Aşağıda, tüm wp-admin
sayfa isteklerini yeniden yönlendireceğimiz , ancak bunlar dışında belirli IP adreslerinden yönlendireceğimiz başka bir örnek verilmiştir (not chain
):
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Burada iki yıkıcı eylemimiz var: (1) deny, status:403
ve (2) redirect:'/issues.php'
. Aslında deny
eyleme ihtiyacımız yok çünkü eylem geçersiz kılınacak redirect
.
ModSecurity OWASP Çekirdek Kural Seti 3.x
Ubuntu 16.04'te CSR 2.x: yükleyebilirsiniz apt install modsecurity-crs
. Burada CSR 3.x'i kuracağız , ayrıntılı talimatlar Kurulum kılavuzunda verilmiştir ( git
gereklidir).
Kurulum
Klasördeki CSR'yi klonlayın /usr/share/modsecurity-crs.3
:
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
GeoIP veritabanını yükseltin ve otomatik olarak yenileyin. (GeoIP DB artık CRS'ye dahil değildir. Bunun yerine düzenli olarak indirmeniz önerilir.) Komut dosyası util/upgrade.py
bu işlevi getirir. Bunu cron'da aşağıdaki gibi kullanabilirsiniz sudo crontab -e
:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
Yapılandırma dosyaları oluşturun:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Bu dosyaları dikkatlice okuyun ve düzenleyin! En azından SecGeoLookupDB
yönerge:
SecGeoLookupDB util/geo-location/GeoIP.dat
Apache'nin yapılandırmasını uygulayın. Düzenleme /etc/apache2/mods-available/security2.conf
bu şekilde:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
Dosyayı kaydedin ve Apache'yi yeniden başlatın.
ModSecurity Kuralları Beyaz Liste
ModSecurity Kurallarının beyaz listesi, belirli dizinler veya konum eşleşmeleri için sistem genelinde veya sanal ana bilgisayarın yapılandırması dahilinde kullanılabilen aşağıdaki ModSec yönergeleri yoluyla yapılabilir:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
mod_security2
PhpMyAdmin için devre dışı bırak . /etc/phpmyadmin/apache.conf
Bu şekilde değiştirin :
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Belirli bir dizin için belirli kuralları devre dışı bırakın:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Kuralları global olarak devre dışı bırakın. Bu amaçla yönergelerimizi Apache'nin yapılandırma dosyalarına bir yere eklemeliyiz: /etc/modsecurity/z-customrules.conf
iyi bir yer.
Tüm Apache yapılandırmasındaki kuralları devre dışı bırakın:
SecRuleRemoveById 973301 950907
ModSecurity'den geçebilmesi için bir IP adresini beyaz listeye ekleyin:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Dizin eşleşmesi içindeki kuralları devre dışı bırak:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Kural eşleşmesinin Konum eşleşmesi içindeki kimliğiyle güncellenmesi :
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
Yukarıdaki örneklerde biz varsayalım 973301
ve 950907
bizim web uygulamaları normal çalışmasını engelleyecek bir kural kimlikleri bulunmaktadır. Kuralları analiz ederek bulabiliriz modsec_audit.log
.
ModSecurity Kuralları ► WSAS ► Iptables
Aşağıda, özel SecRules oluşturmanın yanı sıra WWW Security Assistant Script'i (WSAS) nasıl arayabileceğimize dair birkaç örnek daha verilmiştir.
İlk kurulum
Ek bir başlangıç komut dosyasına ihtiyacımız var modsecurity-assistant.sh
. Bunun nedeni, ModSecurity'nin exec
eyleminin çok basit ve sınırlı bir sözdizimine sahip olmasıdır.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Komut dosyasının içine bakarsanız, ModSecurity tarafından dışa aktarılan birkaç değişken görürsünüz. Bunlar şunlardır: $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_HOST
ve $UNIQUE_ID
. Diğer değişkenler kod içinde açıklanmıştır.
Özel kural oluştur ve komut dosyalarımızı onunla çağır
İlk olarak , istek URI'sı kara listemize dahil edilen bir kelime içerdiğinde yürütülecek modsecurity-assistant.sh
(ve çağrılacak) bir kural oluşturalım www-security-assistant.bash
. /etc/modsecurity/z-customrules.conf
Aşağıdaki satırları açın ve alta ekleyin:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
- bu değişken, geçerli istekten tam URI'yi içerir. Kural daha geniş olabilir:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
modsecurity-uri-black.list
her bir kelime grubunun veya kelimenin yeni bir satıra yerleştirildiği kelime öbeklerinin bulunduğu dosyayı okuyacaktır . Günlük dosyalarından ilginç kelimeler ve ifadeler toplayabilirsiniz. Eğer modellerimizle ve modeller listemiz arasında belirli bir eşleşme varsa REQUEST_URI
kural uygulanır. Dosya boş olabilir, ancak ( touch
) oluşturmanız gerekir .
log
Eylem ile bu kural için günlük dosyalarında kütüğü girişlerini oluşturur id:150
.
drop
, deny
(İle status
) ve redirect
eylemler aittir yıkıcı eylemlerin grubundan, bunlar kural başında olmalıdır chain
(bir zincir varsa). İkinci eylem birincisini geçersiz kılar ve üçüncüsü ikinciyi geçersiz kılar, bu yüzden gerçekleştirilmesini istediğinizi seçmelisiniz ve diğerlerini silebilirsiniz.
chain
eylem, zincirin bir sonraki kuralını çağırır, ikinci kuralın sahip olmadığını unutmayın id
.
REMOTE_ADDR
isteğin IP adresini içerir.
@ipMatchFromFile
modsecurity-ip-white.list
IP adreslerinin beyaz listesini içeren dosya , yeni satırlarla ayrılır. CIDR girişleri de kabul edilebilir. Çünkü yıkıcı eylem her zaman uygulanacak zincirin lider kural bulunur, ancak belirli IP bu beyaz listede olduğu zaman exec
eylem uygulanmayacaktır. Dosya boş olabilir, ancak ( touch
) oluşturmanız gerekir .
exec
eylem harici betiğimizi çağırır. Bu eylem kesintiye uğramaz ve geçerli kural doğru olduğunda yürütülür. Bu eylem uygulandığında, uzak IP komut dosyalarımızdan işlenecektir.
setenv
bu eylem, bazı dahili değişkenleri =%{...}
envvar olarak dışa aktaracak, dışa aktarılan adlar içten farklı olabilir. Bazı değişkenler manuel olarak dışa aktarılmalı, bazıları otomatik olarak dışa aktarılmalıdır - muhtemelen küçük bir hatadır (bazı durumlarda aynı adlara sahip manuel dışa aktarma, örneğin setenv:REQUEST_URI=%{REQUEST_URI}
dışa aktarılan değişkenin boş bir değerine neden olur).
Kontrol etmek
Sunucunuzda Joomla'nın olmadığını varsayalım, dosyayı düzenleyin modsecurity-uri-black.list
ve içeriğe sahip bir satır ekleyin /joomla
. Ardından tarayıcınızı yazın https://exemple.com/joomla
. Iptables aracılığıyla yönlendirilmeli ve engellenmelisiniz. Kayıtları silin sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, IP'nizi ekleyin modsecurity-ip-white.list
ve alıştırmayı tekrar yapın. Şimdi yönlendirilmelisiniz, ancak engellenmemelisiniz.
Betiklerimizi OWASP Çekirdek Kural Seti 3.x ile bağlayın
Bunu yapmak için Anomali Modu Kurallarının (949110 ve 959100) varsayılan eylemini güncelleyeceğiz . Bu amaçla dosyayı düzenleyin /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
ve sonraki satırları en alta ekleyin:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Kontrol etmek
Yapılandırma değişikliklerini uygulamak için Apache'yi yeniden başlatmayı (veya yeniden yüklemeyi) unutmayın. Testler sırasında kayıtları düzenli olarak temizlemeyi unutmayın, aksi takdirde kalıcı olarak engellenebilirsiniz :-)
Dizin geçiş saldırısını simüle et:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
SQL Enjeksiyon saldırısını simüle edin:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurity ve Apache Günlük Dosyaları
Apache web sunucusu, sunucu yöneticisine nasıl çalıştığı hakkında önemli bilgiler verecek şekilde yapılandırılabilir ... Yöneticiye geri bildirim sağlamanın ana yolu günlük dosyalarının kullanılmasıdır. Daha fazla oku...
ModSecurity'nin güçlü kayıt mekanizması vardır. Yönerge SecGuardianLog
gereği, harici komut dosyalarıyla çalışmak üzere özel olarak tasarlanmış bir günlük akışı sağlar.
Şu çalışmak için bilinen tek araçtır vasi günlük olduğu
httpd-guardian
bir parçası olan, Apache httpd araçları projesinin . httpd-guardian
Aracı hizmet reddi saldırıları karşı savunmak için tasarlanmıştır. blacklist tool
Sorunlu IP adreslerini dinamik olarak kara listeye alan iptables tabanlı ... güvenlik duvarıyla etkileşim kurmak için kullanır . Daha fazla oku...
ModSecurity Günlük Dosyaları ► Fail2Ban ► Iptables
Apache'nin günlük dosyalarının veri ayrıştırılması için Fail2Ban'ı kurmak mümkündür. modsec_audit.log
muhtemelen en iyi seçimdir, ancak bahsettiğimiz bölümlere de bakın SecGuardianLog
.
Kendine iyi bak o SecAuditLogRelevantStatus
içinde /etc/modsecurity/modsecurity.conf
yorumlanır. Aksi takdirde 404 hata sayfası alan herkes fail2ban tarafından engellenir.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Şu anda Fail2Ban bu projede hiçbir şekilde uygulanmamıştır.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
httpd-guardian
- istekleri izleyerek DoS saldırılarını tespit eder Apache Security, Telif Hakkı (C) 2005 Ivan Ristic - borulu günlükleme mekanizması aracılığıyla tüm web sunucusu isteklerini izlemek için tasarlanmıştır. Her IP adresinden gönderilen istek sayısını takip eder ... httpd-guardian bir uyarı gönderebilir veya IP adresini engellemek için bir komut dosyası çalıştırabilir ...
Bu komut dosyası Apache2 günlük mekanizmasıyla veya
ModSecurity (daha iyi) ile kullanılabilir.
Mevcut Durumlarda Kurulum ve Kurulum
İndirin httpd-guardian
ve yürütülebilir yapın:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
98-119
Komut dosyasının WSAS komut dosyasına nasıl bağlandığını görmek için satırları okuyun .
Apache'nin yapılandırmasında ( /etc/modsecurity/modsecurity.conf
) aşağıdaki değişikliği uygulayın , ardından yeniden başlatın:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Kontrol etmek
Komut dosyasını test etmek için ModEvasive'ı devre dışı bırakın ( sudo a2dismod evasive
daha sonra etkinleştirmeyi unutmayın) ve Apache'yi yeniden başlatın. Sonra tail
exec günlüğü:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Ve başka bir örnekten DoS saldırısı gerçekleştirin, örneğin ab
bu şekilde kullanın :
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Özel Analiz ► WSAS ► Iptables
Burada, httpd-custom-analyze.bash
özel bir şey değil, güzel bir örnek olabilecek basit bir komut dosyası sunulmaktadır . Özellikleri komut dosyasının gövdesinde açıklanmıştır.
Kurulum ve Kurulum
İndirin httpd-custom-analyze.bash
ve yürütülebilir yapın:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Apache'nin yapılandırmasında ( /etc/modsecurity/modsecurity.conf
) aşağıdaki değişikliği uygulayın ve yeniden başlatın:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
Eşik değere ulaşıldığında komut dosyası WSAS'yi çağırır - okuma satırı 86
ve 35
.
Her iki httpd-
komut dosyasının aynı anda çalışmasını sağlamak için her ikisini de düzenleyin modsecurity.conf
ve ekleyin SecGuardianLog
.
Test yapmak için yukarıdaki bölümdeki ipuçlarını izleyin.