ModSecurity, sıklıkla olarak anılacaktır modsec, ücretsiz, açık kaynaklı bir web uygulaması güvenlik duvarıdır (WAF). ModSecurity, Apache HTTP Sunucusu için bir modül olarak oluşturuldu. Ancak, ilk günlerinden bu yana, WAF büyüdü ve şimdi Microsoft IIS, Nginx ve Apache gibi çeşitli platformlar için bir dizi Köprü Metni Aktarım Protokolü istek ve yanıt filtreleme özelliğini kapsıyor.
WAF nasıl çalışır, ModSecurity motoru web uygulamasının önüne yerleştirilir ve motorun gelen ve giden HTTP bağlantılarını taramasına olanak tanır. ModSecurity en yaygın olarak aşağıdakilerle birlikte kullanılır: OWASP Temel Kural Kümesi (CRS), ModSecurity'nin SecRules dilinde yazılmış açık kaynaklı bir kurallar dizisidir ve güvenlik endüstrisinde büyük saygı görmektedir.
ModSecurity ile OWASP Rule Set, sunucunuzun aşağıdakilere karşı korunmasına neredeyse anında yardımcı olabilir:
- Kötü kullanıcı aracıları
- DDOS
- Çapraz web sitesi komut dosyası oluşturma
- SQL enjeksiyonu
- Oturum çalma
- Diğer Tehditler
Öğretici sırasında, sürüm 2 derlemesini yüklediğini fark edebilirsiniz ve bunun nedeni, Nginx'in aksine, Apache/Modsecurity bağlayıcısı için Apache'nin beta sürümünün terk edilmiş olması ve etkili bir şekilde çalışmamasıdır; bu nedenle, devam edilmesi önerilir. orijinal yapı. Güncellemeler hala yürütülüyor, bu nedenle sürüm iki yapısı terk edilmedi.
Aşağıdaki öğreticide, ModSecurity & OWASP Core Rule Set'i Apache ile Debian 11 Bullseye'a örnek yapılandırmalarla nasıl kuracağınızı öğreneceksiniz.
OWASP'ın kurulacak üç sürümü vardır; Hem 3.3.2 hem de 4.0.0 RC1'i test ettim. hangi çalıştı.
Içindekiler
Debian'ı Güncelle
İlk olarak, mevcut tüm paketlerin güncel olduğundan emin olmak için sisteminizi güncelleyin.
sudo apt update && sudo apt upgrade -y
En Son Apache'yi Yükleyin
İlk olarak, mevcut Apache kurulumlarını kaldırmanız ve Ondrey Surfury PPA'yı kullanacağımız en son sürümü kurmanız önerilir.
Mevcut Apache Kurulumunu Kaldır
Aşağıdaki komutla kuruluysa mevcut hizmeti durdurun.
sudo systemctl stop apache2
Şimdi mevcut Apache kurulumunu aşağıdaki gibi kaldırın:
sudo apt-get purge apache2 -y && sudo apt autoremove apache2 -y
En Son Apache PPA'sını Ekle
Bir sonraki adım, Apache web sunucusunu en son sürüme aktarmak ve kurmaktır: Ondřej Surı.
Terminalinizde aşağıdaki komutu kullanarak depoyu ekleyin.
curl -sSL https://packages.sury.org/apache2/README.txt | sudo bash -x
Deponuzu yeni değişikliği yansıtacak şekilde güncelleyin:
sudo apt update
Artık Apache deposunu kurduğunuza göre ve depo listesini güncelledikten sonra Apache2'yi aşağıdakilerle kurun:
sudo apt install apache2 -y
Ardından, yeni yapıyı onaylayarak kurulumun başarılı olduğunu onaylayın:
sudo apache2 -v
ModSecurity Apache Modülünü Kur/Etkinleştir
İlk adım, aşağıdaki komutla Debian 11 Bullseye'nin varsayılan deposunda bulunan Apache modülünü kurmaktır.
sudo apt install libapache2-mod-security2
Kurulduktan sonra, modülü aşağıdaki gibi etkinleştirin.
sudo a2enmod security2
Yeni modülü ve değişiklikleri yansıtmak için Apache2 hizmetinizi yeniden başlattığınızdan emin olun.
sudo systemctl restart apache2
ModSecurity Modülünü Etkinleştir
Apache ModSecurity'nin konfigürasyonları şurada bulunabilir: /etc/apache2/mods-enabled/security2.conf, aşağıdakileri içeren bir satıra sahip olacak.
sudo nano /etc/apache2/mods-enabled/security2.conf
Aşağıdaki satırın mevcut olduğunu ve satır hakkında yorum içermediğini doğrulayın.
IncludeOptional /etc/modsecurity/*.conf
Örnek:
Apache tüm yükleyecek *.conf dosyaları /etc/modsecurity/ dizini, ancak yeniden adlandırmanız gerekecek modsecurity.conf-önerilir Önce yapılandırma dosyası.
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Ardından, Debian'daki favori metin düzenleyicinizi kullanarak modsecurity.conf dosya aşağıdaki gibi.
sudo nano /etc/modsecurity/modsecurity.conf
Varsayılan olarak, ModSecurity yapılandırması şu şekilde belirtilen kural motoruna sahiptir: (Yalnızca Algılama)Başka bir deyişle, ModSecurity'yi çalıştırır ve tüm kötü niyetli davranışları tespit eder, ancak eylem engellemez veya yasaklamaz ve işaretlediği tüm HTTP işlemlerini günlüğe kaydeder. Bu, yalnızca çok sayıda yanlış pozitifiniz varsa veya güvenlik düzeyi ayarlarını aşırı bir düzeye yükselttiyseniz ve herhangi bir yanlış pozitif olup olmadığını görmek için test yaptıysanız kullanılmalıdır.
Yapılandırma dosyasında bu davranışı şu şekilde değiştirin: (üzerinde), 7. satırda bulundu.
SecRuleEngine DetectionOnly
Aşağıdaki ile ModSecurity'yi etkinleştirmek için satırı bununla değiştirin.
SecRuleEngine On
Örnek:
Şimdi, aşağıdakileri bulmanız gerekiyor SecAuditLogParts, 224. satırda yer almaktadır.
# Log everything we know about a transaction. SecAuditLogParts ABDEFHIJZ
Bu doğru değil ve değiştirilmesi gerekiyor. Satırı aşağıdaki şekilde değiştirin:
SecAuditLogParts ABCEFHJKZ
şimdi kaydet dosyasını kullanma (CTRL+O), sonra çık (CTRL+X).
Değişiklikleri canlı hale getirmek için systemctl komutunu kullanarak Apache hizmetinizi yeniden başlatın.
sudo systemctl restart apache2
ModSecurity için OWASP Core Rule Set'i kurun
ModSecurity tek başına web sunucunuzu korumaz ve kurallarınız olması gerekir. En ünlü, saygın ve iyi bilinen kurallardan biri OWASP CRS kural setidir. Kurallar, web sunucuları ve diğer WAF'lar arasında en yaygın olarak kullanılanlardır ve diğer benzer sistemlerin çoğu, kurallarının çoğunu bu CRS'ye dayandırır. Bu kural setini yüklemek, size otomatik olarak, kötü niyetli aktörleri tespit edip onları engelleyerek İnternette ortaya çıkan tehditlerin çoğuna karşı harika bir koruma kaynağı sağlayacaktır.
kontrol OWASP Sürüm etiketi sayfası Aşağıdaki örnek gelecekte değişmiş olabileceğinden, en son ne olduğunu görmek için.
İlk olarak, OWASP için ana ebeveyn olacak dizini oluşturun.
sudo mkdir /etc/apache2/modsec/
Kullanma wget komutu, indirmek OWASP CRS 3.3.2 arşivi, bu tarihten itibaren en son kararlı, ancak dört gün önce yayın öncesi sürümün düştüğünü unutmayın, bu yüzden benim tavsiyem, sürümlerin temel kural kümesi için nasıl göründüğünü görmek için birkaç satır yukarıdaki bağlantıyı kontrol etmektir.
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip
Uçlarda yaşamak isteyenler için gecelik yapıyı indirebilirsiniz. Yalnızca CoreRuleSet Github'u güncellemeler için yeniden derlemeye ve kontrol etmeye hazırsanız ve sorunları çözme konusunda kendinize daha fazla güveniyorsanız kullanın. Teknik olarak gece daha güvenli olabilir, ancak potansiyel olarak sorun yaratabilir.
Acemi kullanıcılar için kararlı sürümü kullanın ve aşağıdaki sürümü kullanmayın.
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip
Öğreticinin oluşturulduğu sırada, daha önce belirtildiği gibi v4.0.0-RC1 ön sürümü de mevcuttur.
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v4.0.0-rc1.zip
Yeterince güveniyorsanız, mevcut 3.3.x veya gece sürümleri yerine ön sürümü kullanmanızı tavsiye ederim. Ancak, gelecekte iki veya üç kez yaptıktan sonra kuralları indirme ve ekleme işlemi çok basittir.
Ardından, Paketi aç Eğer sunucunuzda bu kurulu değilse.
sudo apt install unzip -y
Şimdi arşivi açın.
sudo unzip v4.0.0-rc1.zip -d /etc/apache2/modsec
Unutmayın, v4.0 veya her gece indirdiyseniz, komutları bunu yansıtacak şekilde değiştirin.
OWASP CRS, yeniden adlandırmanız gereken örnek bir yapılandırma dosyasıyla birlikte gelir. Yeniden başlatmanız gerekebilir diye CP komutunu kullanmak ve gelecek için bir yedek tutmak en iyisidir.
sudo cp /etc/apache2/modsec/coreruleset-4.0.0-rc1/crs-setup.conf.example /etc/apache2/modsec/coreruleset-4.0.0-rc1/crs-setup.conf
Yukarıdaki komutun yalnızca bir örnek olduğunu unutmayın, değiştirdiğinizden emin olun /coreruleset-4.0.0-rc1/ karar verdiğiniz OWASP'ın tam sürümüyle.
Kuralları etkinleştirmek için, /etc/etc/apache2/mods-etkin/security2.conf aşağıdaki gibi.
sudo nano /etc/apache2/mods-enabled/security2.conf
Dosyanın içine tekrar girdikten sonra aşağıdaki iki ek satırı ekleyin:
Include /etc/apache2/modsec/coreruleset-4.0.0-rc1/crs-setup.conf Include /etc/apache2/modsec/coreruleset-4.0.0-rc1/rules/*.conf
Yukarıdaki komutun yalnızca bir örnek olduğunu unutmayın, değiştirdiğinizden emin olun /coreruleset-3.3.2/ karar verdiğiniz OWASP'ın tam sürümüyle.
Ayrıca, aşağıdaki satırı boş bırakın veya kaldırın.
IncludeOptional /usr/share/modsecurity-crs/*.load
Örnek:
Dosya 'yı kaydet (CTRL+O) ve çıkış (CTRL+T).
Değişiklikleri aşağıdaki gibi canlı hale getirmek için Apache hizmetinizi yeniden başlatın:
sudo systemctl restart apache2
OWASP Temel Kural Kümesini Kullanma ve Anlama
OWASP CRS oldukça fazla seçeneğe sahiptir, ancak varsayılan ayarlar kutunun dışında, çoğu sunucuyu gerçek ziyaretçilerinize ve iyi SEO botlarına zarar vermeden hemen koruyacaktır. Aşağıda, açıklamaya yardımcı olması için bazı alanlar ele alınacaktır. Daha fazla okuma, ne olduklarını açıklamak için oldukça fazla metin verisine sahip olduklarından, yapılandırma dosyalarındaki tüm seçenekleri araştırmak en iyisi olacaktır.
Aç senin CRS-setup.conf dosyası.
sudo nano /etc/apache2/modsec/coreruleset-3.3.2/crs-setup.conf
Bunun, sürüm 3.3'e kıyasla ek öğeler içeren geliştirme sürümü yapılandırması olduğunu unutmayın.
Buradan, OWASP CRS ayarlarınızın çoğunu değiştirebilirsiniz.
OWASP CRS Puanlaması
Bunu yıkmak için ModSecurity'nin iki modu vardır:
Anormallik Puanlama Modu
# -- [[ Anomaly Scoring Mode (default) ]] -- # In CRS3, anomaly mode is the default and recommended mode, since it gives the # most accurate log information and offers the most flexibility in setting your # blocking policies. It is also called "collaborative detection mode". # In this mode, each matching rule increases an 'anomaly score'. # At the conclusion of the inbound rules, and again at the conclusion of the # outbound rules, the anomaly score is checked, and the blocking evaluation # rules apply a disruptive action, by default returning an error 403.
Bağımsız Mod
# -- [[ Self-Contained Mode ]] -- # In this mode, rules apply an action instantly. This was the CRS2 default. # It can lower resource usage, at the cost of less flexibility in blocking policy # and less informative audit logs (only the first detected threat is logged). # Rules inherit the disruptive action that you specify (i.e. deny, drop, etc). # The first rule that matches will execute this action. In most cases this will # cause evaluation to stop after the first rule has matched, similar to how many # IDSs function.
Anomali Puanlaması genellikle çoğu kullanıcı için kullanılacak en iyi moddur.
Dört paranoya seviyesi vardır:
- Paranoya Seviye 1 – Varsayılan düzeydir ve çoğu kullanıcı için önerilir.
- Paranoya Seviye 2 – Yalnızca ileri düzey kullanıcılar.
- Paranoya Seviye 3 – Yalnızca uzman kullanıcılar.
- Paranoya Seviye 4 – İstisnai durumlar dışında kesinlikle tavsiye edilmez.
# -- [[ Paranoia Level Initialization ]] --------------------------------------- # # The Paranoia Level (PL) setting allows you to choose the desired level # of rule checks that will add to your anomaly scores. # # With each paranoia level increase, the CRS enables additional rules # giving you a higher level of security. However, higher paranoia levels # also increase the possibility of blocking some legitimate traffic due to # false alarms (also named false positives or FPs). If you use higher # paranoia levels, it is likely that you will need to add some exclusion # rules for certain requests and applications receiving complex input. # # - A paranoia level of 1 is default. In this level, most core rules # are enabled. PL1 is advised for beginners, installations # covering many different sites and applications, and for setups # with standard security requirements. # At PL1 you should face FPs rarely. If you encounter FPs, please # open an issue on the CRS GitHub site and don't forget to attach your # complete Audit Log record for the request with the issue. # - Paranoia level 2 includes many extra rules, for instance enabling # many regexp-based SQL and XSS injection protections, and adding # extra keywords checked for code injections. PL2 is advised # for moderate to experienced users desiring more complete coverage # and for installations with elevated security requirements. # PL2 comes with some FPs which you need to handle. # - Paranoia level 3 enables more rules and keyword lists, and tweaks # limits on special characters used. PL3 is aimed at users experienced # at the handling of FPs and at installations with a high security # requirement. # - Paranoia level 4 further restricts special characters. # The highest level is advised for experienced users protecting # installations with very high security requirements. Running PL4 will # likely produce a very high number of FPs which have to be # treated before the site can go productive. # # All rules will log their PL to the audit log; # example: [tag "paranoia-level/2"]. This allows you to deduct from the # audit log how the WAF behavior is affected by paranoia level. # # It is important to also look into the variable # tx.enforce_bodyproc_urlencoded (Enforce Body Processor URLENCODED) # defined below. Enabling it closes a possible bypass of CRS.
OWASP CRS'yi Sunucunuzda Test Edin
OWASP CRS'nin sunucunuzda çalışıp çalışmadığını test etmek için İnternet Tarayıcınızı açın ve aşağıdakileri kullanın:
https://www.yourdomain.com/index.html?exec=/bin/bash
almalısın 403 yasak hatası. Değilse, o zaman bir adım atlanmıştır.
Örnek:
En yaygın sorun değiştirilemiyor Yalnızca Algılama için On, öğreticide daha önce ele alındığı gibi.
Yanlış Pozitiflerle Başa Çıkma ve Özel Kurallar Hariç Tutma
Genellikle hiç bitmeyen görevlerden biri yanlış pozitiflerle uğraşmaktır, ModSecurity ve OWASP CRS birlikte harika bir iş çıkarır, ancak zamanınızın maliyetine gelir, ancak aldığınız koruma göz önüne alındığında buna değer. Yeni başlayanlar için, paranoya seviyesini asla yükseklere koymamak altın kuraldır.
İyi bir temel kural, kuralı birkaç hafta ila aylar boyunca neredeyse hiç yanlış pozitif olmadan çalıştırmak, ardından örneğin paranoya seviyesini 1'den paranoyayı 2'ye çıkarmaktır, böylece aynı anda bir tonla boğulmazsınız.
Yanlış Pozitif Bilinen Uygulamalar Hariç
Modsecurity, varsayılan olarak, yanlış pozitiflere yol açan günlük eylemleri aşağıdaki gibi beyaz listeye alabilir:
#SecAction \ # "id:900130,\ # phase:1,\ # nolog,\ # pass,\ # t:none,\ # setvar:tx.crs_exclusions_cpanel=1,\ # setvar:tx.crs_exclusions_dokuwiki=1,\ # setvar:tx.crs_exclusions_drupal=1,\ # setvar:tx.crs_exclusions_nextcloud=1,\ # setvar:tx.crs_exclusions_phpbb=1,\ # setvar:tx.crs_exclusions_phpmyadmin=1,\ # setvar:tx.crs_exclusions_wordpress=1,\ # setvar:tx.crs_exclusions_xenforo=1"
Örneğin etkinleştirmek için, WordPress, phpBB ve phpMyAdmin üçünü de kullandıkça, çizgilerin yorumunu kaldır ve bırak (1) numara sağlam, kullanmadığınız diğer hizmetleri değiştirin, örneğin, Xenforo (0) çünkü bu kuralları beyaz listeye eklemek istemezsiniz.
Aşağıdaki örnek:
SecAction \ "id:900130,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:tx.crs_exclusions_cpanel=0,\ setvar:tx.crs_exclusions_dokuwiki=0,\ setvar:tx.crs_exclusions_drupal=0,\ setvar:tx.crs_exclusions_nextcloud=0,\ setvar:tx.crs_exclusions_phpbb=1,\ setvar:tx.crs_exclusions_phpmyadmin=1,\ setvar:tx.crs_exclusions_wordpress=1,\ setvar:tx.crs_exclusions_xenforo=0"
Daha temiz olacak olan sözdizimini de değiştirebilirsiniz. Örneğin:
SecAction \ "id:900130,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:tx.crs_exclusions_phpbb=1,\ setvar:tx.crs_exclusions_phpmyadmin=1,\ setvar:tx.crs_exclusions_wordpress=1"
Gördüğünüz gibi, gerekli olmayan ve eklenen seçenekler kaldırıldı (“) Doğru sözdizimi için WordPress'in sonunda.
CRS Öncesi Kuralları Hariç Tutma
Özel hariç tutmalarla başa çıkmak için öncelikle, adı şuradan değiştirmeniz gerekir: REQUEST-900-HARİÇ TUTMA-KURALLARI-BEFORE-CRS-SAMPLE.conf ile dosya cp komutu aşağıdaki gibidir:
sudo cp /etc/apache2/modsec/coreruleset-3.3.2/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /etc/apache2/modsec/coreruleset-3.3.2/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Hariç tutma kuralları oluştururken hatırlanması gereken bir nokta, her birinin kimliği olmalıdır: ve benzersiz olun, yoksa Apache2 hizmetinizi test ettiğinizde bir hata alırsınız.
Örnek E-posta "id:1544,phase:1,log,allow,ctl:ruleEngine=off", kimlik 1544 ikinci bir kural için kullanılamaz.
Örneğin, bazı REQUEST_URI'ler yanlış pozitifleri artıracaktır. Aşağıdaki örnek, WordPress için Google sayfa hızı işaretçisi ve WMUDEV eklentisi içeren iki örnektir:
SecRule REQUEST_URI "@beginsWith /wp-load.php?wpmudev" "id:1544,phase:1,log,allow,ctl:ruleEngine=off" SecRule REQUEST_URI "@beginsWith /ngx_pagespeed_beacon" "id:1554,phase:1,log,allow,ctl:ruleEngine=off"
Gördüğünüz gibi, yolla başlayan herhangi bir URL'ye otomatik olarak izin verilecektir.
Başka bir seçenek de IP adreslerini beyaz listeye almaktır; bu konuda izleyebileceğiniz birkaç yol:
SecRule REMOTE_ADDR "^195\.151\.128\.96" "id:1004,phase:1,nolog,allow,ctl:ruleEngine=off" ## or ### SecRule REMOTE_ADDR "@ipMatch 127.0.0.1/8, 188.8.131.52/24, 184.108.40.206" "phase:1,id:1313413,allow,ctl:ruleEngine=off"
The @ipMatch alt ağlar için daha yaygın olarak kullanılabilir. Bir alt ağ veya IP adresi değişikliğini reddetmek istiyorsanız, reddetmeye izin verin. Biraz bilgi birikimi ile kara listeler ve beyaz listeler de oluşturabilir ve bunu fail2ban ile yapılandırabilirsiniz. Olasılıklar çoğu zaman sonsuz olabilir.
Son bir örnek, ilk REQUEST_URI örneğinde gördüğünüz gibi, tüm yolu beyaz listeye almayı değil, yalnızca yanlış pozitifleri tetikleyen kuralları devre dışı bırakmaktır. Ancak, bu daha fazla zaman ve test gerektirir.
Örneğin, kuralları kaldırmak istiyorsanız 941000 ve 942999 PC'den / admin / ekibiniz için yanlış yasakları ve engellemeleri tetiklemeye devam ederken, modsecurity günlük dosyanızda kural kimliğini bulun ve ardından yalnızca bu kimliği devre dışı bırakın. Kimliğe Göre Kaldır aşağıdaki örnek olarak:
SecRule REQUEST_FILENAME "@beginsWith /admin" "id:1004,phase:1,pass,nolog,ctl:ruleRemoveById=941000-942999"
Örnekler ModSecurity GIT'de bulunabilir wiki sayfası.
ModSecurity için WordPress WPRS Kural Seti
İçin başka bir seçenek WordPress kullanıcılar, WPRS kural kümesi adlı iyi bilinen bir proje olan OWASP CRS kural kümenizle birlikte yükleyip çalıştıracaktır. Bu isteğe bağlı olduğundan ve herkes için olmadığından, öğretici bu bölümde ele alınmayacaktır.
Ancak, sunucunuzda WordPress kullanıyorsanız ekstra koruma için bunu yüklemek isterseniz, lütfen aşağıdaki eğitimimizi ziyaret edin. WordPress ModSecurity Rule Set'i (WPRS) Yükleme.
ModSecurity LogRotate dosyası oluşturun.
ModSecurity günlükleri aşırı büyüyebilir, bu nedenle günlük döndürmeyi ayarlamanız gerekir, çünkü bu sizin için yapılmaz.
İlk önce ModSecurity döndürme dosyanızı oluşturun ve açın mod saniye.
sudo nano /etc/logrotate.d/modsec
Aşağıdaki kodu ekleyin:
/var/log/modsec_audit.log { rotate 31 daily missingok compress delaycompress notifempty }
Bu, günlükleri 31 gün boyunca tutacaktır. Daha azına sahip olmayı tercih ederseniz, 31 ila 7 gün arasında bir haftalık günlükleri eşit olarak değiştirin. ModSecurity için günlük olarak değiştirmelisiniz. Günlük dosyalarını gözden geçirmeniz gerekiyorsa, ne kadar büyük olacağı göz önüne alındığında, haftalık bir dosyaya sahip olmak bir felaket olacaktır.
Yorumlar ve Sonuç
Genel olarak, ModSecurity'yi sunucunuza dağıtmak anında koruma sağlayacaktır. Bununla birlikte, sabır, zaman ve öğrenmeye adanmışlık harika bir özellik olacaktır. İstediğiniz son şey, SEO botlarını veya daha da önemlisi potansiyel müşteri olabilecek gerçek kullanıcıları engellemektir.