Kurumsal Network Kurulumu

FortiGate Firewall Adres Nesneleri ve Adlandırma Standardı

FortiGate Firewall adres nesneleri: NIST ve NSA'ya göre nesne düzeni, adlandırma standardı, arayüze bağlama, FQDN riski, grup, referans ve servis nesnesi.

İlker Pehlivan

FortiGate Firewall adres nesnesi, kurala yazılan bir adrese, ağa ya da alan adına verilen addır ve Policy & Objects → Addresses ekranında açılır. NIST ve NSA’nın kural seti için tarif ettiği düzende her adres, türünü ve yerini adından söyleyen tek bir nesnedir. Nesnenin neden açıldığı açıklamasında yazar, kimsenin kullanmadığı nesne de listede kalmaz.

Bu yazı FortiGate Firewall yapılandırma rehberimizin 13. adımıdır. Lab’da önceki adımlarda açılan nesneleri bu düzene çektim ve FortiGate’in nesnelerle ilgili davranışını ölçtüm. İki bulgu beklenenden farklı çıktı: farklı arayüzlere bağlı iki nesne aynı gruba yazılınca FortiGate grubu bir üyesi eksik kaydetti. İç DNS’e ulaşılamayınca da bir FQDN nesnesi, iç bir ada ait internetteki iki adresi tutmaya başladı.

Örnekteki sınır kapısında her şeridin bariyer direğinde bir jeton yuvası vardır ve jetonlar şeride göre kesilir. Bir şerit için kesilmiş jeton yandaki şeridin yuvasına girmez; üzerindeki yazı da görevliye jetonun neyi açtığını söyler. FortiGate’te jeton adres nesnesi, jetonun şekli nesnenin bağlı olduğu arayüz, yuva kuralın arayüzü, jetonun üzerindeki yazı da nesnenin adıdır.

Bu yazı, Kurumsal Network Kurulumu hizmetimizde devraldığımız firewall’ları düzenlerken ilk kurduğumuz şeyi anlatır: kural listesinin okunabilir olması için nesne düzeni.

FortiGate Firewall adres nesnesi benzetmesi: sınır kapısında iki şeridin bariyer direklerinden birinde yuvarlak, öbüründe kare yuva var, görevlinin elindeki yuvarlak jeton kare yuvaya girmiyor
Bir kapı için kesilmiş jeton o kapının şeklini taşır ve yandaki kapıyı açmaz. FortiGate'te de bir arayüze bağlanan adres nesnesi, başka arayüzün kuralında kullanılamaz.

FortiGate Adres Nesnesi Nedir? Kural Neden Adrese Değil Ada Yazılır?

FortiGate bir kurala adresi doğrudan yazdırmıyor. Lab’da personel ağındaki eski bir bilgisayarın adresini, 10.34.30.50’yi, nesne açmadan bir kuralın kaynağına yazmayı denedim:

FortiGate CLI Çıktısı
value parse error before '10.34.30.50'
Command fail. Return code -3
...
object check operator error, -651, discard the setting
Command fail. Return code 1

FortiGate adresi tanımadı ve kuralı hiç kaydetmedi. Kuralın kaynağı ve hedefi yalnız nesne adı alıyor; kural listesine bakan kişi adresleri değil adları görüyor. Bu yüzden adres nesnesi isteğe bağlı bir düzen değil, kural yazmanın ön koşuludur. Nesnenin adı da kuralın okunan tek yüzüdür.

Addresses ekranı boş gelmiyor. Lab cihazımda fabrika ayarından kalan üç tür nesne vardı:

  1. all: her adresi kapsar. Lab’da 11 kural ve grup onu kullanıyor.
  2. none: hiçbir adresi kapsamaz.
  3. İnternet adları: gmail.com, login.microsoftonline.com gibi alan adları ve onları toplayan G Suite ve Microsoft Office 365 grupları.

Fabrika nesnelerine dokunmuyoruz: adları Fortinet’in kendi belgelerinde ve güncellemelerinde geçiyor, değiştirmek kimseye bir şey kazandırmıyor. Bu yazıdaki kurallar, kurumun kendi açtığı nesneler içindir.

FortiGate’te Nesne Düzeni Nasıl Olmalı?

Kural listesindeki her adres tek bir nesnedir; adı türünü ve yerini, açıklaması neden açıldığını söyler. Nesne kapsadığı trafik kadar dardır: tek cihaz için /32, bir bölümün tamamı için o bölümün ağı. Kimsenin kullanmadığı nesne düzenli gözden geçirmede ya bir kurala girer ya silinir.

Bu düzeni üç kaynak birlikte tarif ediyor:

  1. NIST SP 800-41 Rev. 1 (Eylül 2009), bölüm 5.2.2: kural seti olabildiğince belirgin olmalı. Aynı bölüm her kurala açıklama yazmayı ister, çünkü açıklama başkalarının bir kuralın neden yazıldığını anlamasını sağlar. Bölüm 5.5 düzenli gözden geçirmenin artık gerekmeyen kuralları bulacağını söyler.
  2. NSA Network Infrastructure Security Guidance (Mart 2022, sürüm 1.0), bölüm 2.4: kurallar yalnız gereken servislere ve sistemlere açıkça izin verir. Bölüm 3.1 her değişikliğin amacını ve gerekçesini yazmayı ister. Bölüm 7.4 kullanılmayan erişim listelerini sildirir, çünkü yöneticiye, uygulanmadıkları hâlde doğru uygulanıyormuş izlenimi verebilirler.
  3. Fortinet FortiOS 7.0.10 Administration Guide: FQDN adresleri sayfası bu nesneyle kuralların DNS sunucusunun doğru cevap vermesine dayandığını söyler. Adres grubu sayfası da grupta yalnız aynı arayüze ya da any’ye bağlı adreslerin durmasını ister.

NIST ve NSA kuraldan söz ediyor. FortiGate’te kuralın adresi nesne olduğu için, kural için istenen kesinlik ve açıklama nesneye iner: kuralın ne kadar geniş olduğunu nesnenin kapsamı, neden yazıldığını da çoğu zaman nesnenin açıklaması söyler.

Lab’da kullandığım dört nesne türünün farkı:

Tek adresAğFQDNGrup
Ne kapsarTek cihaz (/32)Bir bölümün tamamıAdın o anki adresleriÜyelerin toplamı
Adres değişinceElle düzeltilirVLAN’ın kendi nesnesi izler, elle yazılan izlemezDNS ile kendiliğindenÜyelere bağlı
Neye güvenirKurumun kaydınaKurumun kaydınaFortiGate’in DNS sunucularınaÜyelere
Ne zamanSunucu, yazıcı, yönetici bilgisayarıBölümün tamamına yazılan kuralAdresi başkasının elinde olan dış hizmetAynı kuralı alan birden çok nesne

Tablonun Neye güvenir satırı, iç sunucuya neden FQDN nesnesi yazmadığımızı açıklıyor; ölçümü aşağıda, FQDN bölümünde.

Kaç Nesne Olmalı?

NIST de NSA da bir sayı vermiyor. İlkenin pratik karşılığı: her adresin tek bir nesnesi olur. Aynı ağı iki nesne tutuyorsa, kural listesini okuyan kişi hangisinin doğru olduğunu sormak zorunda kalır ve biri değişip öbürü değişmediğinde kurallar sessizce ayrışır.

Lab’da 10.34.70.0/24 ağını iki nesne tutuyordu: elle açtığım n-muhasebe ve VLAN açılırken kendiliğinden oluşan muhasebe address. VLAN’ın kendi nesnesini tuttum, çünkü arayüzün adresini izliyor. Personel VLAN’ının adresini geçici olarak 10.34.31.1/24 yaptım ve nesneye baktım:

FortiGate CLI Çıktısı
    edit "n-personel"
        set type interface-subnet
        set comment "Personel VLAN 30 agi; VLAN arayuzunden olusur"
        set subnet 10.34.31.1 255.255.255.0
        set interface "personel"

Nesne yeni ağı kendiliğinden aldı; adresi geri 10.34.30.1/24 yapınca o da geri döndü. Elle yazılmış bir ağ nesnesi eski adreste kalırdı. Fortinet bu türe interface subnet diyor ve kılavuzunda adresin nesneye dinamik olarak atandığını yazıyor.

Hangi Nesne Ne Zaman Kullanılır?

Lab’daki kullanım durumları:

  1. Tek adres nesnesi: adresini kurumun verdiği her cihaz. Depo etiket yazıcısı, DHCP yazısında rezervasyonla 10.34.90.50’yi aldı; nesnesi h-depo-etiket-yazici.
  2. Ağ nesnesi: bir bölümün tamamına yazılan kural. VLAN’ın kendi nesnesi kullanılır, elle ikinci bir nesne açılmaz.
  3. Grup: aynı kuralı alan birden çok nesne. Üç yazıcı g-yazicilar grubunda; dördüncü yazıcı gelince kural değil grup değişir.
  4. FQDN nesnesi: adresi başkasının elinde olan ve değişen dış hizmet. Fabrika ayarındaki login.microsoftonline.com buna örnek.
  5. Arayüze bağlı nesne: yalnız tek bir bölümün kurallarında anlamı olan nesne. Bedelini aşağıdaki bağlama bölümünde ölçtüm.

Bu türleri doğru kullanmanın kuralları:

  1. Kural kapsadığı kadar dar yazılır: tek cihaza kural yazılacaksa ağ nesnesi değil tek adres nesnesi seçilir (NIST 5.2.2, NSA 2.4).
  2. Her nesnenin açıklaması vardır: ne olduğu ve neden açıldığı; varsa bağlı olduğu kayıt (NIST 5.2.2 ve 5.5, NSA 3.1).
  3. İç sunucuya FQDN nesnesi yazılmaz: FQDN nesnesi FortiGate’in DNS’ine güvenir (Fortinet). Bu kuralın lab’daki ölçümü FQDN bölümünde.
  4. Kullanılmayan nesne gözden geçirilir: listede Ref. sütunu 0 olan nesne ya kuralını bekleyen yeni bir nesnedir ya da eski bir kayıttır; açıklaması hangisi olduğunu söyler (NSA 7.4, NIST 5.5).

Nesne Nasıl Adlandırılır?

Hiçbir otorite bir adlandırma şeması vermiyor; NIST ve NSA yalnız neyin yazılacağını söylüyor. Bu yüzden devraldığımız firewall’larda ilk kurduğumuz şey bir şema oluyor. Lab’da kullandığım şema:

TürÖnekÖrnekReferans kelime
Tek adres (/32)h-h-depo-etiket-yaziciHost
Ağn-n-muhasebeNetwork
Adres aralığır-r-misafir-dhcpRange
Alan adı (FQDN)f-f-portalFQDN
Adres grubug-g-yazicilarGroup
Özel serviss-s-tcp-9100-yazdirmaService
Sanal IPv-v-dmz-webVirtual IP
IP havuzup-p-muhasebe-cikisPool

Şemanın dört kuralı var:

  1. Önek türü söyler. Harf, türün İngilizce adının baş harfidir: h- host, yani tek bir cihaz, n- network, yani bir ağın tamamı. Bir kuralın ne kadar geniş olduğu adından okunur.
  2. Önekten sonra yer, sonra ne. h-depo-etiket-yazici: depodaki etiket yazıcısı. Aynı bölümün nesneleri listede alt alta dizilir.
  3. Küçük harf, ASCII, tire. FortiGate adda Türkçe harfi kabul etti (h-muhasebe-yazıcı kaydedildi), ama ad CLI’da, yedek dosyasında ve başka sistemlere aktarımda da taşınıyor; aynı karakterin her yerde aynı görüneceğinin garantisi yok.
  4. Açıklama boş kalmaz. Ad 79 karakterle sınırlı ve kısa kalmalı; nesnenin hikâyesi 255 karakterlik Comments alanına yazılır.

FortiGate’te Adres Nesnesi Oluşturma

Bu adımdan önce hazır olması gerekenler:

  1. Cihazın adresi kesinleşmiş olmalı: depo etiket yazıcısı DHCP rezervasyonuyla 10.34.90.50’yi alıyor; rezervasyonu DHCP yazısında açtık.
  2. Adlandırma şeması yazılmış olmalı: yukarıdaki tablo.

Menü yolu: Policy & Objects → Addresses → Create New → Address. Formun alanları:

  1. Name: önek, yer ve ne. Lab’da h-depo-etiket-yazici.
  2. Type: Subnet, fabrika ayarı. IP Range, FQDN, Geography (ülke), Dynamic (bulut kaynakları) ve Device (MAC Address) de seçilebilir.
  3. IP/Netmask: tek cihaz için /32. Lab’da 10.34.90.50/32.
  4. Interface: fabrika ayarında any; nesne her kuralda kullanılabilir. Bağlamanın ne yaptığı aşağıda.
  5. Comments: nesnenin ne olduğu ve hangi kayda bağlı olduğu yazılır. Lab’da Depo etiket yazicisi; FortiGate DHCP rezervasyonu 10.34.90.50.
FortiGate New Address formu: Name alanında h-depo-etiket-yazici ve Comments alanında DHCP rezervasyonunu anan açıklama kırmızı çerçeveyle işaretli; tür Subnet, adres 10.34.90.50/32, arayüz any
Ad nesnenin ne olduğunu, açıklama neden var olduğunu söylüyor; iki yıl sonra okuyan kişi rezervasyonu buradan bulur.

Type değişince form da değişiyor: FQDN seçilince IP/Netmask yerine alan adı kutusu gelir. Aynı kaydın komut satırındaki karşılığı:

FortiGate CLI
config firewall address
    edit "h-depo-etiket-yazici"
        set comment "Depo etiket yazicisi; FortiGate DHCP rezervasyonu 10.34.90.50"
        set subnet 10.34.90.50 255.255.255.255
    next
end

Formun iki sınırını da ölçtüm. 80 karakterlik bir ad reddedildi:

FortiGate CLI Çıktısı
string value is too long. the size is 80, the limit is 79
value parse error before 'h-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Command fail. Return code -1

İkinci sınır ağ adresinde: 10.34.70.50 255.255.255.0 yazdığım nesne set subnet 10.34.70.0 255.255.255.0 olarak kaydedildi. FortiGate adresin cihaz bitlerini sildi ve uyarmadı; /32 yazmayı unutan kişi tek bir yazıcı yerine bütün ağı kurala koyar.

Nesneyi Arayüze Bağlamak: Jeton Yalnız Kendi Şeridinin Yuvasına Girer

Jetonla açılan bir bariyeri herkes bilir: jetonu yuvaya atarsınız, bariyer kalkar. Yuva yalnız kendi jetonunu kabul eder; başka bir yerin jetonu yuvaya girmez.

Bu sahnenin parçaları:

  1. Adres nesnesi jetondur.
  2. Nesnenin Interface alanı jetonun şeklidir. any küçük, her yuvaya giren bir jetondur; bir arayüze bağlanan nesne o arayüzün yuvasının şeklini alır.
  3. Kuralın kaynak ya da hedef arayüzü bariyerdeki yuvadır.
  4. Adres grubu bir kese jetondur; kesedeki jetonların hepsi aynı yuvaya uymalıdır.

Örnekteki sınır kapısında görevli jetonu yuvaya atmadan önce şekline bakar: yuvarlak yuvalı şeridin jetonu kare yuvaya girmez ve o şeridin bariyeri kalkmaz. FortiGate’te mekanizma şöyle işliyor:

  1. Nesneye arayüz bağlanır: set associated-interface.
  2. Nesne bir kurala yazılırken FortiGate nesnenin arayüzünü kuralın arayüzüyle karşılaştırır.
  3. Eşleşmiyorsa nesneyi tanımaz ve kural kaydedilmez.
  4. Grupta da aynı karşılaştırma yapılır: farklı arayüze bağlı üye gruba girmez.
Arayüze bağlı adres nesnesi. Soldaki kuralın kaynak arayüzü ic-bolumler zone'u, yani yuvarlak yuva; sağdaki kuralın kaynak arayüzü dmz, yani kare yuva. ic-bolumler'e bağlı n-muhasebe nesnesi, yuvarlak jeton, ic-bolumler kuralına giriyor; dmz kuralına yazılınca FortiGate value parse error veriyor ve kuralı kaydetmiyor. Interface alanı any olan h-depo-etiket-yazici, küçük jeton, iki kurala da giriyor. Gruptaki jetonlar da aynı yuvaya uymalı; farklı arayüze bağlı üye gruba girmiyor. Kuralın kaynağı: ic-bolumler yuvarlak yuva n-muhasebe Interface: ic-bolumler girer h-depo-etiket-yazici Interface: any girer Kuralın kaynağı: dmz kare yuva n-muhasebe Interface: ic-bolumler girmez: kural kaydedilmedi h-depo-etiket-yazici Interface: any girer Kesedeki jetonlar da aynı yuvaya uymalı: farklı arayüze bağlı üye gruba girmez. Arayüze bağlı adres nesnesi. Üstteki kuralın kaynak arayüzü ic-bolumler zone'u, yani yuvarlak yuva; alttaki kuralın kaynak arayüzü dmz, yani kare yuva. ic-bolumler'e bağlı n-muhasebe nesnesi, yuvarlak jeton, ic-bolumler kuralına giriyor; dmz kuralına yazılınca FortiGate value parse error veriyor ve kuralı kaydetmiyor. Interface alanı any olan h-depo-etiket-yazici, küçük jeton, iki kurala da giriyor. Gruptaki jetonlar da aynı yuvaya uymalı; farklı arayüze bağlı üye gruba girmiyor. Kuralın kaynağı: ic-bolumler yuvarlak yuva n-muhasebe Interface: ic-bolumler girer h-depo-etiket-yazici Interface: any girer Kuralın kaynağı: dmz kare yuva n-muhasebe Interface: ic-bolumler girmez: kural kaydedilmedi h-depo-etiket-yazici Interface: any girer Kesedeki jetonlar da aynı yuvaya uymalı: farklı arayüze bağlı üye gruba girmez.
Bağlı nesne yalnız kendi arayüzünün kuralına giriyor; Interface alanı any kalan nesne her kurala uyuyor.

Kazanç ve bedel aynı mekanizmadan geliyor. Kazanç: bir bölümün adresi, o bölümle ilgisi olmayan bir arayüzün kuralına yanlışlıkla yazılamaz. Bedel üç yerde ölçüldü:

  1. Zone üyesi bir arayüze bağlanamıyor: zone’a üye VLAN tek başına seçilemiyor, zone seçiliyor.
  2. Grup kısıtlanıyor: farklı arayüzlere bağlı iki nesne aynı grupta duramıyor ve FortiGate bunu sessizce çözüyor.
  3. Nesne zone’la birlikte taşınmak zorunda: bölüm başka bir zone’a geçerse nesnenin bağı da elle değiştirilir.

Bu yüzden lab’da tek adres nesneleri ve gruplar any kalıyor; bağlama, bir bölümün dışında anlamı olmayan nesne için düşünülür.

1. Adım: Nesneyi Bir Arayüze Bağlayın

Nesneyi önce muhasebe VLAN’ına bağlamayı denedim:

FortiGate CLI Çıktısı
value parse error before 'muhasebe'
Command fail. Return code -3

Sebep, muhasebe’nin zone yazısında ic-bolumler zone’una üye olmasıydı: zone üyesi bir arayüz tek başına seçilemiyor. Nesneyi zone’a bağladım:

FortiGate CLI
config firewall address
    edit "n-muhasebe"
        set associated-interface "ic-bolumler"
        set subnet 10.34.70.0 255.255.255.0
    next
end

2. Adım: Nesneyi Başka Bir Arayüzün Kuralına Yazmayı Deneyin

n-muhasebe’yi kaynak arayüzü dmz olan bir kurala yazmayı denedim:

FortiGate CLI Çıktısı
value parse error before 'n-muhasebe'
Command fail. Return code -3
...
object check operator error, -651, discard the setting
Command fail. Return code 1

FortiGate nesneyi o kural için tanımadı ve kuralı kaydetmedi. Aynı denemeyi Interface alanı any olan h-depo-etiket-yazici ile yaptığımda nesne kurala girdi.

3. Adım: Bağlı Nesneyi Gruba Ekleyin

dmz’ye bağlı geçici bir nesne açtım ve n-muhasebe ile aynı gruba yazdım. Etkileşimli oturumda FortiGate tek satırlık bir uyarı verdi:

FortiGate CLI Çıktısı
gmfw01 (g-karisik-deneme3) # set member n-muhasebe h-dmz-bagli-deneme
n-muhasebe and h-dmz-bagli-deneme bound to different interfaces!

gmfw01 (g-karisik-deneme3) # show
config firewall addrgrp
    edit "g-karisik-deneme3"
        set member "n-muhasebe"
    next
end

Satırlar sırayla şunu söylüyor:

  1. Uyarı: iki üye farklı arayüzlere bağlı.
  2. Kayıt: grup yine de oluştu, ama yalnız ilk üyeyle. Command fail satırı yok.

Aynı komutları bir betikle gönderdiğimde uyarı satırı çıktıya hiç düşmedi; grup yine tek üyeyle kaydedildi. Betikle grup yazan biri, ikinci üyenin düştüğünü ancak show çıktısını okuyarak fark eder.

Bağlamayı Geri Almak

Bağı kaldırmak için nesnede unset associated-interface yazılır. Geçici bir nesnede denedim: bağ kalkınca nesne n-muhasebe ile aynı gruba sorunsuz girdi.

FortiGate CLI
config firewall address
    edit "h-baglama-deneme"
        unset associated-interface
    next
end

Jeton yeniden küçülür ve her yuvaya girer.

FQDN Nesnesi: Adresi FortiGate’in DNS’i Çözer

FQDN türünde nesnenin adresi yazılmaz; FortiGate adı kendi DNS ayarındaki sunucuya sorar ve gelen adresleri nesnenin içine koyar. Fortinet bu türü dış siteler için öneriyor. İç siteler için de kullanılabileceğini yazıyor, ama bir koşulla: erişilebilen güvenilir bir DNS sunucusu olmalı. Lab’daki NTP sunucusu için f-ntp01 nesnesini açtım:

FortiGate CLI
config firewall address
    edit "f-ntp01"
        set type fqdn
        set fqdn "ntp01.ad.sistemkusu.com"
    next
end

Nesnenin içine ne yazıldığını diagnose firewall fqdn list-all gösteriyor:

FortiGate CLI Çıktısı
fqdn_u 0x10438c35 ntp01.ad.sistemkusu.com: type:(1) ID(147) count(1) generation(55) data_len:13 flag: 1
ip list: (1 ip in total)
ip: 192.168.1.15

İç ad, FortiGate’in birincil DNS’i olan dc01 üzerinden doğru adrese çözüldü. FortiGate’in DNS düzenini, ikincil alanda neden 8.8.8.8 durduğunu ve hangi koşulla durabildiğini DNS ayarı yazımızda anlattık.

Nesne Kırmızı Değil, Adres Yanlış: İç DNS’e Ulaşılamayınca

FQDN nesnesi çözülemediğinde listede kırmızı görünür. Asıl tehlikeli durum bunun tersi: nesne çözülüyor, ama yanlış adrese. İki arızayı sırayla denedim.

Önce dc01’deki DNS servisini durdurdum. FortiGate her 10 saniyede bir yeniden sordu, rcode=2 (sunucu hatası) aldı ve nesnede son bilinen doğru adresi tuttu:

FortiGate CLI Çıktısı
... name=ntp01.ad.sistemkusu.com ver=IPv4 timer running,  min_ttl=3600:9 cache_ttl=0 slot=-1 num=1 wildcard=0... rcode=2
...  192.168.1.15 (ttl=3600:3050:3050)...

Sonra servisi açıp FortiGate ile dc01 arasındaki DNS trafiğini yolda sessizce düşürdüm; sunucu ayakta, ama cevap gelmiyor. FortiGate bu kez ikincil sunucu 8.8.8.8’e sordu:

FortiGate CLI Çıktısı
fqdn_u 0x10421709 ntp01.ad.sistemkusu.com: type:(1) ID(147) count(3) generation(56) data_len:39 flag: 1
ip list: (1 ip in total)
ip: 192.168.1.15
ip list: (1 ip in total)
ip: 216.150.1.129
ip list: (1 ip in total)
ip: 216.150.1.193

Nesne doğru adresi bırakmadı, yanına iki internet adresi ekledi. 8.8.8.8 “böyle bir ad yok” demedi, çünkü internetteki sistemkusu.com alanında joker karakterli bir kayıt var. Joker kayıt, alanın altında tanımlanmamış her ada aynı adresleri veren * kaydıdır; lab’ın iç alan adı da o alanın altında kalıyor. Gelen iki adres sitemizin barındırıldığı sunucuya ait.

Nesne bir kurala yazılmış olsaydı, kural bu iki adresi de kapsardı; FortiGate kuralı nesnenin içindeki adreslerle eşleştiriyor. Yolu yeniden açıp nesneyi yeniden sorgulattım (diagnose test application dnsproxy 5):

FortiGate CLI Çıktısı
...  216.150.1.129 (ttl=1725:1635:1635)...  216.150.1.193 (ttl=1725:1635:1635)...  192.168.1.15 (ttl=3600:3596:3596)...

Doğru adres tazelendi, ama iki internet adresi kendi süreleri dolana kadar nesnede kalacaktı: 1.635 saniye, yani 27 dakikaya yakın. Önbelleği temizlemek (dnsproxy 1) ve FQDN listesini yeniden yüklemek (dnsproxy 4) bu adresleri silmedi. Silen, DNS işçisini yeniden başlatmak oldu:

FortiGate CLI Çıktısı
fqdn_u 0x10421681 ntp01.ad.sistemkusu.com: type:(1) ID(147) count(1) generation(59) data_len:13 flag: 1
ip list: (1 ip in total)
ip: 192.168.1.15

Teşhis sırası şöyle:

  1. diagnose firewall fqdn list-all çıktısında iç bir adın altında internet adresi görülürse önce FortiGate’in ikincil DNS’ine bakılır.
  2. İç DNS’in ayakta olduğu doğrulanır; sunucu yanıt veriyor ama FortiGate’e ulaşmıyorsa yol kontrol edilir.
  3. Yanlış adresler diagnose test application dnsproxy 99 ile temizlenir; komut DNS işçisini yeniden başlatır.

Bu ölçümden sonra lab’da f-ntp01’i sildim. NTP sunucusunun adresini kurum veriyor; ona bir kural gerektiğinde tek adres nesnesi açılır. FQDN nesnesi, adresi başkasının elinde olan dış hizmetlere kalır.

Adres Grubu ve Referans: Kullanılan Nesne Silinmez, Adı Değişir

Grup, birden çok nesneyi tek adla toplar; kurala grup yazılır, gruba yeni üye eklendiğinde kural değişmez. Bu adımdan önce hazır olması gerekenler:

  1. Üye nesneler: h-muhasebe-yazici (10.34.70.50), h-muhasebe-yazici2 (10.34.70.51) ve yukarıda açılan h-depo-etiket-yazici.
  2. Grubu kullanan kural: lab’da kural 8, iç bölümlerdeki yazıcıların internete çıkışını kapatan kural. Kural setini 14. adımda kuruyoruz.

Menü yolu: Policy & Objects → Addresses → grubun satırına çift tıklanır; yeni grup için Create New → Address Group. Formun alanları:

  1. Group name: g- önekiyle. Lab’da g-yazicilar.
  2. Type: Group. Folder nesneleri düzenlemek için bir klasördür, kurala girmez.
  3. Members: + ile açılan Select Entries panelinden seçilir. Depo yazıcısını buradan ekledim.
  4. Comments: Ic bolumlerdeki ag yazicilari; yazici kurallari icin toplu ad.
FortiGate Edit Address Group formu: g-yazicilar grubunun Members kutusunda h-depo-etiket-yazici, h-muhasebe-yazici ve h-muhasebe-yazici2 kırmızı çerçeveyle işaretli; altta açıklama alanı
Üçüncü yazıcı gruba eklendi; onu kullanan kurala dokunulmadı.

Aynı kaydın komut satırındaki karşılığı:

FortiGate CLI
config firewall addrgrp
    edit "g-yazicilar"
        set member "h-muhasebe-yazici" "h-muhasebe-yazici2" "h-depo-etiket-yazici"
        set comment "Ic bolumlerdeki ag yazicilari; yazici kurallari icin toplu ad"
    next
end

Grup kurala tek bir ad olarak girer. Kural 8’in formunda (Policy & Objects → Firewall Policy, kurala çift tıklanır) Source alanının + düğmesi aynı Select Entries panelini açar; grup orada tek adres nesnelerinin altında, kendi bölümünde ve ayrı bir simgeyle durur:

FortiGate Edit Policy formu, Yazicilar internete cikmasin: Source alanında g-yazicilar grubu kırmızı çerçeveyle işaretli
Kural üç yazıcının adresini değil grubun adını taşıyor; gruba eklenen yazıcı kurala kendiliğinden girer.
FortiGate CLI
config firewall policy
    edit 8
        set name "Yazicilar internete cikmasin"
        set srcaddr "g-yazicilar"
    next
end

Gruptaki bir nesneyi ve grubun kendisini silmeyi denedim:

FortiGate CLI Çıktısı
gmfw01 (address) # delete h-muhasebe-yazici
The entry is used by other 1 entries
Command fail. Return code -23
...
gmfw01 (addrgrp) # delete g-yazicilar
The entry is used by other 1 entries
Command fail. Return code -23

FortiGate kullanılan nesneyi silmiyor. Neyin kullandığını diagnose sys cmdb refcnt show gösteriyor:

FortiGate CLI Çıktısı
gmfw01 # diagnose sys cmdb refcnt show firewall.address.name h-muhasebe-yazici
entry used by child table member:name 'h-muhasebe-yazici' of table firewall.addrgrp:name 'g-yazicilar'
gmfw01 # diagnose sys cmdb refcnt show firewall.addrgrp.name g-yazicilar
entry used by child table srcaddr:name 'g-yazicilar' of table firewall.policy:policyid '8'

Satırlar zinciri sırayla veriyor:

  1. Nesneyi g-yazicilar grubu üye olarak kullanıyor.
  2. Grubu kural 8 kaynak adresi olarak kullanıyor.

Silmek için zincir sondan çözülür: grup kuraldan, nesne gruptan çıkarılır.

Ad Değiştirmek: rename Kuralı Bozmaz

Silmenin tersine, ad değiştirmek serbest. Önceki adımlarda açılan nesnelerin bir kısmı şemadan önce adlandırılmıştı: personel ağındaki eski bilgisayarın nesnesi eski-pc, WAN yazısında açılan özel adres grubu ozel-adresler idi. Değişiklikten önce iki kural bu adları kullanıyordu:

FortiGate CLI Çıktısı
    edit 2
        set srcaddr "eski-pc"
    edit 9
        set srcaddr "ozel-adresler"

Adları rename ile değiştirdim:

FortiGate CLI
config firewall address
    rename eski-pc to h-personel-eski-pc
    rename ozel-10 to n-ozel-10
    rename ozel-172 to n-ozel-172
    rename ozel-192 to n-ozel-192
end
config firewall addrgrp
    rename ozel-adresler to g-ozel-adresler
    rename g-muhasebe-yazicilar to g-yazicilar
end

Kurallara dokunmadan aynı satırlara baktım:

FortiGate CLI Çıktısı
    edit 2
        set srcaddr "h-personel-eski-pc"
    edit 9
        set srcaddr "g-ozel-adresler"
    edit 8
        set srcaddr "g-yazicilar"
    edit "g-ozel-adresler"
        set member "n-ozel-10" "n-ozel-172" "n-ozel-192"

Yeni adlar kurallara ve gruba kendiliğinden yazıldı. Devralınan bir firewall’ı şemaya çekmek bu yüzden kuralları yeniden yazmayı gerektirmez; nesneler tek tek yeniden adlandırılır.

FortiGate Servis Nesneleri

Kural, adresin yanında servis de ister: hangi protokol, hangi port. FortiGate’te HTTP, HTTPS ve her şeyi kapsayan ALL gibi hazır servisler var; listede olmayan bir port için özel servis açılır. NSA’nın 2.4 bölümü kuralların yalnız gereken servislere açılmasını istiyor; lab’da ALL şu an beş kuralda duruyor ve kuralların servisini daraltmak 14. adımın işi.

Menü yolu: Policy & Objects → Services → Create New → Service. Ağ yazıcılarının doğrudan yazdırma portu için formun alanları:

  1. Name: s- önekiyle, protokol ve portla. Lab’da s-tcp-9100-yazdirma.
  2. Comments: Ag yazicisina dogrudan (RAW) yazdirma.
  3. Protocol Type: TCP/UDP/SCTP, fabrika ayarı.
  4. Destination Port: TCP, Low alanına 9100. Tek port için High boş kalır.
FortiGate New Service formu: Name alanında s-tcp-9100-yazdirma ve Destination Port satırında TCP 9100 kırmızı çerçeveyle işaretli; açıklama alanı dolu
Servisin adı protokolü ve portu söylüyor; kural listesinde portu görmek için nesneyi açmak gerekmiyor.

Aynı kaydın komut satırındaki karşılığı:

FortiGate CLI
config firewall service custom
    edit "s-tcp-9100-yazdirma"
        set comment "Ag yazicisina dogrudan (RAW) yazdirma"
        set tcp-portrange 9100
    next
end

Portların ne olduğunu ve TCP ile UDP farkını port nedir yazımızda anlattık. Servisler de adresler gibi gruplanır ve aynı referans kuralına uyar.

Listeyi Toparlamak: Önek, Tek Nesne, Ref. Sütunu

Ölçümlerden sonra listeyi yazının kendi kurallarına göre toparladım:

  1. Aynı ağın ikinci nesnesi silindi: elle açılan n-muhasebe gitti, VLAN’ın kendi nesnesi muhasebe address onun adını aldı. Personelin personel address nesnesi n-personel oldu.
  2. Deneme nesneleri silindi: cihaz bitleri sınamasındaki ağ nesnesi, bağlama denemelerindeki geçici nesneler ve gruplar.
  3. İç sunucu için FQDN nesnesi kalmadı: f-ntp01 silindi.
  4. Açıklamalar düzeltildi: muhasebe yazıcılarının açıklaması, artık var olmayan bir DHCP rezervasyonunu anıyordu; adresin yazıcının kendi ayarında sabit olduğu yazıldı.
FortiGate Addresses listesi: kurumun açtığı h- ve n- önekli nesnelerin adları ile Interface Subnet grubundaki n-muhasebe ve n-personel satırlarının Ref değeri 0 kırmızı çerçeveyle işaretli; altta g-ozel-adresler ve g-yazicilar grupları üyeleriyle
Önek türü söylüyor, Ref. sütunu kullanımı. İki VLAN nesnesi 0'da ve açıklamaları kuralını beklediklerini söylüyor.

Kuralını bekleyen üç kurum nesnesi kaldı ve üçünün de Ref. değeri 0:

  1. n-muhasebe: muhasebe VLAN’ının ağı.
  2. n-personel: personel VLAN’ının ağı.
  3. s-tcp-9100-yazdirma: yazdırma servisi; Services listesinde duruyor.

Üçü de kural setinde kaynak ya da servis olarak girecek. Kimsenin kullanmadığı eski kayıtlardan farkları açıklamalarında yazıyor.

Nesnelerin kurala nasıl girdiğini bir örnek gösteriyor: muhasebe, depodaki etiket yazıcısına yalnız yazdıracak. Formda (Policy & Objects → Firewall Policy → Create New) üç alan nesne adı alıyor:

  1. Source: n-muhasebe, muhasebe VLAN’ının ağı.
  2. Destination: h-depo-etiket-yazici, tek cihazlık nesne.
  3. Service: s-tcp-9100-yazdirma. Servis nesnesi Service alanının + panelinde hazır servislerle aynı listede durur.
FortiGate New Policy formu, Muhasebeden depo yazicisina: Source n-muhasebe, Destination h-depo-etiket-yazici ve Service s-tcp-9100-yazdirma kırmızı çerçeveyle işaretli
Kuralın üç alanı da nesne adı: listeyi okuyan kişi adresi ve portu değil, kimin neye ne için gittiğini görür.

Formu kaydetmeden doldurdum: lab cihazının değerlendirme lisansı en fazla 10 kurala izin veriyor ve liste dolu. Gelen ve giden arayüzün ikisi de ic-bolumler, çünkü muhasebe ile depo aynı zone’da; zone içi geçişin neden ayrı bir kuralla açıldığını zone yazımızda anlattık. Komut satırındaki karşılığı:

FortiGate CLI
config firewall policy
    edit 0
        set name "Muhasebeden depo yazicisina"
        set srcintf "ic-bolumler"
        set dstintf "ic-bolumler"
        set action accept
        set srcaddr "n-muhasebe"
        set dstaddr "h-depo-etiket-yazici"
        set schedule "always"
        set service "s-tcp-9100-yazdirma"
    next
end

Bir şey dikkat ister: Interface sütununda n-muhasebe için muhasebe görünüyor, ama nesne o arayüze bağlı değil. Bu sütun, arayüz alt ağı nesnesinin adresini hangi arayüzden aldığını gösteriyor. Nesneyi kaynak arayüzü ic-bolumler olan bir kurala da, dmz olan bir kurala da yazabildim.

Doğrulama: FortiGate’in Nesne Düzeni Doğru mu?

  1. show firewall address çıktısında kurumun açtığı her nesnenin adı önekle başlıyor ve set comment satırı var.
  2. Aynı ağı iki nesne tutmuyor: lab’da 10.34.70.0/24 yalnız n-muhasebe’de.
  3. Tek cihazlık nesneler /32: FortiGate yanlış maskeyi uyarmadan ağa çeviriyor.
  4. show firewall addrgrp çıktısında yazdığınız her üye duruyor; farklı arayüze bağlı üye sessizce düşebiliyor.
  5. İç sunucular için FQDN nesnesi yok; varsa diagnose firewall fqdn list-all çıktısında iç adların altında internet adresi yok.
  6. Ref. 0 olan her kurum nesnesinin açıklaması neden beklediğini söylüyor.
  7. Silinecek nesnenin zinciri diagnose sys cmdb refcnt show ile görülüyor.

Sonuç: FortiGate’te Kural Listesini Nesne Adları Okunur Kılar

FortiGate kurala adres yazdırmıyor; kural listesinin okunan yüzü nesne adları. Üç kaynağın kesiştiği düzende her adresin tek, dar ve açıklamalı bir nesnesi vardır ve kullanılmayan nesne gözden geçirilir. Lab’da dört şey beklenenden farklı çıktı:

  1. Zone’a üye bir VLAN’a nesne bağlanamadı; bağlanacaksa zone seçiliyor.
  2. Farklı arayüzlere bağlı iki nesne aynı gruba yazılınca FortiGate grubu ikinci üye olmadan kaydetti ve betikle çalışırken uyarı satırı hiç görünmedi.
  3. İç DNS’e ulaşılamayınca FQDN nesnesi iç ada ait iki internet adresini doğru adresin yanına ekledi; yol açılınca da bu adresleri 27 dakikaya yakın tutacaktı ve önbellek temizliği onları silmedi.
  4. Interface sütununda arayüz adı görünen VLAN nesnesi o arayüze bağlı değil; başka arayüzün kuralına da girdi.

Örnekteki sınır kapısında her jeton kendi şeridinin yuvasına göre kesilir ve üzerindeki yazı görevliye neyi açtığını söyler. FortiGate’te jeton adres nesnesi, şekli bağlı olduğu arayüz, üzerindeki yazı da adıdır; yazısı okunmayan jeton, hangi bariyeri kaldırdığı bilinmeyen jetondur.

Nesneler hazır. Sıradaki adım onları kullanan kural setidir ve FortiGate Firewall policy yapılandırması yazımızda anlattık. Açılış listesinin kalanı 20 adımlık kontrol listesinde duruyor.

FortiGate Firewall Adres Nesneleri Hakkında Sık Sorulan Sorular

Ad nesnenin türünü ve yerini söylemeli. Lab'da tek cihaz için h-, ağ için n-, grup için g-, özel servis için s- önekiyle başlıyor, önce yeri sonra ne olduğunu yazıyoruz: h-depo-etiket-yazici. Ad ASCII küçük harf ve tireyle yazılır ve en çok 79 karakterdir. Nesnenin neden açıldığı Comments alanına yazılır; NIST SP 800-41 her kurala açıklama yazılmasını istiyor ve FortiGate'te kuralın adresi nesnedir.
Bir grup ya da kural onu kullandığı için. Lab'da g-yazicilar grubundaki h-muhasebe-yazici nesnesini silmeyi denedim, FortiGate The entry is used by other 1 entries diyerek reddetti. diagnose sys cmdb refcnt show komutu zinciri gösterdi: nesneyi grup, grubu kural 8 kullanıyordu. Silmek için zincir sondan çözülür. Adı değiştirmek ise serbest; rename komutu yeni adı kurallara ve gruplara kendiliğinden yazdı.
Nesne başka bir arayüze bağlı olabilir. Lab'da ic-bolumler zone'una bağlı n-muhasebe nesnesini, kaynak arayüzü dmz olan bir kurala yazmayı denedim; FortiGate value parse error verdi ve kuralı kaydetmedi. Interface alanı any olan nesne her kuralda kullanılabilir. Zone'a üye bir arayüze nesne bağlanamıyor; bağlanacaksa zone seçilir.
Kullanılabilir, ama nesne FortiGate'in DNS'i kadar doğrudur. Lab'da iç DNS'e giden yolu kesince FortiGate ikincil sunucu 8.8.8.8'e sordu ve ntp01.ad.sistemkusu.com nesnesine internetteki iki adresi ekledi. İç DNS geri geldikten sonra bu adresler 27 dakika daha nesnede kalacaktı. Adresini kurumun verdiği iç sunucuya tek adres nesnesi yazıyoruz; FQDN nesnesini adresi başkasının elinde olan dış hizmetlere bırakıyoruz.
Hemen silinmez, önce açıklamasına bakılır. Ref. 0 nesneyi hiçbir kuralın ve grubun kullanmadığını söyler: ya kuralı henüz yazılmamış yeni bir nesnedir ya da kimsenin kullanmadığı eski bir kayıt. NSA kullanılmayan erişim listelerinin silinmesini istiyor, çünkü yöneticiye uygulanıyormuş izlenimi veriyorlar. Lab'da kuralını bekleyen iki VLAN nesnesi ve bir servis kaldı, deneme nesneleri silindi.
İlker Pehlivan
Yazan

BT Danışmanı | Ağ, Sistem ve Güvenlik Yönetimi

İlker Pehlivan, karmaşık BT altyapılarını ölçeklenebilir ve güvenli sistemlere dönüştürür. Buradaki rehberleri kendi laboratuvarında kurup ölçerek yazar.

LinkedIn

Benzer Makaleler

Kurumsal Network Kurulumu altındaki diğer 114 makale