| 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. | |||||||||||||||||||||||||