{"id":1438,"date":"2025-11-06T21:05:23","date_gmt":"2025-11-06T18:05:23","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/modsecurity-ve-owasp-crs-ile-wafi-uysallastirmak-yanlis-pozitifleri-nasil-ehlilestirir-performansi-ne-zaman-ucururuz\/"},"modified":"2025-11-06T21:05:23","modified_gmt":"2025-11-06T18:05:23","slug":"modsecurity-ve-owasp-crs-ile-wafi-uysallastirmak-yanlis-pozitifleri-nasil-ehlilestirir-performansi-ne-zaman-ucururuz","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/modsecurity-ve-owasp-crs-ile-wafi-uysallastirmak-yanlis-pozitifleri-nasil-ehlilestirir-performansi-ne-zaman-ucururuz\/","title":{"rendered":"ModSecurity ve OWASP CRS ile WAF\u2019\u0131 Uysalla\u015ft\u0131rmak: Yanl\u0131\u015f Pozitifleri Nas\u0131l Ehlile\u015ftirir, Performans\u0131 Ne Zaman U\u00e7ururuz?"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Kahve_Molasinda_Gelen_Blok_Yanlis_Pozitifin_Sessiz_Tokadi\"><span class=\"toc_number toc_depth_1\">1<\/span> Kahve Molas\u0131nda Gelen Blok: Yanl\u0131\u015f Pozitifin Sessiz Tokad\u0131<\/a><\/li><li><a href=\"#Yanlis_Pozitifler_Neden_Kapiyi_Sert_Kapatir\"><span class=\"toc_number toc_depth_1\">2<\/span> Yanl\u0131\u015f Pozitifler Neden Kap\u0131y\u0131 Sert Kapat\u0131r?<\/a><\/li><li><a href=\"#Ilk_Bulusma_DetectionOnly_ile_Trafigi_Dinlemek_ve_Anomali_Esigi\"><span class=\"toc_number toc_depth_1\">3<\/span> \u0130lk Bulu\u015fma: DetectionOnly ile Trafi\u011fi Dinlemek ve Anomali E\u015fi\u011fi<\/a><ul><li><a href=\"#Uygulamada_Ne_Ise_Yarar\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Uygulamada Ne \u0130\u015fe Yarar?<\/a><\/li><\/ul><\/li><li><a href=\"#OWASP_CRS_ile_Uysal_Baslangic_Paranoia_Seviyeleri_ve_Esikler\"><span class=\"toc_number toc_depth_1\">4<\/span> OWASP CRS ile Uysal Ba\u015flang\u0131\u00e7: Paranoia Seviyeleri ve E\u015fikler<\/a><ul><li><a href=\"#Bir_Kucuk_Not\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Bir K\u00fc\u00e7\u00fck Not<\/a><\/li><\/ul><\/li><li><a href=\"#Dislama_Kurallari_Bunu_Engelleme_Sunu_Siki_Tut_Dengesi\"><span class=\"toc_number toc_depth_1\">5<\/span> D\u0131\u015flama Kurallar\u0131: \u201cBunu Engelleme, \u015eunu S\u0131k\u0131 Tut\u201d Dengesi<\/a><ul><li><a href=\"#JSON_Govde_ve_Dosya_Yukleme_Uzerine\"><span class=\"toc_number toc_depth_2\">5.1<\/span> JSON G\u00f6vde ve Dosya Y\u00fckleme \u00dczerine<\/a><\/li><\/ul><\/li><li><a href=\"#Performans_Hizli_WAF_Huzurlu_Sunucu\"><span class=\"toc_number toc_depth_1\">6<\/span> Performans: H\u0131zl\u0131 WAF, Huzurlu Sunucu<\/a><ul><li><a href=\"#Kenar_ve_On_Kapi_Arasinda_Uyum\"><span class=\"toc_number toc_depth_2\">6.1<\/span> Kenar ve \u00d6n Kap\u0131 Aras\u0131nda Uyum<\/a><\/li><\/ul><\/li><li><a href=\"#Uygulama_Ornekleri_WordPress_WooCommerce_ve_Laravel_API\"><span class=\"toc_number toc_depth_1\">7<\/span> Uygulama \u00d6rnekleri: WordPress, WooCommerce ve Laravel API<\/a><ul><li><a href=\"#Kucuk_Bir_Senaryo\"><span class=\"toc_number toc_depth_2\">7.1<\/span> K\u00fc\u00e7\u00fck Bir Senaryo<\/a><\/li><\/ul><\/li><li><a href=\"#Log_Gozlem_ve_Sessiz_Alarm_WAFi_Surekli_Ogretmek\"><span class=\"toc_number toc_depth_1\">8<\/span> Log, G\u00f6zlem ve Sessiz Alarm: WAF\u2019\u0131 S\u00fcrekli \u00d6\u011fretmek<\/a><ul><li><a href=\"#Deneme_Geri_Alma_Kucuk_Adimlar\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Deneme, Geri Alma, K\u00fc\u00e7\u00fck Ad\u0131mlar<\/a><\/li><\/ul><\/li><li><a href=\"#Yapi_Taslari_Kucuk_Ayarlar_Buyuk_Etkiler\"><span class=\"toc_number toc_depth_1\">9<\/span> Yap\u0131 Ta\u015flar\u0131: K\u00fc\u00e7\u00fck Ayarlar, B\u00fcy\u00fck Etkiler<\/a><\/li><li><a href=\"#Kapanis_WAFla_Kusluk_Bitince_Trafik_de_Guluyor\"><span class=\"toc_number toc_depth_1\">10<\/span> Kapan\u0131\u015f: WAF\u2019la K\u00fcsl\u00fck Bitince Trafik de G\u00fcl\u00fcyor<\/a><\/li><\/ul><\/div>\n<h2 id=\"section-1\"><span id=\"Kahve_Molasinda_Gelen_Blok_Yanlis_Pozitifin_Sessiz_Tokadi\">Kahve Molas\u0131nda Gelen Blok: Yanl\u0131\u015f Pozitifin Sessiz Tokad\u0131<\/span><\/h2>\n<p>Hi\u00e7 b\u00f6yle oldu mu? \u00dc\u00e7\u00fcnc\u00fc kahveni alm\u0131\u015fs\u0131n, minik bir kutlanacak an yakalad\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorsun, birden \u201c\u00f6deme ba\u015far\u0131s\u0131z\u201d bildirimleri art arda d\u00fc\u015fmeye ba\u015fl\u0131yor. \u0130lk refleks olarak \u00f6deme sa\u011flay\u0131c\u0131s\u0131n\u0131 ar\u0131yorsun, onlar\u0131n taraf\u0131 tertemiz. D\u00f6n\u00fcp log\u2019lara bak\u0131nca k\u00fc\u00e7\u00fck bir ipucu: \u201cAccess denied by security policy.\u201d \u0130\u015fte tam burada anl\u0131yorsun, kap\u0131da duran nazik ama fazla \u015f\u00fcpheci bek\u00e7i WAF, iyi niyetli m\u00fc\u015fterilerini de i\u00e7eri alm\u0131yor. Benimle de b\u00f6yle olmu\u015ftu; ModSecurity ve OWASP CRS ikilisiyle tatl\u0131 sert bir sohbetten sonra, yanl\u0131\u015f pozitifleri epeyce uysalla\u015ft\u0131rd\u0131k.<\/p>\n<p>Bu yaz\u0131da tam da bunu konu\u015faca\u011f\u0131z. ModSecurity\u2019ye \u201cgel bakal\u0131m, \u00f6nce bir tan\u0131\u015fal\u0131m\u201d diyece\u011fiz. OWASP CRS\u2019in paranoya seviyelerinden, e\u015fiklerden ve d\u0131\u015flama kurallar\u0131ndan s\u00f6z edece\u011fiz. Performans\u0131 neden bazen WAF\u2019\u0131n kendisi de\u011fil, onun ayarlar\u0131na g\u00f6sterdi\u011fimiz \u00f6zen belirliyor, onu anlataca\u011f\u0131m. Arada ger\u00e7ek hayattan \u00f6rnekler var, WordPress ve WooCommerce taraf\u0131nda ba\u015f\u0131 a\u011fr\u0131tan admin-ajax hik\u00e2yelerinden, Laravel API\u2019lerinde webhook\u2019lar\u0131n k\u0131r\u0131lgan d\u00fcnyas\u0131na kadar. Sonunda elinizde daha az yanl\u0131\u015f pozitif, daha ak\u0131c\u0131 bir trafik ve daha mutlu kullan\u0131c\u0131lar kals\u0131n istiyorum. Haz\u0131rsan\u0131z, kap\u0131daki bek\u00e7iyle tan\u0131\u015f\u0131p dost olal\u0131m.<\/p>\n<h2 id=\"section-2\"><span id=\"Yanlis_Pozitifler_Neden_Kapiyi_Sert_Kapatir\">Yanl\u0131\u015f Pozitifler Neden Kap\u0131y\u0131 Sert Kapat\u0131r?<\/span><\/h2>\n<p>WAF dedi\u011fin \u015fey biraz kap\u0131ya as\u0131lan zincir gibi. \u0130\u00e7eri giren her paket, her parametre k\u00fc\u00e7\u00fck bir sorgudan ge\u00e7er. OWASP CRS ise bu sorgunun kurallar kitab\u0131. Normalde \u201czararl\u0131 kokular\u0131\u201d ay\u0131rt eder; tuhaf karakter dizileri, \u015f\u00fcpheli query string\u2019ler, garip header\u2019lar\u2026 Fakat hayat her zaman siyah beyaz akm\u0131yor. Mesela bir kullan\u0131c\u0131 yorumda baz\u0131 \u00f6zel karakterleri kullan\u0131r, WooCommerce taraf\u0131nda filtreleme parametreleri biraz keskin g\u00f6r\u00fcn\u00fcr ya da bir \u00f6deme sa\u011flay\u0131c\u0131s\u0131n\u0131n webhook\u2019u beklenmedik bir i\u00e7erik tipi yollar. WAF \u201cBu bana XSS gibi koktu\u201d diyebilir. Niyet iyi, ama sonu\u00e7 yanl\u0131\u015f pozitif.<\/p>\n<p>Bunun temel nedeni tek bir b\u00fcy\u00fc de\u011fil. \u00c7o\u011fu zaman kural seti gere\u011finden fazla temkinli, uygulaman\u0131n kendi dili ise beklenenden farkl\u0131d\u0131r. Kiminde JSON g\u00f6vdeyi do\u011fru yorumlamayan ayar, kiminde hi\u00e7 gere\u011fi yokken statik dosyalar\u0131 da tarayan bir yap\u0131. Bir de e\u015fik meselesi var, CRS\u2019in anomali puanlamas\u0131; her \u015f\u00fcpheli davran\u0131\u015f k\u00fc\u00e7\u00fck puanlar toplar, toplam belirli e\u015fi\u011fi a\u015f\u0131nca ban sesi gelir. \u0130\u015fimiz, gereksiz puanlar\u0131 temizlemek, gerekli olan\u0131 ise daha isabetli hale getirmek.<\/p>\n<h2 id=\"section-3\"><span id=\"Ilk_Bulusma_DetectionOnly_ile_Trafigi_Dinlemek_ve_Anomali_Esigi\">\u0130lk Bulu\u015fma: DetectionOnly ile Trafi\u011fi Dinlemek ve Anomali E\u015fi\u011fi<\/span><\/h2>\n<p>Ben genelde WAF\u2019\u0131 sahneye \u00e7\u0131karmadan \u00f6nce, kuliste biraz prova yapt\u0131r\u0131r\u0131m. ModSecurity\u2019nin modunu \u201cDetectionOnly\u201d olarak a\u00e7\u0131p birka\u00e7 g\u00fcn trafi\u011fi dinlemek, kimin ne dedi\u011fini anlamak i\u00e7in harika. Bu modda engelleme yok, sadece i\u015faretleme var. G\u00fcn sonunda hangi kurallar en \u00e7ok tetiklenmi\u015f, hangi endpoint\u2019ler dertli, kullan\u0131c\u0131lar en \u00e7ok nerede \u201c\u015f\u00fcpheli\u201d g\u00f6r\u00fcn\u00fcyor; resim netle\u015fiyor. Bu esnada log\u2019lar\u0131 bo\u011fmamak i\u00e7in se\u00e7ici davranmak iyi. Sadece ilgin\u00e7 olaylar\u0131 toplayan bir g\u00fcnl\u00fck ayar\u0131 rahatlat\u0131r, gerekmeyen her \u015feyi kaydetmek hem diski hem de zihni yorar.<\/p>\n<p>CRS\u2019in anomali puanlamas\u0131 burada elinizi g\u00fc\u00e7lendirir. Her tetikleme k\u00fc\u00e7\u00fck bir puan ekler, toplam puan da karar verir. E\u015fikleri biraz y\u00fckseltmek, \u00f6rne\u011fin i\u00e7eri giren trafi\u011fin ilk g\u00fcnlerinde yanl\u0131\u015f pozitif riskini azalt\u0131r. B\u00f6ylece \u0131l\u0131ml\u0131 bir ba\u015flang\u0131\u00e7 yapars\u0131n\u0131z. Sonras\u0131nda yava\u015f yava\u015f s\u0131k\u0131la\u015ft\u0131rmak, daha sa\u011fl\u0131kl\u0131. Bu, evden \u00e7\u0131kmadan \u00f6nce kap\u0131y\u0131 biraz aral\u0131k b\u0131rakmaya benziyor. Gelenin kim oldu\u011fundan daha emin olduk\u00e7a zinciri k\u0131salt\u0131yorsun.<\/p>\n<h3><span id=\"Uygulamada_Ne_Ise_Yarar\">Uygulamada Ne \u0130\u015fe Yarar?<\/span><\/h3>\n<p>Mesela yeni bir WooCommerce temas\u0131 kurdunuz. Filtreleme URL\u2019leri parametre y\u00f6n\u00fcnden zengin ve zaman zaman bir SQL kal\u0131b\u0131na benziyor. \u0130lk hafta engelleme yapmadan g\u00f6zlem, sonra en \u00e7ok tetiklenen birka\u00e7 kural\u0131 daraltma veya ilgili endpoint i\u00e7in d\u0131\u015flama, ard\u0131ndan e\u015fikleri makul seviyeye \u00e7ekme\u2026 B\u00f6yle yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, ger\u00e7ek sald\u0131r\u0131lar yakalan\u0131rken m\u00fc\u015fterinin filtresi rahat\u00e7a \u00e7al\u0131\u015f\u0131r. Sessiz ve d\u00fczenli bir ba\u015flang\u0131\u00e7, en b\u00fcy\u00fck g\u00fcr\u00fclt\u00fcy\u00fc \u00f6nler.<\/p>\n<h2 id=\"section-4\"><span id=\"OWASP_CRS_ile_Uysal_Baslangic_Paranoia_Seviyeleri_ve_Esikler\">OWASP CRS ile Uysal Ba\u015flang\u0131\u00e7: Paranoia Seviyeleri ve E\u015fikler<\/span><\/h2>\n<p>CRS\u2019in \u201cparanoia\u201d dedi\u011fi \u015fey asl\u0131nda \u015f\u00fcphe seviyesi. D\u00fc\u015f\u00fck seviyede, yaln\u0131zca bariz riskleri yakalar; seviyeyi y\u00fckselttik\u00e7e daha ince sinyallerde alarm \u00e7alar. Benim yakla\u015f\u0131m\u0131m basit: \u00f6nce d\u00fc\u015f\u00fck ile ba\u015fla, sorunlu endpoint\u2019leri ve me\u015fru kal\u0131plar\u0131 tan\u0131, sonra seviyeyi art\u0131r. T\u00fcm siteyi en \u00fcst \u015f\u00fcphe modunda \u00e7al\u0131\u015ft\u0131rmak yerine, kritik b\u00f6lgelere \u00f6zel ayarlar yapmak daha ak\u0131ll\u0131. \u00d6rne\u011fin giri\u015f, kay\u0131t, \u00f6deme gibi formlar bir t\u0131k s\u0131k\u0131 olabilir; JSON post eden arka u\u00e7 API\u2019ler ise daha se\u00e7ici bir bak\u0131\u015fa ihtiya\u00e7 duyar.<\/p>\n<p>Anomali puan e\u015fi\u011fi ile paranoiay\u0131 birlikte d\u00fc\u015f\u00fcnmek gerekir. \u015e\u00fcphe seviyesini art\u0131r\u0131nca, e\u015fi\u011fi da ayn\u0131 oranda ayarlamak gerekebilir. \u00c7\u00fcnk\u00fc kurallar daha \u00e7ok sinyal \u00fcretecek, e\u015fik sabit kal\u0131rsa dahas\u0131 yanl\u0131\u015f pozitife d\u00f6ner. Hayali bir \u00e7ark gibi d\u00fc\u015f\u00fcn\u00fcn, biri artarken di\u011feri uygun noktaya \u00e7ekilmeli. Ayar\u0131 k\u00fc\u00e7\u00fck ad\u0131mlarla yapmak, ya\u015fanan her de\u011fi\u015fikli\u011fin etkisini g\u00f6rmek i\u00e7in iyi bir y\u00f6ntem. B\u00fcy\u00fck s\u0131\u00e7ramalar, nerede hata yapt\u0131\u011f\u0131n\u0131z\u0131 anlamay\u0131 zorla\u015ft\u0131r\u0131r.<\/p>\n<h3><span id=\"Bir_Kucuk_Not\">Bir K\u00fc\u00e7\u00fck Not<\/span><\/h3>\n<p>Kural davran\u0131\u015flar\u0131n\u0131n s\u00fcrpriz yapmamas\u0131 i\u00e7in resmi belgeler her zaman el alt\u0131nda olsun. OWASP CRS\u2019in yol g\u00f6sterici ve anla\u015f\u0131l\u0131r dok\u00fcmantasyonu i\u015finizi kolayla\u015ft\u0131r\u0131r. Bu konuda <a href=\"https:\/\/coreruleset.org\/docs\/\" target=\"_blank\" rel=\"noopener nofollow\">OWASP CRS dok\u00fcmantasyonunda g\u00fczel anlat\u0131mlar<\/a> ve yanl\u0131\u015f pozitifleri tan\u0131y\u0131p ay\u0131klamak i\u00e7in pratik ba\u015fl\u0131klar var. \u00d6zellikle <a href=\"https:\/\/coreruleset.org\/docs\/concepts\/false_positives\/\" target=\"_blank\" rel=\"noopener nofollow\">false positive kavram\u0131 \u00fczerine yaz\u0131lan rehber<\/a> k\u0131sa s\u00fcrede \u00e7ok yol ald\u0131r\u0131r.<\/p>\n<h2 id=\"section-5\"><span id=\"Dislama_Kurallari_Bunu_Engelleme_Sunu_Siki_Tut_Dengesi\">D\u0131\u015flama Kurallar\u0131: \u201cBunu Engelleme, \u015eunu S\u0131k\u0131 Tut\u201d Dengesi<\/span><\/h2>\n<p>\u0130\u015fte as\u0131l tatl\u0131 ayar burada. Her \u015feyi \u201ckapat\u201d ya da \u201ca\u00e7\u201d mant\u0131\u011f\u0131yla y\u00f6netmek yerine, ba\u011flama g\u00f6re d\u0131\u015flamalar eklemek harikalar yarat\u0131r. \u00d6rne\u011fin WordPress taraf\u0131nda <em>admin-ajax.php<\/em> beklenmedik parametreler ta\u015f\u0131yabilir. B\u00f6yle bir endpoint i\u00e7in, yaln\u0131zca bu yola \u00f6zel olarak belirli kurallar\u0131 esnetmek hem g\u00fcvenli\u011fi hem ak\u0131\u015f\u0131 korur. Laravel\u2019de webhook endpoint\u2019leri de benzer; \u00f6deme sa\u011flay\u0131c\u0131lar\u0131 bazen fazlaca korumac\u0131 kurallar\u0131 tetikleyen \u00f6zel ba\u015fl\u0131klar ve g\u00f6vdeler g\u00f6nderir. Sadece bu adresleri beyaz listelemek, koca tarlay\u0131 s\u00fcrmeden \u00e7imleri d\u00fczeltmek gibidir.<\/p>\n<p>D\u0131\u015flamay\u0131 iki ad\u0131mda d\u00fc\u015f\u00fcn\u00fcn. \u00d6nce \u201chedefi daralt\u0131n\u201d. Yani b\u00fct\u00fcn siteyi gev\u015fetmek yerine, sadece belli yol ya da parametre i\u00e7in esnetin. Ard\u0131ndan \u201changi kurallar\u0131\u201d kenara ald\u0131\u011f\u0131n\u0131z\u0131 g\u00f6r\u00fcn. Genelde birka\u00e7 kural, belirli bir \u015fablon y\u00fcz\u00fcnden s\u00fcrekli tetiklenir. Bunlar\u0131 se\u00e7ici \u015fekilde uzakla\u015ft\u0131r\u0131nca, sistemin geri kalan\u0131 sapasa\u011flam kal\u0131r. B\u00f6yle yapt\u0131\u011f\u0131m bir WooCommerce projesinde, sepete ekleme ve varyasyon filtreleri bir anda ya\u011f gibi akt\u0131. Sald\u0131r\u0131 denemelerini yakalayan ana iskelet ise yerli yerinde durdu.<\/p>\n<h3><span id=\"JSON_Govde_ve_Dosya_Yukleme_Uzerine\">JSON G\u00f6vde ve Dosya Y\u00fckleme \u00dczerine<\/span><\/h3>\n<p>API a\u011f\u0131rl\u0131kl\u0131 uygulamalarda, g\u00f6vdeyi do\u011fru okumak kritik. JSON i\u00e7eri\u011fi d\u00fczg\u00fcn \u00e7\u00f6z\u00fcmlenmezse kurallar yanl\u0131\u015f alarmlar \u00fcretebilir. G\u00f6vdedeki b\u00fcy\u00fck dosyalar ya da resimler i\u00e7in de gereksiz tarama yapmak performans\u0131 bo\u011far. Statik dosyalar gibi davranan y\u00fcklemelerde, sadece gerekli yerlerde tarama yapmak ve JSON ak\u0131\u015f\u0131n\u0131 do\u011fru i\u015flemek, \u015fik\u00e2yetleri ciddi bi\u00e7imde azalt\u0131r. Bir yerde \u201cfazla merak\u201d her zaman iyi de\u011fildir.<\/p>\n<h2 id=\"section-6\"><span id=\"Performans_Hizli_WAF_Huzurlu_Sunucu\">Performans: H\u0131zl\u0131 WAF, Huzurlu Sunucu<\/span><\/h2>\n<p>Performans konusu genelde en son konu\u015fulur ama ben onu ortaya al\u0131r\u0131m. \u00c7\u00fcnk\u00fc yanl\u0131\u015f pozitif kadar can s\u0131k\u0131c\u0131 bir \u015fey varsa, o da a\u011f\u0131rla\u015fan sayfalar. ModSecurity\u2019yi her \u015feye dahil etmek zorunda de\u011filsiniz. Statik dosyalar\u0131n sunuldu\u011fu yerlerde WAF\u2019\u0131 kapatmak ilk b\u00fcy\u00fck kazan\u0131m. CSS, JS, resim, font gibi trafi\u011fi taramamak, kap\u0131daki bek\u00e7iyi sadece misafirlerin geldi\u011fi salona oturtmak gibi. Hemen hissedilir.<\/p>\n<p>Yan\u0131t g\u00f6vdesini taramay\u0131 \u00e7o\u011fu senaryoda kapatmak, log\u2019lar\u0131 ger\u00e7ekten ilgin\u00e7 olaylara indirgemek, belirli endpoint\u2019lerde incelemeyi derinle\u015ftirmek gibi k\u00fc\u00e7\u00fck hamlelerin etkisi b\u00fcy\u00fck. G\u00f6vde limiti ayarlar\u0131n\u0131 makul s\u0131n\u0131rlarda tutmak ve devasa y\u00fckleri gereksiz yere analiz etmemek, hem gecikmeyi hem de CPU kullan\u0131m\u0131n\u0131 azalt\u0131r. Trafikte y\u00fck art\u0131nca bu ayarlar\u0131n de\u011feri iki kat anla\u015f\u0131l\u0131r. Sunucu \u00fczerindeki ba\u015fka servislerle uyum, \u00f6rne\u011fin PHP-FPM ve veritaban\u0131 taraf\u0131nda sa\u011fl\u0131kl\u0131 kuyru\u011fa d\u00f6n\u00fc\u015f, WAF\u2019\u0131n att\u0131\u011f\u0131 her ufak kolun \u00e7arpan etkisini dengeler.<\/p>\n<p>Bir ba\u015fka g\u00fc\u00e7l\u00fc kombinasyon da \u00f6nbellekleme ve kenar (edge) politikalar\u0131. Ak\u0131\u015f\u0131n \u00f6nemli b\u00f6l\u00fcm\u00fc zaten \u00f6nbellekten geliyorsa, WAF\u2019\u0131n i\u015f y\u00fck\u00fc de do\u011fal olarak d\u00fc\u015fer. Bu konuda pratik dokunu\u015flar i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/wordpresste-tam-sayfa-onbellekleme-nasil-kurulur-nginx-fastcgi-cache-varnish-ve-litespeed-cache-ile-woocommercee-nazikce-dokunmak\/\">WordPress\u2019te tam sayfa \u00f6nbellekleme \u00fczerine anlatt\u0131\u011f\u0131m\u0131z rehberi<\/a> g\u00f6z at\u0131lacak g\u00fczel bir kaynak olarak kenara b\u0131rak\u0131yorum.<\/p>\n<h3><span id=\"Kenar_ve_On_Kapi_Arasinda_Uyum\">Kenar ve \u00d6n Kap\u0131 Aras\u0131nda Uyum<\/span><\/h3>\n<p>Bazen WAF y\u00fck\u00fcn\u00fc azaltman\u0131n en kolay yolu, ilk kap\u0131y\u0131 d\u0131\u015far\u0131da tutmakt\u0131r. Bir kenar g\u00fcvenlik katman\u0131, k\u00f6t\u00fc trafi\u011fi daha i\u00e7eri girmeden eleyebilir. ModSecurity i\u00e7erde hassas i\u015flerle ilgilenirken, d\u0131\u015far\u0131daki bek\u00e7i kaba g\u00fcr\u00fclt\u00fcy\u00fc al\u0131r. Bu ikiliyi uyumlu \u00e7al\u0131\u015ft\u0131rman\u0131n hik\u00e2yesini yumu\u015fak bir dille anlatt\u0131\u011f\u0131m bir yaz\u0131da, Cloudflare, ModSecurity ve Fail2ban\u2019\u0131 ayn\u0131 masada bulu\u015fturmu\u015ftuk. U\u011framak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/waf-ve-bot-korumasi-cloudflare-modsecurity-ve-fail2bani-ayni-masada-baristirmanin-sicacik-hikayesi\/\">bu WAF ve bot korumas\u0131 yaz\u0131s\u0131nda<\/a> \u00f6rnek senaryolar var.<\/p>\n<h2 id=\"section-7\"><span id=\"Uygulama_Ornekleri_WordPress_WooCommerce_ve_Laravel_API\">Uygulama \u00d6rnekleri: WordPress, WooCommerce ve Laravel API<\/span><\/h2>\n<p>WordPress taraf\u0131nda en s\u0131k g\u00f6rd\u00fc\u011f\u00fcm meselelerden biri admin-ajax ve REST API \u00e7a\u011fr\u0131lar\u0131. Bir eklenti beklenmedik parametreler ekliyor, bir filtreleme eklentisi URL\u2019e g\u00f6rece keskin desenler koyuyor ve CRS bunlar\u0131 \u015f\u00fcpheli buluyor. Burada yapaca\u011f\u0131m ilk i\u015f, sadece bu endpoint\u2019ler i\u00e7in belirli kurallar\u0131 esnetmek. Tam siteyi gev\u015fetmek yok, nokta at\u0131\u015f\u0131 esneme var. WooCommerce\u2019de sepete ekleme ve varyasyon filtreleri, \u00f6zellikle kampanya d\u00f6nemlerinde yo\u011funla\u015ft\u0131\u011f\u0131 i\u00e7in, ak\u0131\u015f\u0131 kesmeye en az hevesli yerler olmal\u0131.<\/p>\n<p>Laravel taraf\u0131nda ise genellikle webhook\u2019lar ve JSON post eden mobil uygulamalar konuyu alevlendiriyor. \u00d6deme ve bildirim servisleri, i\u00e7erikte \u00f6zel karakterler ta\u015f\u0131yabiliyor. En sevdi\u011fim pratik, sadece \/webhook\/ ile ba\u015flayan endpoint\u2019lerde belirli kurallar\u0131 d\u0131\u015flamak ve JSON g\u00f6vdeyi do\u011fru \u00e7\u00f6z\u00fcmlemek. Gelenin \u201cbeklenen misafir\u201d oldu\u011funu bildi\u011fimiz durumda, kap\u0131y\u0131 \u00e7alan\u0131n laf\u0131n\u0131 kesmemek gerekiyor. B\u00f6ylece hem b\u00fct\u00fcn API\u2019yi koruyor hem de kritik iletiyi duyarak h\u0131zl\u0131 cevap veriyorsunuz.<\/p>\n<p>Bu ak\u0131\u015flar\u0131n \u00f6n\u00fcne k\u00fc\u00e7\u00fck setler \u00e7ekmek i\u00e7in kenarda tutaca\u011f\u0131n\u0131z bir katman i\u015finizi kolayla\u015ft\u0131r\u0131r. Oran s\u0131n\u0131rlama gibi \u00f6n kap\u0131 taktikleri, gereksiz yo\u011funlu\u011fu t\u00f6rp\u00fcler. Anlatmas\u0131 kolay, uygulamas\u0131 basit \u00f6rnekler i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/cloudflare-waf-kurallari-ve-oran-sinirlama-ile-wordpressi-botlardan-nasil-korursun\/\">Cloudflare WAF kurallar\u0131 ve oran s\u0131n\u0131rlama ile WordPress\u2019i bot\u2019lardan koruma notlar\u0131<\/a> tam tad\u0131nda bir e\u015flik\u00e7i olur.<\/p>\n<h3><span id=\"Kucuk_Bir_Senaryo\">K\u00fc\u00e7\u00fck Bir Senaryo<\/span><\/h3>\n<p>Bir m\u00fc\u015fteride kampanya g\u00fcn\u00fc trafi\u011fi artt\u0131, sepet i\u015flemleri bazen tak\u0131l\u0131yor, bazen u\u00e7uyor. Log\u2019lara bakt\u0131\u011f\u0131m\u0131zda iki kural s\u00fcrekli tetikleniyor, ikisi de belirli parametrelerdeki karakter dizilerine hassas. Sadece sepete ekleme ve varyasyon URL\u2019lerinde bu iki kural\u0131 d\u0131\u015flad\u0131k. E\u015fik de\u011ferini \u00e7ok az y\u00fckselttik, tetikleyicinin a\u011f\u0131rl\u0131\u011f\u0131 d\u00fc\u015ft\u00fc. Ayn\u0131 anda statik dosyalarda WAF\u2019\u0131 kapatt\u0131k, yan\u0131t taramas\u0131n\u0131 devreden ald\u0131k. Sayfa s\u00fcreleri g\u00f6zle g\u00f6r\u00fcl\u00fcr k\u0131sald\u0131. Hem s\u0131n\u0131fta kalan bir \u201cg\u00fcvenlik yok\u201d senaryosu de\u011fil, hem de \u201cher \u015feyi kapatt\u0131k\u201d demeden ak\u0131\u015f sa\u011fland\u0131.<\/p>\n<h2 id=\"section-8\"><span id=\"Log_Gozlem_ve_Sessiz_Alarm_WAFi_Surekli_Ogretmek\">Log, G\u00f6zlem ve Sessiz Alarm: WAF\u2019\u0131 S\u00fcrekli \u00d6\u011fretmek<\/span><\/h2>\n<p>WAF ayar\u0131 \u201ckurduk, bitti\u201d de\u011fil. D\u00fczenli olarak log\u2019lara bakmak, anlaml\u0131 \u00f6rnekleri biriktirmek ve al\u0131nan aksiyonun etkisini g\u00f6rmek \u015fart. Log\u2019lar\u0131n y\u00fcz\u00fcn\u00fc g\u00fcld\u00fcrmek i\u00e7in \u201cgereksiz her \u015feyi yazma\u201d prensibini benimsiyorum. Sadece ilgin\u00e7 olaylar kaydedilsin, geri kalan ak\u0131\u015f bo\u015funa deftere d\u00fc\u015fmesin. Bu sayede ger\u00e7ek problemleri daha net se\u00e7iyor, alarm ayarlar\u0131n\u0131 daha do\u011fru konumland\u0131r\u0131yorsunuz.<\/p>\n<p>G\u00f6zlemin yolu \u00e7ok. Sunucunun genel sa\u011fl\u0131\u011f\u0131n\u0131 tutarl\u0131 bir yerden izlemek, WAF\u2019\u0131n getirdi\u011fi ek y\u00fck\u00fc de g\u00f6rmeyi kolayla\u015ft\u0131r\u0131r. Kimi zaman artan gecikme bir kural\u0131n ta\u015fmas\u0131na i\u015faret eder, kimi zaman log\u2019lar\u0131n b\u00fcy\u00fcmesi gereksiz yaz\u0131m\u0131n i\u015fareti olur. B\u00f6yle anlarda h\u0131zl\u0131ca geri almak ya da k\u00fc\u00e7\u00fck bir g\u00fcncelleme ile esnetmek, \u00e7\u0131\u011f b\u00fcy\u00fcmeden yol ald\u0131r\u0131r. Bu konuyu merak ederseniz, <a href=\"https:\/\/www.dchost.com\/blog\/vps-izleme-ve-uyari-nasil-kurulur-prometheus-grafana-ve-node-exporter-ile-sessiz-alarmlari-konusturmak\/\">Prometheus ve Grafana ile uyar\u0131 kurma rehberinde<\/a> izleme ve alarm\u0131 k\u0131sa ad\u0131mlarla toparlam\u0131\u015ft\u0131k.<\/p>\n<h3><span id=\"Deneme_Geri_Alma_Kucuk_Adimlar\">Deneme, Geri Alma, K\u00fc\u00e7\u00fck Ad\u0131mlar<\/span><\/h3>\n<p>Ne kadar teknik olursa olsun, s\u00fcre\u00e7 asl\u0131nda bah\u00e7ecilik gibi. Biraz buda, biraz su ver, biraz g\u00f6lge yap. WAF ayarlar\u0131 da b\u00f6yle. \u00d6nce k\u00fc\u00e7\u00fck de\u011fi\u015ftir, etkisini g\u00f6r, sonra bir ad\u0131m daha. B\u00fcy\u00fck bir \u201ckullan\u0131c\u0131lar\u0131 kilitledik\u201d s\u00fcrprizi yerine, h\u0131zl\u0131 geri al\u0131nabilir ufak dokunu\u015flar her zaman g\u00fcvenli olan. WAF\u2019\u0131 d\u00fczenli \u00f6\u011fretmek, kurallar\u0131 ba\u011flama g\u00f6re esnetmek, m\u00fc\u015fterinin a\u011fz\u0131nda iyi bir tat b\u0131rak\u0131r.<\/p>\n<h2 id=\"section-9\"><span id=\"Yapi_Taslari_Kucuk_Ayarlar_Buyuk_Etkiler\">Yap\u0131 Ta\u015flar\u0131: K\u00fc\u00e7\u00fck Ayarlar, B\u00fcy\u00fck Etkiler<\/span><\/h2>\n<p>Konuya biraz i\u00e7eriden bakal\u0131m ama g\u00f6z yormadan. Trafik \u00f6\u011frenme d\u00f6neminde, WAF\u2019\u0131 engelleme moduna almadan \u00f6nce bir s\u00fcre dinlemek en kritik hamle. Statik varl\u0131klarda taramay\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak, hem gereksiz i\u015fler hem de performans kay\u0131plar\u0131n\u0131 azalt\u0131r. Yan\u0131t g\u00f6vdesi taramas\u0131n\u0131 \u00e7o\u011fu yerde kapatmak makul. B\u00fcy\u00fck g\u00f6vdeleri okuyup i\u015flemek zaman al\u0131r; ger\u00e7ekten gerekliyse a\u00e7\u0131n, de\u011filse b\u0131rak\u0131n ak\u0131\u015f serin kals\u0131n.<\/p>\n<p>Log\u2019larda sadece \u201cilgin\u00e7\u201d olaylar\u0131 tutmak, disk ve zihin sa\u011fl\u0131\u011f\u0131 i\u00e7in bire iki kazan\u00e7. D\u0131\u015flamalar\u0131 geni\u015f de\u011fil dar alana uygulamak, yani t\u00fcm siteyi gev\u015fetmek yerine belirli endpoint ya da parametreye odaklanmak, g\u00fcvenli\u011fi budamadan ak\u0131\u015f\u0131 a\u00e7ar. Paranoia seviyesiyle e\u015fikleri birlikte ayarlamak, yanl\u0131\u015f pozitifleri minimuma indirir. D\u00fczenli olarak g\u00f6zden ge\u00e7irmek, bazen tek sihirdir.<\/p>\n<p>Bu noktada resmi referans elinizin alt\u0131nda olsun. ModSecurity\u2019nin davran\u0131\u015f detaylar\u0131na dair g\u00fcncel bilgilere <a href=\"https:\/\/github.com\/SpiderLabs\/ModSecurity\/wiki\/Reference-Manual\" target=\"_blank\" rel=\"noopener nofollow\">ModSecurity referans el kitab\u0131ndan<\/a> bakmak, \u201cbu ayar neye dokunuyor\u201d sorusunu dakikalar i\u00e7inde cevaplat\u0131r.<\/p>\n<h2 id=\"section-10\"><span id=\"Kapanis_WAFla_Kusluk_Bitince_Trafik_de_Guluyor\">Kapan\u0131\u015f: WAF\u2019la K\u00fcsl\u00fck Bitince Trafik de G\u00fcl\u00fcyor<\/span><\/h2>\n<p>\u00d6zetle mevzu \u015fu: ModSecurity ve OWASP CRS, do\u011fru tan\u0131\u015ft\u0131r\u0131ld\u0131klar\u0131nda \u015fahane bir ikili. Yanl\u0131\u015f pozitifleri azaltman\u0131n yolu, \u00f6nce dinlemek, sonra nokta at\u0131\u015f\u0131 d\u0131\u015flamalar yapmak ve paranoya seviyesini e\u015fiklerle birlikte ayarlamak. Performans taraf\u0131nda statik dosyalarda taramay\u0131 kapatmak, yan\u0131t g\u00f6vdesini gereksiz yere incelememek ve log\u2019lar\u0131 sadele\u015ftirmek sunucunun nefesini a\u00e7\u0131yor. En g\u00fczeli de bu ad\u0131mlar zor de\u011fil; birka\u00e7 bilin\u00e7li dokunu\u015fla, kullan\u0131c\u0131 \u015fik\u00e2yetleri azal\u0131yor, sald\u0131r\u0131lar ise kay\u0131p ka\u00e7madan yakalan\u0131yor.<\/p>\n<p>Size pratik bir plan b\u0131rakay\u0131m. \u00d6nce k\u0131sa bir \u00f6\u011frenme d\u00f6nemiyle trafi\u011fi dinleyin. En \u00e7ok tetiklenen kurallar\u0131 etiketleyin, sadece ilgili endpoint\u2019lerde yumu\u015fat\u0131n. E\u015fi\u011fi yava\u015f\u00e7a ayarlay\u0131n ve statik ak\u0131\u015fta taramay\u0131 kapat\u0131n. Ard\u0131ndan \u00f6nbellek ve kenar politikalar\u0131yla y\u00fck\u00fc hafifletin, d\u0131\u015f kap\u0131da nazik bir bek\u00e7i daha ekleyin. K\u00fc\u00e7\u00fck ad\u0131mlar, h\u0131zl\u0131 geri al\u0131mlar ve d\u00fczenli g\u00f6zden ge\u00e7irme\u2026 Hepsi bir arada \u00e7al\u0131\u015ft\u0131\u011f\u0131nda WAF kap\u0131s\u0131 sert de\u011fil, g\u00fcven veren bir \u015fekilde a\u00e7\u0131l\u0131yor. Umar\u0131m bu yaz\u0131 i\u015finizi kolayla\u015ft\u0131r\u0131r. Bir g\u00fcn bir kahve molas\u0131nda \u201c\u00f6deme ba\u015far\u0131s\u0131z\u201d de\u011fil, \u201cher \u015fey yolunda\u201d bildirimleri ya\u011far; o g\u00fcn bu ayarlar\u0131n k\u0131ymetini daha \u00e7ok hissedersiniz.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Kahve Molas\u0131nda Gelen Blok: Yanl\u0131\u015f Pozitifin Sessiz Tokad\u01312 Yanl\u0131\u015f Pozitifler Neden Kap\u0131y\u0131 Sert Kapat\u0131r?3 \u0130lk Bulu\u015fma: DetectionOnly ile Trafi\u011fi Dinlemek ve Anomali E\u015fi\u011fi3.1 Uygulamada Ne \u0130\u015fe Yarar?4 OWASP CRS ile Uysal Ba\u015flang\u0131\u00e7: Paranoia Seviyeleri ve E\u015fikler4.1 Bir K\u00fc\u00e7\u00fck Not5 D\u0131\u015flama Kurallar\u0131: \u201cBunu Engelleme, \u015eunu S\u0131k\u0131 Tut\u201d Dengesi5.1 JSON G\u00f6vde ve Dosya Y\u00fckleme \u00dczerine6 Performans: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1439,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1438","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1438"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1438\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1439"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}