Rules¶
Kurallar, isteklerin analiz edilmesi ve sonrasında işlenmesi sırasında Wallarm’ın varsayılan davranışını ince ayar yapmak için kullanılır. Böylece kuralları kullanarak sistemin kötü amaçlı istekleri nasıl tespit ettiğini ve bu tür kötü amaçlı istekler tespit edildiğinde nasıl davrandığını değiştirebilirsiniz.
Kurallar, US veya EU Cloud içindeki Rules bölümünde yapılandırılır.

Kuralın uygulanmasında gecikme
Kurallarda değişiklik yaptığınızda, bu değişiklikler hemen etkili olmaz; kuralların derlenmesi ve filtreleme düğümlerine yüklenmesi zaman alır.
Kurallarla neler yapabilirsiniz¶
Kuralları kullanarak Wallarm’ın uygulamalarınıza ve API’lerinize yönelik saldırıları nasıl azalttığını kontrol edebilir, saldırı tespitini ince ayar yapabilir ve istek/yanıtları değiştirebilirsiniz:
-
Azaltma kontrolleri:
-
Saldırı tespitinin ince ayarı:
- Belirli alan adları/uç noktalar için filtreleme modunu geçersiz kılın
- Belirli saldırıları yok sayın
- Belirli alan adları/uç noktalar veya istek bölümleri için özel saldırı algılayıcılarını devre dışı bırakın
- İkili veri işleme yapılandırın
- Ayrıştırıcıları yapılandırarak istek işlemeyi ince ayar yapın
- Belirli alan adları/uç noktalar ve istekler için API Abuse Prevention’ı devre dışı bırakın
- İstek işleme süresini sınırlandırarak düğüm işleyişini ince ayar yapın
-
İstek/yanıtları değiştirin:
- Hassas verileri maskeleyin
- Yanıt başlıklarını değiştirerek uygulama güvenliğinin ek bir katmanını yapılandırın
Rule branches¶
Kurallar, uç nokta URI’leri ve diğer koşullara göre otomatik olarak iç içe geçmiş dallar halinde gruplanır. Bu, kuralların aşağıya doğru devralındığı ağaç benzeri bir yapı oluşturur. İlkeler:
-
Tüm dallar varsayılan kuralları devralır.
-
Bir dalda, alt uç noktalar üstten kuralları devralır.
-
Ayrık olan, devralınan üzerinde önceliklidir.
-
Doğrudan belirtilen, regex üzerinde önceliklidir.
-
Büyük/küçük harf duyarlı, duyarsız üzerinde önceliklidir.

Default rules¶
Belirli bir uç noktayla bağlantılı olmayan, ancak eylemi belirtilmiş kurallar oluşturabilirsiniz - bunlara default rules denir. Bu tür kurallar tüm uç noktalara uygulanır.
-
Varsayılan kural oluşturmak için, standart prosedürü izleyin ancak URI’yi boş bırakın. Herhangi bir uç noktaya bağlı olmayan yeni kural oluşturulacaktır.
-
Oluşturulan varsayılan kuralların listesini görüntülemek için Default rules düğmesine tıklayın.
-
Varsayılan kurallar tüm dallar tarafından devralınır.
Trafik filtreleme modu varsayılan kuralı
Wallarm, tüm müşteriler için Set filtration mode varsayılan kuralını otomatik olarak oluşturur ve değerini genel filtreleme modu ayarına göre belirler.
Dal kurallarını görüntüleme¶
Kural dallarıyla çalışmaya ilişkin bazı detaylar:
-
Uç noktayı genişletmek için mavi daireye tıklayın.
-
Ayrık kuralları olmayan uç noktalar gri renklidir ve tıklanamaz.

-
Uç noktanın kurallarını görüntülemek için üzerine tıklayın. İlk olarak, bu uç nokta için ayrık kurallar görüntülenecektir.
-
Belirli bir uç noktanın kural listesini görüntülerken, devralınanları görüntülemek için Distinct and inherited rules üzerine tıklayın. Devralınan kurallar, ayrık olanlarla birlikte görüntülenir; ayrıklara kıyasla gri renkte olurlar.

Configuring¶
Yeni bir kural eklemek için US veya EU Cloud içindeki Rules bölümüne gidin. Kurallar, mevcut dallara eklenebileceği gibi sıfırdan da eklenebilir; bu durumda henüz yoksa yeni bir dal oluşturulur.

Bir kuralın bir isteğe yalnızca bazı koşullar karşılandığında (hedef uç nokta, yöntem, bazı parametrelerin veya değerlerin varlığı vb.) uygulandığını unutmayın. Ayrıca, genellikle yalnızca bazı istek bölümlerine uygulanır. İstek yapısının kurallarla etkileşimini daha iyi anlamak için filtreleme düğümünün istekleri nasıl analiz ettiğini öğrenmeniz önerilir.
Kural koşulları şu yollarla tanımlanabilir:
-
URI constructor - kural koşullarının yalnızca tek bir satırda istek yöntemi ve uç nokta belirlenerek yapılandırılmasına olanak tanır.
-
Advanced edit form - URI constructor’ı genişleterek yalnızca yöntem/uç noktayı değil, uygulama, başlıklar, sorgu dizesi parametreleri ve diğerleri gibi ek kural koşullarını yapılandırmaya olanak tanır.
URI constructor¶
URI constructor, kural koşullarının yalnızca tek bir satırda istek yöntemi ve uç nokta belirlenerek yapılandırılmasını sağlar.
Genel kullanım¶
URI constructor aşağıdakileri sunar:
-
İstek yöntemi için seçici. Yöntem seçilmezse, kural herhangi bir yöntemle yapılan isteklere uygulanır.
-
Aşağıdaki değer biçimlerini kabul eden istek uç noktası alanı:
Biçim Örnek Aşağıdaki bileşenleri içeren tam URI: - Şema (değer yok sayılır, şemayı açıkça advanced form kullanarak belirtebilirsiniz)
- Alan adı veya IP adresi
- Port
- Yol
- Sorgu dizesi parametreleri
https://example.com:3000/api/user.php?q=action&w=delete[header, 'HOST']-example.com:3000[path, 0]-api[path, 1]-∅[action_name]-user[action_ext]-php[query, 'q']-action[query, 'w']-delete
Bazı bileşenleri atlanmış URI example.com/api/user[header, 'HOST']-example.com[path, 0]-api[path, 1]-∅[action_name]-user[action_ext]-∅
http://example.com/api/clients/user/?q=action&w=delete[header, 'HOST']-example.com[path, 0]-api[path, 1]-clients[path, 2]-∅[action_name]-user[query, 'q']-action[query, 'w']-delete
/api/user`[header, 'HOST']- herhangi bir değer[path, 0]-api[path, 1]-∅[action_name]-user[action_ext]-∅
Bileşenin herhangi bir boş‑olmayan değerini ifade eden *içeren URIexample.com/*/create/*.*[header, 'HOST']-example.com[path, 0]- herhangi bir boş‑olmayan değer (advanced edit form’da gizlenir)[path, 1]-create[path, 2]-∅[action_name]- herhangi bir boş‑olmayan değer (advanced edit form’da gizlenir)[action_ext]- herhangi bir boş‑olmayan değer (advanced edit form’da gizlenir) Değer,
example.com/api/create/user.phpile eşleşir
veexample.com/create/user.phpileexample.com/api/createile eşleşmez.Bileşen sayısının yokluğu dahil herhangi bir sayıda bileşeni ifade eden **içeren URIexample.com/**/user[header, 'HOST']-example.com[action_name]-user[action_ext]-∅Değer,
example.com/api/create/userveexample.com/api/userile eşleşir.
Değer,example.com/user,example.com/api/user/index.phpveexample.com/api/user/?w=deleteile eşleşmez.example.com/api/**/*.*[header, 'HOST']-example.com[path, 0]-api[action_name]- herhangi bir boş‑olmayan değer (advanced edit form’da gizlenir)[action_ext]- herhangi bir boş‑olmayan değer (advanced edit form’da gizlenir) Değer,
example.com/api/create/user.phpveexample.com/api/user/create/index.phpile eşleşir
veexample.com/api,example.com/api/userveexample.com/api/create/user.php?w=deleteile eşleşmez.Belirli bileşen değerlerini eşleştirmek için düzenli ifade içeren URI (regexp {{}}içine alınmalıdır)example.com/user/{{[0-9]}}[header, 'HOST']-example.com[path, 0]-user[path, 1]-∅[action_name]-[0-9][action_ext]-∅Değer,
example.com/user/3445ile eşleşir
veexample.com/user/3445/888veexample.com/user/3445/index.phpile eşleşmez.
URI constructor’da belirtilen dize, otomatik olarak bir koşullar kümesine ayrıştırılır:
-
method -
header. URI constructor yalnızcaHOSTbaşlığının belirtilmesine izin verir. -
path,action_name,action_ext. Kural oluşturmayı onaylamadan önce, bu istek bölümlerinin değerlerinin aşağıdaki yollardan biriyle ayrıştırıldığından emin olun:- Belirli bir
pathnumarasının açık değeri +action_name+action_ext(isteğe bağlı) action_name+action_ext’in (isteğe bağlı) açık değeriaction_nameveaction_extolmadan belirli birpathnumarasının açık değeri
- Belirli bir
-
query
URI constructor’da belirtilen değer, yalnızca advanced edit form içinde mevcut olan diğer koşullarla tamamlanabilir.
Joker karakterleri kullanma¶
Wallarm’da URI constructor ile çalışırken joker karakterleri kullanabilir misiniz? Hem hayır hem evet. “Hayır”, onları klasik şekilde kullanamayacağınız anlamına gelir; “evet” ise şu şekilde davranarak aynı sonuca ulaşabileceğiniz anlamına gelir:
-
URI’nizin ayrıştırılmış bileşenleri içinde joker karakterler yerine düzenli ifadeler kullanın.
-
Bir veya herhangi bir sayıda bileşenin yerine geçmesi için URI alanının kendisine
*veya**sembolünü yerleştirin (örnekler için yukarıdaki bölüme bakın).
Bazı detaylar
Düzenli ifadenin sözdizimi klasik joker karakterlerden farklıdır, ancak aynı sonuçlara ulaşılabilir. Örneğin, şu maskeye karşılık gelmesini istiyorsunuz:
-
something-1.example.com/user/create.comve -
anything.something-2.example.com/user/create.com
...ki klasik jokerlerde şöyle bir şey yazarak elde etmeye çalışırsınız:
*.example.com/user/create.com
Ancak Wallarm’da something-1.example.com/user/create.com ifadeniz şu şekilde bileşenlere ayrıştırılacaktır:

...burada something-1.example.com bir header-HOST koşuludur. Joker karakterin koşul içinde kullanılamayacağını belirtmiştik, bu yüzden bunun yerine düzenli ifade kullanmamız gerekiyor: koşul türünü REGEX olarak ayarlayın ve ardından Wallarm’a özgü sözdizimini kullanın:
-
“Herhangi bir sayıda sembol” anlamında
*kullanmayın. -
“Gerçek nokta” olarak yorumlanmasını istediğimiz tüm
.karakterlerini köşeli parantez içine alın:something-1[.]example[.]com -
“Herhangi bir sembol” yerine
.’yı parantezsiz kullanın ve ardından “öncekilerin 0 veya daha fazla tekrarı” anlamına gelen nicelik belirteci olarak*koyun; yani.*ve:.*[.]example[.]com -
Oluşturduğumuz ifadenin bileşenimizin sonunda olması gerektiğini belirtmek için sona
$ekleyin:.*[.]example[.]com$Daha basit yol
.*ifadesini atlayabilir ve yalnızca[.]example[.]com$bırakabilirsiniz. Her iki durumda da Wallarm,[.]example[.]com$ifadesinden önce herhangi bir karakterin herhangi bir sayıda görünebileceğini varsayacaktır.
Advanced edit form¶
Advanced edit form, (yöntem ve URI) URI constructor olasılıklarını genişleterek hem bunları hem de uygulama, başlıklar, sorgu dizesi parametreleri ve diğerleri gibi ek kural koşullarını yapılandırmayı sağlar.
Koşullar¶
Koşullar, hangi istek parçalarında hangi değerlerin sunulması gerektiğini belirtir. Kural, tüm koşulları karşılandığında uygulanır. Koşullar, kuralın If request is bölümünde listelenir.
Şu koşullar şu anda desteklenmektedir:
-
application: uygulama kimliği.
-
proto: HTTP protokol sürümü (1.0, 1.1, 2.0, ...).
-
scheme: http veya https.
-
uri: alan adı olmadan istek URL’sinin bir parçası (örneğin,
http://example.com/blogs/123/index.php?q=aaaisteği için/blogs/123/index.php?q=aaa). -
path, action_name, action_ext, hiyerarşik URI bileşeni dizisidir; burada:
- path:
/sembolüyle ayrılmış URI parçalarını içeren bir dizi (URI’nin son parçası diziye dahil edilmez). URI’de yalnızca bir parça varsa, dizi boş olacaktır. - action_name:
/sembolünden sonra ve ilk nokta (.) öncesindeki URI’nin son parçası. Bu URI parçası, değeri boş bir dize olsa bile isteklerde her zaman bulunur. - action_ext: Son noktadan (
.) sonraki URI kısmı. İsteklerde bulunmayabilir.
- path:
-
query: sorgu dizesi parametreleri.
-
header: istek başlıkları. Bir başlık adı girdiğinizde, en yaygın değerler açılır listede görüntülenir. Örneğin:
HOST,USER-AGENT,COOKIE,X-FORWARDED-FOR,AUTHORIZATION,REFERER,CONTENT-TYPE.HOSTbaşlığı için FQDN ve IP adreslerine yönelik kuralları yönetmeHOSTbaşlığı bir FQDN’e ayarlanmışsa, ilişkili IP adresini hedefleyen istekler kuraldan etkilenmez. Kuralın bu tür isteklere uygulanması için, kural koşullarındaHOSTbaşlığı değerini ilgili IP olarak ayarlayın veya hem FQDN hem de IP için ayrı kurallar oluşturun.HOSTbaşlığını değiştiren bir yük dengeleyicisinin arkasında konumlandığında, Wallarm düğümü kuralları orijinal değere değil, güncellenmiş değere göre uygular. Örneğin, dengeleyiciHOST’u bir IP’den bir alan adına çevirirse, düğüm o alan adına ait kuralları uygular. -
method: istek yöntemleri. Değer açıkça belirtilmemişse, kural herhangi bir yöntemle yapılan isteklere uygulanır.
Koşul türü: EQUAL (=)¶
Değer, karşılaştırma bağımsız değişkeniyle tam olarak eşleşmelidir. Örneğin, yalnızca example değeri example ile eşleşir.
HOST başlık değeri için EQUAL koşul türü
Daha fazla isteği kurallarla kapsamak için HOST başlığı için EQUAL koşul türünü kısıtladık. EQUAL türü yerine, parametre değerlerini herhangi bir büyük/küçük harf düzeninde kabul eden IEQUAL türünü kullanmanızı öneririz.
EQUAL türünü daha önce kullandıysanız, otomatik olarak IEQUAL türü ile değiştirilecektir.
Koşul türü: IEQUAL (Aa)¶
Değer, karşılaştırma bağımsız değişkeniyle herhangi bir büyük/küçük harf düzeninde eşleşmelidir. Örneğin: example, ExAmple, exampLe değerleri example ile eşleşir.
Koşul türü: REGEX (.*)¶
Değer, düzenli ifadeyle eşleşmelidir.
Düzenli ifade sözdizimi
Düzenli ifadelerle istekleri eşleştirmek için PIRE kütüphanesi kullanılır. Çoğunlukla ifadelerin sözdizimi standarttır ancak aşağıda ve PIRE deposunun README dosyasında açıklandığı gibi bazı özellikler vardır.
Düzenli ifade sözdizimini göster
Olduğu gibi kullanılabilecek karakterler:
- Küçük Latin harfleri:
a b c d e f g h i j k l m n o p q r s t u v w x y z - Büyük Latin harfleri:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - Rakamlar:
0 1 3 4 5 6 7 8 9 - Özel karakterler:
! " # % ' , - / : ; < = > @ ] _ ` } - Boşluk karakterleri
\ ile kaçırmak yerine köşeli parantez [] içine alınması gereken karakterler:
. $ ^ { [ ( | ) * + ? \ & ~
ISO‑8859’a göre ASCII’ye dönüştürülmesi gereken karakterler:
- UTF‑8 karakterleri (örneğin,
ʃkarakterinin ASCII karşılığıÊ’dür)
Karakter grupları:
- Yeni satır dışında herhangi bir karakter için
. - Düzenli ifadeleri gruplamak,
()içindeki sembolleri aramak veya öncelik sırası belirlemek için() []içindeki bir tek karakter (büyük/küçük harfe duyarlı); grup, belirli durumlar için kullanılabilir:- büyük/küçük harfi yok saymak için (örneğin,
[cC]) - küçük Latin harflerinden birini eşleştirmek için
[a-z] - büyük Latin harflerinden birini eşleştirmek için
[A-Z] - rakamlardan birini eşleştirmek için
[0-9] - küçük veya büyük Latin harflerinden, veya rakamlardan, veya noktadan birini eşleştirmek için
[a-zA-Z09[.]]
- büyük/küçük harfi yok saymak için (örneğin,
Mantık karakterleri:
~, NOT’a eşittir. Ters çevrilmiş ifade ve karakter()içine alınmalıdır,
örneğin:(~(a))|, OR’a eşittir&, AND’e eşittir
Dize sınırlarını belirtmek için karakterler:
- Dizinin başlangıcı için
^ - Dizinin sonu için
$
Nicelik belirteçleri:
- Önceki düzenli ifadenin 0 veya daha fazla tekrarı için
* - Önceki düzenli ifadenin 1 veya daha fazla tekrarı için
+ - Önceki düzenli ifadenin 0 veya 1 tekrarı için
? - Önceki düzenli ifadenin
mtekrarına karşılık{m} - Önceki düzenli ifadenin
milenarası tekrarına karşılık{m,n};n’in atlanması, üst sınırın sonsuz olduğunu belirtir
Özgül davranışla çalışan karakter kombinasyonları:
^.*$,^.+$’a eşittir (boş değerler^.*$ile eşleşmez)^.?$,^.{0,}$,^.{0,n}$,^.+$’a eşittir
Geçici olarak desteklenmeyenler:
- Alfabetik olmayanlar için
\W, alfabetikler için\w, rakam olmayanlar için\D, ondalıklar için\d, boşluk olmayanlar için\S, boşluklar için\sgibi karakter sınıfları
Desteklenmeyen sözdizimi:
- Üç basamaklı sekizlik kodlar
\NNN,\oNNN,\ONNN \cile denetim karakterleri geçirme\cN(örneğin, CTRL+C için\cC)- Dizinin başlangıcı için
\A - Dizinin sonu için
\z - Dizinin sonunda boşluk karakterinden önce veya sonra
\b - Tembel nicelik belirteçleri
??,*?,+? - Koşullular
Düzenli ifadeleri test etme
Bir düzenli ifadeyi test etmek için Wallarm cpire yardımcı programını kullanın. Linux tabanlı işletim sisteminize Wallarm hepsi-bir-arada yükleyici ile kurun veya Wallarm NGINX tabanlı Docker imajından aşağıdaki gibi çalıştırın:
-
Wallarm hepsi-bir-arada yükleyicisini henüz indirmediyseniz indirin:
-
Wallarm modüllerini henüz kurmadıysanız kurun:
-
cpire yardımcı programını çalıştırın:
-
Düzenli ifadeyle eşleşip eşleşmediğini kontrol etmek istediğiniz değeri girin.
Yardımcı program şu sonucu döndürür:
-
Değer düzenli ifadeyle eşleşirse
0 -
Değer düzenli ifadeyle eşleşmezse
FAIL -
Düzenli ifade geçersizse hata mesajı
\ karakterinin ele alınmasına ilişkin özellikler
İfade \ içeriyorsa, lütfen [] ve \ ile kaçırın (örneğin, [\\]).
Wallarm Console üzerinden eklenen düzenli ifade örnekleri
-
/.gitiçeren herhangi bir dizeyle eşleşmek için -
.example.comiçeren herhangi bir dizeyle eşleşmek için -
*’in herhangi bir sembolün herhangi bir sayıda tekrarı olabildiği/.example.*.comile biten herhangi bir dizeyle eşleşmek için -
1.2.3.4 ve 5.6.7.8 hariç tüm IP adresleriyle eşleşmek için
-
/.example.com.phpile biten herhangi bir dizeyle eşleşmek için -
Küçük ve büyük harflerle
sqLmAp,SqLMapvb. varyasyonlarıylasqlmapiçeren herhangi bir dizeyle eşleşmek için -
admin\.exe,admin\.bat,admin\.sh,cmd\.exe,cmd\.bat,cmd\.shdeğerlerinden bir veya birkaçını içeren herhangi bir dizeyle eşleşmek için -
Küçük/büyük harf varyasyonlarıyla
onmouse, küçük/büyük harf varyasyonlarıylaonload,win\.ini,promptdeğerlerinden bir veya birkaçını içeren herhangi bir dizeyle eşleşmek için -
Mozillaile başlayan ancak1aa875F49IIIdizesini içermeyen herhangi bir dizeyle eşleşmek için -
Şu değerlerden biriyle başlayan herhangi bir dizeyle eşleşmek için:
python-requests/,PostmanRuntime/,okhttp/3.14.0,node-fetch/1.0
Koşul türü: ABSENT (∅)¶
İstek, belirtilen parçayı içermemelidir. Bu durumda karşılaştırma bağımsız değişkeni kullanılmaz.
Kurallar kümesi yaşam döngüsü¶
Oluşturulan tüm kurallar ve azaltma kontrolleri özel bir kural kümesi oluşturur. Wallarm düğümü, gelen istekleri analiz ederken özel kural kümesine dayanır.
Kurallardaki ve azaltma kontrollerindeki değişiklikler anında etkili OLMAZ. Değişiklikler, özel kural kümesinin oluşturulması ve filtreleme düğümüne yüklenmesi tamamlandıktan sonra istek analizi sürecine uygulanır.
Custom ruleset building¶
Adding a new rule/mitigation control, deleting or changing existing ones in the Wallarm Console → Security Controls → Rules or Mitigation Controls launch a custom ruleset build. During the building process, rules and controls are optimized and compiled into a format adopted for the filtering node. The process of building a custom ruleset typically takes from a few seconds for a small number of rules to up to an hour for complex rule trees.
Uploading to filtering node¶
Custom ruleset build is uploaded to the filtering node during the filtering node and Wallarm Cloud synchronization. By default, synchronization of the filtering node and Wallarm Cloud is launched every 2‑4 minutes. More details on the filtering node and Wallarm Cloud synchronization configuration →
The status of uploading a custom ruleset to the filtering node is logged to the /opt/wallarm/var/log/wallarm/wcli-out.log file.
All Wallarm nodes connected to the same Wallarm account receive the same set of default and custom rules for traffic filtering. You still can apply different rules for different applications by using proper application IDs or unique HTTP request parameters like headers, query string parameters, etc.
Backup and restore¶
To protect yourself from accidentally misconfigured or deleted rules, you can backup your current custom ruleset.
There are the following rule backup options:
-
Automatic backup creation after each custom ruleset build. The number of automatic backups is limited to 7: for each day when you change the rules several times, only the last backup is kept.
-
Manual backup creation at any time. The number of manual backups is limited to 5 by default. If you need more, contact the Wallarm technical support team.
You can:
-
Access current backups: in the Rules section, click Backups.
-
Create a new backup manually: in the Backups window, click Create backup.
-
Set name and description for the manual backup and edit them at any moment.
Naming for automatic backups
The automatic backups are named by the system and cannot be renamed.
-
Load from existing backup: click Load for the required backup. When loading from the backup, your current rule configuration is deleted and replaced with the configuration from the backup.
-
Delete backup.

Rule modification restrictions
You cannot create or modify rules or mitigation controls until creating backup or load from backup is complete.
Kuralları almak için API çağrıları¶
Özel kuralları almak için Wallarm API’sini doğrudan çağırabilirsiniz.