https://www.fatihyildirim.tr  
  FortiGate: Özel İmza yazmak 
   1. Temel Sözdizimi (Syntax) IPS- Application Control
   2. Adım Adım Uygulama (CLI)
   3. Kullanılan Anahtar Seçenekler
   4. Çalışan Bir Örnek Analizi
   5. İmzayı Aktif Hale Getirme
 
        FortiGate: Writing a custom signature
  Son Güncelleme: 20.05.2026  r.01.02 /Syntax detayları , Menü düzenlemesi
 
  FortiGate'te application control için özel imza (custom signature) yazmak, özellikle FortiGuard kütüphanesinde henüz tanımlanmamış veya size özel bir uygulamayı tespit etmeniz gerektiğinde oldukça kullanışlıdır.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  İşte adım adım nasıl yapılacağı:
 
   1. Temel Sözdizimi (Syntax) 🔝
 
 
 
 
 
 
 
 
 
 
 
 
 
  Tüm imzalar `F-SBID(` ile başlar ve bir dizi `--seçenek değer;` ile devam eder. En temel yapı şöyledir:
 
  F-SBID( --name "Imza_Adi"; --protocol tcp; --flow from_client; --dst_port 8080; --pattern "aranacak_veri"; --app_cat 6; )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  📍 Bu yapıda noktalı virgüller (`;`) her bir seçeneği ayırır ve tüm imza tek bir satırda yazılmalıdır (maksimum 4095 karakter).
 
   2. Adım Adım Uygulama (CLI) 🔝
  Custom signature eklemek için CLI (Command Line Interface) kullanmanız gerekir.
 
  Adım 1: Custom Application nesnesine giriş yapın
  #config application custom          
 
  Adım 2: Yeni bir imza oluşturun veya düzenleyin
  xxx (custom) # edit "TestSign"          
 
  Adım 3: İmza tanımını girin
  `set signature` komutu ile imzanızı tanımlayın.
  xxx (TestSign) # set signature "F-SBID( --name \"TestSign\"; --protocol tcp; --flow from_client; --dst_port 5000; --pattern \"LOGIN\"; --context packet; )"
 
  xxx (TestSign) # get
tag                 : TestSign
id                  : 0
comment      :
signature      : F-SBID(--name "TestSign"; --protocol tcp; --flow from_client; dst_port 5000; --pattern "LOGIN"; --context packet;)
category        : 0
protocol        :
technology    :
behavior        :
vendor           : 
 
  Adım 4: Metada tanımlayın
  İmzanın hangi kategoride olduğunu, protokolünü ve teknolojisini belirtin.
  xxx (TestSign) # set category 6     # Örnek: Proxy (ID'leri görmek için 'set category ?' yazın)
  xxx (TestSign) # set protocol 9     # Örnek: HTTP (ID'leri görmek için 'set protocol ?' yazın)
  xxx (TestSign) # set technology 1   # Tarayıcı tabanlı
  xxx (TestSign) # set comment "Sirket icin ozel uygulama imzasi"
 
  Adım 5: Çıkış yapın
  xxx (TestSign) # end              
 
   3. Kullanılan Anahtar Seçenekler
  İmza yazarken en sık kullanacağınız seçenekler şunlardır:
 
  Seçenek  | Açıklama         Örnek
  `--name`  | İmzanın okunabilir adı (Boşluk varsa tırnak içinde). `--name \"Facebook_Login\"`
  `--protocol`  | Kullanılan protokol (`tcp`, `udp`, `http` vb.). `--protocol tcp`
  `--dst_port`  | Hedef port numarası. `--dst_port 443`
  `--src_port`  | Kaynak port numarası. `--src_port 12345`
  `--flow`  | Trafik yönü (`from_client`, `from_server`). `--flow from_client`
  `--pattern`  | Paket içerisinde aranacak metin veya hex verisi. `--pattern \"admin\"` veya 
  `--pattern \"|0a 0d|\"`
  `--context`  | Aramanın yapılacağı alan (`payload`, `uri`, `host`, `packet`). `--context uri`
  `--app_cat`  | Uygulama kategorisi ID'si (örn: 23 = Social.Media). `--app_cat 23`
  `--weight`  | Öncelik. Daha yüksek sayı, daha yüksek öncelik. `--weight 15`
 
   4. Çalışan Bir Örnek Analizi 🔝
  Fortinet'in kendi dokümantasyonunda geçen bir VPN imza örneğini inceleyelim:
 
  F-SBID(                 
  --name "FastLemon.VPN.ProH.Set.Custom";           
  --protocol tcp;               
  --flow from_client;               
  --dst_port 29914;               
  --seq =,1,relative;               
  --data_size >144;               
  --data_size <293;               
  --pattern !"|16 03|";               
  --context packet;               
  --within 2,context;               
  --pattern !"|17 03|";               
  --context packet;               
  --within 2,context;               
  --tag set,Tag.xvpn.ProH.TCP.Set;             
  --app_cat 6;               
  --weight 15;               
  )                
 
  Bu örnekte:
  - TCP 29914 portuna giden paketler kontrol ediliyor.
  - Veri boyutu 144 ile 293 byte arasında olanlar filtreleniyor.
  - `pattern !"|16 03|"` ifadesi, içinde "SSL Handshake" başlangıç bayrağı olmayan (`!` operatörü sayesinde) paketleri işaretliyor.
  - `--app_cat 6` ile kategorisi "Proxy" olarak ayarlanmış.
 
   5. İmzayı Aktif Hale Getirme 🔝
  İmzayı yazdıktan sonra kullanmak için şu adımları izleyin:
 
  1.  Application Control Sensor'a ekleyin: GUI'de `Security Profiles > Application Control` yolunu izleyin. Profilinizi düzenleyin ve "Custom Signatures" kategorisi altında yeni oluşturduğunuz imzayı bulup `Monitor` veya `Block` yapın.
  2.  Firewall Policy'de etkinleştirin: İlgili firewall policy'sinde `Application Control` profilini seçin. Eğer SSL tabanlı bir uygulama ise (örneğin HTTPS üzerinden çalışıyorsa), **SSL Deep Inspection**'ın açık olduğundan emin olun.
 
   Önemli Uyarılar ve İpuçları
 
  - Öncelik (Priority): Kendi yazdığınız custom signature'lar, FortiGuard'un hazır imzalarından her zaman daha yüksek önceliğe sahiptir. Bu sayede kendi kurallarınızın önce çalışmasını garanti edebilirsiniz.
  - SSL Trafiği: Şifreli (HTTPS) bir uygulamayı tespit etmek için `--require_ssl_di "Yes"` seçeneğini kullanmanız gerekir; ancak bu seçenek genellikle önceden tanımlı imzalar içindir. Custom imzalarda SSL Deep Inspection yapılmış (decrypted) trafik üzerinde çalışmak daha sağlıklıdır.
  - Regex Kullanımı: `--pattern` seçeneği düz metin eşlemesi yapar. Regex için `--pcre` seçeneğini araştırmanız gerekebilir (daha ileri seviye).
 
  Herhangi bir aşamada takılırsanız, CLI'da `set category ?` yazarak geçerli ID'leri görebilirsiniz.