Skip to content
Smarter by Design.Simpler for Business

waf rule-parts ​

waf rule-parts komutu, bir WAF kuralının denetim parçalarını yönetir. Her parça isteğin bir bölgesini (yol, sorgu dizesi, başlıklar, gövde) ve o bölgedeki bir anahtarı hedefler; anahtarın adının, sayısının ve değerinin hangi sınırlar içinde kalacağını belirler.

Komut Özeti ​

TR7 WEB-CLI · waf rule-parts
# komuttan sonra Tab
admin@TR7LBWAF01> waf rule-parts
add delete list show update
 
admin@TR7LBWAF01> waf rule-parts list poolId <vservice> hostGroupId <grup> ruleId <kural>
admin@TR7LBWAF01> waf rule-parts add poolId <vservice> hostGroupId <grup> ruleId <kural> loc query …
admin@TR7LBWAF01> waf rule-parts update poolId <vservice> hostGroupId <grup> ruleId <kural> id <kimlik> …
admin@TR7LBWAF01> waf rule-parts delete poolId <vservice> hostGroupId <grup> ruleId <kural> <kimlik>
admin@TR7LBWAF01>  

Zorunlu Alanlar ​

add komutunda CLI zorunlu alanları aşağıdaki sırayla, tek tek ister; biri yazılmadan sonrakini göstermez. Alanlar alan adı ile değeri birlikte yazılır. Bölgeye özgü alanlar dördüncü sıradaki loc yazıldıktan sonra listelenir.

SıraAlanDurumDeğer
1poolIdZorunluParçanın bağlı olduğu vService kaydı
2hostGroupIdZorunluParçanın bağlı olduğu host grubu kaydı
3ruleIdZorunluParçanın ait olduğu kural; kurallar eşleştikleri yolla listelenir
4locZorunlupath · query · header · json · xml · form · raw. Oluşturulduktan sonra değiştirilemez

update komutunda dördüncü sırada loc yerine id istenir; list, show ve delete komutları ilk üç alanı ister.

show ve delete komutlarında ilk üç alandan sonra parçanın kimliği alan adı olmadan yazılır. Parçalar seçim listesinde bölge: anahtar biçiminde, anahtarsız olanlar bölge: (all keys) olarak görünür.

Hedef Anahtar ​

AlanNe yaparArkasına ne yazılır
--argDenetimin bölgedeki hangi anahtara uygulanacağını belirlerAnahtar adı. Boş bırakıldığında denetim bölgedeki bütün anahtarlara uygulanır. Oluşturulduktan sonra değiştirilemez

Bölgelere Göre Alan Aileleri ​

Her bölge kendi alan ailelerini açar. Aşağıdaki tablo hangi ailenin hangi bölgelerde bulunduğunu gösterir; ardından her bölgenin alanları tek tek yazılmıştır.

Alan ailesiHangi bölgelerde
Toplam boyut kısıtı (Size)path · raw · query · header
Derinlik kısıtı (Depth)path · json · xml
Anahtar kısıtları (KeyLength, KeyCount, AllowedArgs)query · header · json · xml · form
Zorunlu anahtarlar (MustArgs)query · header · form
İçerik engelleme (BlockAll, BlockInvalid)json · xml · form
İzinli MIME tipleri (AllowedMimeTypes)form · raw

Boyut, derinlik, anahtar uzunluğu ve anahtar sayısı kısıtlarının hepsi aynı üç alandan oluşur: işleç (.op), değer (.val) ve aralık sonu (.val2).

İşleç none değilse değer zorunludur

Şemadaki kısıt, işleç none dışında bir değer aldığında .val alanının sayı olmasını, işleç - iken ayrıca .val2 alanının da sayı olmasını gerektirir.

loc path — istek yolu ​

AlanNe yaparArkasına ne yazılır
--pathSize.opBölgenin toplam boyutunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–1024)
--pathSize.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--pathSize.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--pathDepth.opDerinliğin nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 8)
--pathDepth.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--pathDepth.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır

loc query — sorgu dizesi ​

AlanNe yaparArkasına ne yazılır
--querySize.opBölgenin toplam boyutunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 8192)
--querySize.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--querySize.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--queryKeyLength.opAnahtar adı uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–128)
--queryKeyLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--queryKeyLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--queryKeyCount.opAnahtar sayısının nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 16)
--queryKeyCount.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--queryKeyCount.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--queryAllowedArgs.NBölgede hangi anahtarlara izin verileceğini belirlerAnahtar adı; her anahtar kendi indeksiyle. Boş liste kısıtlama yok demektir
--queryMustArgs.NBölgede bulunması zorunlu anahtarları belirlerAnahtar adı; her anahtar kendi indeksiyle

loc header — HTTP başlıkları ​

AlanNe yaparArkasına ne yazılır
--headerSize.opBölgenin toplam boyutunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 4096)
--headerSize.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--headerSize.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--headerKeyLength.opAnahtar adı uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–128)
--headerKeyLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--headerKeyLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--headerKeyCount.opAnahtar sayısının nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 32)
--headerKeyCount.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--headerKeyCount.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--headerAllowedArgs.NBölgede hangi anahtarlara izin verileceğini belirlerAnahtar adı; her anahtar kendi indeksiyle. Boş liste kısıtlama yok demektir
--headerMustArgs.NBölgede bulunması zorunlu anahtarları belirlerAnahtar adı; her anahtar kendi indeksiyle

loc json — JSON gövde ​

AlanNe yaparArkasına ne yazılır
--jsonDepth.opDerinliğin nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 8)
--jsonDepth.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--jsonDepth.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--jsonKeyLength.opAnahtar adı uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–32)
--jsonKeyLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--jsonKeyLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--jsonKeyCount.opAnahtar sayısının nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 1024)
--jsonKeyCount.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--jsonKeyCount.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--jsonAllowedArgs.NBölgede hangi anahtarlara izin verileceğini belirlerAnahtar adı; her anahtar kendi indeksiyle. Boş liste kısıtlama yok demektir
--jsonBlockAllBölgedeki tüm içeriğin engellenmesini açartrue (varsayılan) · false
--jsonBlockInvalidBölgedeki geçersiz içeriğin engellenmesini açartrue (varsayılan) · false

loc xml — XML gövde ​

AlanNe yaparArkasına ne yazılır
--xmlDepth.opDerinliğin nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 32)
--xmlDepth.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--xmlDepth.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--xmlKeyLength.opAnahtar adı uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–64)
--xmlKeyLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--xmlKeyLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--xmlKeyCount.opAnahtar sayısının nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 1024)
--xmlKeyCount.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--xmlKeyCount.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--xmlAllowedArgs.NBölgede hangi anahtarlara izin verileceğini belirlerAnahtar adı; her anahtar kendi indeksiyle. Boş liste kısıtlama yok demektir
--xmlBlockAllBölgedeki tüm içeriğin engellenmesini açartrue (varsayılan) · false
--xmlBlockInvalidBölgedeki geçersiz içeriğin engellenmesini açartrue (varsayılan) · false

loc form — form gövdesi ​

AlanNe yaparArkasına ne yazılır
--formKeyLength.opAnahtar adı uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–64)
--formKeyLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--formKeyLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--formKeyCount.opAnahtar sayısının nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan <= 32)
--formKeyCount.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--formKeyCount.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--formAllowedArgs.NBölgede hangi anahtarlara izin verileceğini belirlerAnahtar adı; her anahtar kendi indeksiyle. Boş liste kısıtlama yok demektir
--formMustArgs.NBölgede bulunması zorunlu anahtarları belirlerAnahtar adı; her anahtar kendi indeksiyle
--formBlockAllBölgedeki tüm içeriğin engellenmesini açartrue (varsayılan) · false
--formBlockInvalidBölgedeki geçersiz içeriğin engellenmesini açartrue (varsayılan) · false
--formAllowedMimeTypes.NBölgede hangi MIME tiplerine izin verileceğini belirlerMIME tipi; her tip kendi indeksiyle. Boş liste kısıtlama yok demektir
--formFileOwaspYüklenen dosyalara OWASP denetimi uygulanmasını açartrue (varsayılan) · false

loc raw — ham gövde ​

AlanNe yaparArkasına ne yazılır
--rawSize.opBölgenin toplam boyutunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 1–16384)
--rawSize.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--rawSize.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--rawAllowedMimeTypes.NBölgede hangi MIME tiplerine izin verileceğini belirlerMIME tipi; her tip kendi indeksiyle. Boş liste kısıtlama yok demektir
--rawBlockUnparsedAyrıştırılamayan ham gövdenin engellenmesini açartrue (varsayılan) · false
--rawBlockUnexpectedErrorBeklenmedik ayrıştırma hatasında engellemeyi açartrue · false (varsayılan false)

Her Bölgede Ortak Alanlar ​

Aşağıdaki alanlar loc değerinden bağımsız olarak her parçada bulunur.

AlanNe yaparArkasına ne yazılır
--valueLength.opAnahtarın değerinin uzunluğunun nasıl karşılaştırılacağını seçernone kısıtlama yok · <= · = · >= · - aralık (varsayılan -, 0–1024)
--valueLength.valKarşılaştırılacak değeri belirlerSayı; işleç - iken aralığın başı
--valueLength.val2Aralığın sonunu belirlerSayı; yalnız işleç - iken kullanılır
--argOwaspBu parçaya OWASP denetimlerinin uygulanmasını açartrue (varsayılan) · false
--argOwaspExclusions.NBu parçada uygulanmayacak OWASP kural anahtarlarını belirlerKural anahtarı; her anahtar kendi indeksiyle, aynı anahtar iki kez yazılamaz
--argLogEngellemede değerin günlüğe yazılmasını açartrue (varsayılan) · false
--argRegex.inputDeğerin eşleşmesi gereken düzenli ifadeyi belirlerHyperscan lehçesinde düzenli ifade. Boş girdi kısıtlama yok demektir
--argMultipleAynı anahtarın en çok kaç kez yinelenebileceğini belirler0–1000000 arası tam sayı

Örnekler ​

TR7 WEB-CLI · denetim parçaları
# sorgu dizesinde tek bir anahtarın değeri sayı ve en çok 8 karakter olsun
admin@TR7LBWAF01> waf rule-parts add poolId <vservice> hostGroupId <grup> ruleId <kural> \
loc query --arg id \
--valueLength.op "<=" --valueLength.val 8 --argRegex.input "^[0-9]+$"
 
# bölge geneli: sorguda en çok 10 anahtar, yalnız üç ad izinli
admin@TR7LBWAF01> waf rule-parts add poolId <vservice> hostGroupId <grup> ruleId <kural> \
loc query --queryKeyCount.op "<=" --queryKeyCount.val 10 \
--queryAllowedArgs.0 id --queryAllowedArgs.1 page --queryAllowedArgs.2 sort
 
# JSON gövdede derinlik ve geçersiz içerik denetimi
admin@TR7LBWAF01> waf rule-parts add poolId <vservice> hostGroupId <grup> ruleId <kural> \
loc json --jsonDepth.op "<=" --jsonDepth.val 6 --jsonBlockInvalid true
 
# form gövdesinde izinli MIME tipleri
admin@TR7LBWAF01> waf rule-parts update poolId <vservice> hostGroupId <grup> ruleId <kural> id <kimlik> \
--formAllowedMimeTypes.0 image/png --formAllowedMimeTypes.1 image/jpeg
admin@TR7LBWAF01>  

Bilinmesi Gerekenler ​

  • Parça bir kurala aittir. Her komutta poolId, hostGroupId ve ruleId ile hangi kuralın parçaları üzerinde çalışıldığı belirtilir; kurallar waf fw-rules komutundadır.
  • Bölge ve anahtar sonradan değiştirilemez. loc ve --arg alanları şemada sabit işaretlidir; başka bir bölge ya da anahtar için yeni bir parça oluşturulur.
  • Anahtar boş bırakılırsa bölge geneli denetim olur. --arg verilmediğinde denetim bölgedeki bütün anahtarlara uygulanır.
  • Bölge, alanları belirler. loc değeri hangi alanların listeleneceğini belirler; CLI onu poolId, hostGroupId ve ruleId alanlarından sonra ister ve bölgeye özgü alanlar ancak ondan sonra görünür.
  • Zorunlu alanlar -- almaz. poolId, hostGroupId, ruleId ve loc alan adı ile değeri yan yana yazılır; isteğe bağlı alanlar --alan değer biçimindedir. Ayrıntı API Commands sayfasındadır.
  • Karşılaştırma işleçleri tırnak ister. <=, >= ve - gibi değerler kabuk tarafından yönlendirme sayılmasın diye çift tırnak içinde yazılır.
  • Boş liste kısıtlama yok demektir. İzinli anahtar ve izinli MIME tipi listeleri boş bırakıldığında o bölgede kısıtlama uygulanmaz.
  • Kayıtlar yalnız kendi bölgelerinin alanlarını taşır. Şemadaki açıklamaya göre bir parça, oluşturulduğu bölgenin dışındaki alanları saklamaz.