Kurumsal Network Kurulumu

FortiGate Firewall Zone ve DMZ Yapılandırması

FortiGate Firewall zone ve DMZ yapılandırması: zone'a yalnız aynı güven düzeyindeki arayüzler, zone içi trafiğin gizli kuralı, misafir ağının ayrı kuralı ve DMZ'den içeri kapalı yön.

İlker Pehlivan

FortiGate Firewall zone yapılandırması, aynı güven düzeyindeki arayüzleri tek bir ad altında toplamaktır ve Network → Interfaces → Create New → Zone ile yapılır; kural her arayüz için ayrı ayrı değil, zone için bir kez yazılır. DMZ de dışarıya açık sunucuların durduğu, iç ağdan kurallarla ayrılmış bir arayüzdür ve arayüzün Role satırında seçilir.

NSA’nın ve NIST’in tarif ettiği düzende aynı türden sistemler bir arada tutulur, farklı güven düzeyleri arasında yalnız gereken servisler açılır ve DMZ’den iç ağa başlatılan bağlantı kapalı kalır. Bu yazı FortiGate Firewall yapılandırma rehberimizin 11. adımıdır. Lab’daki en öğretici bulgu, misafir ağının yanlış zone’a eklenmesinden çıktı: misafir ağı iç bölümlerin zone’undayken, iç bölümler için yazılmış bir kuraldan geçip DMZ’deki web sunucusuna ulaştı.

Örnekteki sınır kapısında birkaç şerit tek bir alçak taş duvarla çevrilidir ve duvarın tek çıkışı vardır. Görevli o çıkışta tek bir talimatla bütün şeritleri yönetir; duvarın içine sonradan eklenen şerit de aynı talimata uyar. FortiGate’te şeritler arayüzler, duvar zone, çıkıştaki talimat da zone’a yazılan kuraldır.

Bu yazı, Kurumsal Network Kurulumu hizmetimizde iç ağ bölümlerini ve dışarıya açık sunucuları firewall’da ayırırken kurduğumuz düzeni anlatır.

FortiGate Firewall zone yapılandırması benzetmesi: sınır kapısında üç şerit tek bir alçak taş duvarla çevrilmiş, tek çıkışta duran görevli tek bir talimat kâğıdıyla üç şeridi birden yönetiyor
Aynı duvarın içindeki şeritler tek çıkışı ve tek talimatı paylaşır. FortiGate'te de zone'a yazılan kural, zone'daki her arayüze ve sonradan eklenene de uygulanır.

FortiGate Zone Nedir? Zone’a Eklenen Arayüz Neyi Devralır?

Zone’un kavram olarak ne olduğunu ve kurumda hangi bölgelerin ayrıldığını firewall nedir yazımızın zone bölümünde anlattık. FortiGate’te zone, bir kuralın kaynak ya da hedef arayüzü olarak seçilebilen bir gruptur. Gruba alınan arayüzler zone formundaki Interface members listesinde durur. Kuralı gruba yazmanın kazancı, listeye eklenen arayüzün kurala dokunmadan o kuralın altına girmesidir. Aynı cümle bedeli de söylüyor: zone’a eklenen arayüz, zone’a yazılmış bütün kuralları devralır.

Yazıda lab cihazındaki kurallara numaralarıyla değiniyorum. Hepsi bu tabloda, metinde bir kural numarasına tıkladığınızda buraya dönersiniz:

NoKuralın adıNereden nereyeNe açıyor?
5Ic bolumler dis agaic-bolumler zone’u → dış ağ (port3)Bütün servisler, NAT ile
6Ic bolumlerden DMZ webic-bolumler zone’u → DMZ’deki web sunucusuYalnız HTTP
11Misafir internet cikisimisafir → dış ağ (port3)DNS, HTTP ve HTTPS, NAT ile
policy 0Listede görünmezHiçbir kuralın eşleşmediği bağlantıHiçbir şey: bağlantı reddedilir, logda policy 0 yazar
4294967295Listede görünmezZone içindeki arayüzler arası, Block intra-zone traffic kapalıykenHer şey, logsuz

Lab cihazımda ic-bolumler zone’unda muhasebe ve depo’nun yanında misafir de vardı. Zone’dan DMZ’ye yazılmış tek kural, adıyla iç bölümler içindi: “Ic bolumlerden DMZ web”, yani kural 6. Misafir ağındaki bir cihazdan DMZ’deki web sunucusuna istek attım:

FortiGate CLI Çıktısı
... func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=6, 10.34.60.10:48206->10.34.80.10:80) tun_id=0.0.0.0 from misafir. flag [S], seq 3241048444, ack 0, win 64240"
...
... func=fw_forward_handler line=881 msg="Allowed by Policy-6:"

İstek 200 aldı. Kimse misafire DMZ’yi açan bir kural yazmamıştı. Misafir, iç bölümler için yazılmış kuraldan, zone’a eklenmiş olduğu için geçti. Satır başlarındaki tarih ve iz numarası kısaltıldı.

Aynı istek iki durumda. Solda misafir, muhasebe ve depo ile birlikte ic-bolumler zone'una eklenmiş. Zone'dan DMZ'deki web sunucusuna yazılmış kural 6 iç bölümler için yazılmıştı, ama zone'daki her arayüze uygulandığı için misafirin isteği de geçti ve sunucu 200 döndü. Sağda misafir zone'dan çıkarılmış. Kural 6 yalnız muhasebe ve depoyu kapsıyor, misafirden DMZ'ye giden aynı istek hiçbir kurala uymadığı için policy 0 ile reddedildi. Önce: misafir zone'un içinde ic-bolumler muhasebe depo misafir dmz web sunucusu kural 6 Misafirin isteği kural 6 ile geçti. Sunucu 200 döndü. Sonra: misafir zone'un dışında ic-bolumler muhasebe depo misafir dmz web sunucusu kural 6 policy 0 Kural 6 misafiri artık kapsamıyor. Aynı istek reddedildi. Aynı istek iki durumda. Üstte misafir, muhasebe ve depo ile birlikte ic-bolumler zone'una eklenmiş. Zone'dan DMZ'deki web sunucusuna yazılmış kural 6 iç bölümler için yazılmıştı, ama zone'daki her arayüze uygulandığı için misafirin isteği de geçti ve sunucu 200 döndü. Altta misafir zone'dan çıkarılmış. Kural 6 yalnız muhasebe ve depoyu kapsıyor, misafirden DMZ'ye giden aynı istek hiçbir kurala uymadığı için policy 0 ile reddedildi. Önce: misafir zone'un içinde ic-bolumler muhasebe depo misafir dmz web sunucusu kural 6 Misafirin isteği kural 6 ile geçti. Sunucu 200 döndü. Sonra: misafir zone'un dışında ic-bolumler muhasebe depo misafir dmz web sunucusu kural 6 policy 0 Kural 6 misafiri artık kapsamıyor. Aynı istek reddedildi.
Duvarın içine alınan şerit, çıkıştaki her talimata uyar. İç bölümler için yazılmış talimat, duvarın içindeki misafire de açıldı. Misafir duvarın dışına alınınca aynı talimat onu kapsamadı ve istek reddedildi.

FortiGate’te Zone ve DMZ Düzeni Nasıl Olmalı?

Zone’a yalnız aynı güven düzeyindeki ve aynı kurallara tabi arayüzler girer. Zone içi trafik fabrika ayarındaki gibi kapalı kalır; zone içindeki iki bölüm arasında geçiş gerekiyorsa o geçiş için ayrı bir kural yazılır.

Bölgeler arasında yalnız gereken servisler açılır ve geri kalan her şey reddedilip loglanır. DMZ’de yalnız dışarıya hizmet veren sunucular durur ve DMZ’den iç ağa başlatılan bağlantıya kural yazılmaz.

Bu düzeni iki kaynak birlikte tarif ediyor:

  1. NSA, Network Infrastructure Security Guidance (Mart 2022 sürümü):
    • Bölüm 2.1: dışarıdan erişilen sistemler bir ya da daha çok DMZ alt ağına konur.
    • Bölüm 2.2: iş istasyonları, sunucular, yazıcılar ve telefonlar ayrı alt ağlarda tutulur. Aralarındaki cihazda yalnız gereken port ve protokollere izin verilir.
    • Bölüm 2.4: kural seti yalnız gerekeni açar, gerisini tek bir retle kapatır ve reddedilen trafik loglanır.
  2. NIST, SP 800-41 Rev. 1 (Eylül 2009), bölüm 3.1 ve 3.4: dışarıya açık web ve e-posta sunucuları DMZ’de durur. DMZ ile korunan ağ arasındaki trafik firewall’dan geçer ve kurallara tabidir; hangi servisin DMZ’de, hangisinin içeride duracağı ayrıca düşünülür.

Lab’ın bölge düzeni, düzeltildikten sonra şöyle. Tablo her bölgenin kendisinin başlatabildiği bağlantıyı gösteriyor:

Bölgeİçindeki arayüzlerİnternete bağlantı başlatabilir mi?Öbür bölgelere bağlantı başlatabilir mi?
ic-bolumler (zone)muhasebe, depoEvet, kural 5 ile, bütün servislerYalnız DMZ’deki web sunucusuna, yalnız HTTP ile (kural 6)
misafirYalnız kendisi, zone’da değilEvet, kural 11 ile, yalnız DNS, HTTP ve HTTPSHayır, kural yok
dmzYalnız kendisiHayır, kural yokHayır, kural yok

Tabloyu okurken iki şeyi bilmek gerekiyor:

  1. “Kural yok”, ret demektir. FortiGate kural listesinde eşleşen bir kural bulamayınca bağlantıyı listenin sonundaki görünmeyen ret kuralıyla düşürür. Logda bu policy 0 olarak görünür.
  2. Bağlantıyı başlatan taraf, ilk paketi gönderen taraftır. Kural bu tarafa yazılır, karşı tarafın cevabı aynı bağlantının parçası olarak kendiliğinden döner. Bu yüzden muhasebe’deki bir bilgisayar DMZ’deki sunucudan sayfa alabilir, ama sunucu muhasebe’deki bilgisayara kendisi bağlantı başlatamaz.

Tablonun ikinci satırı, misafirin neden zone’da olmadığını gösteriyor: dışarıya çıkışı bile iç bölümlerinkinden dar.

Hangi Arayüz Aynı Zone’a Girer?

NSA ve NIST bir sayı vermiyor, ölçüt veriyor: güven düzeyi ve izin verilen trafik aynı olan bölümler. Pratikte bir arayüzü zone’a eklemeden önce üç soru sorulur:

  1. Zone’un çıkış kurallarının hepsi bu bölüme de uygun mu? Misafir için cevap hayırdı: kural 6 iç bölümler içindi.
  2. Zone’a ileride yazılacak kurallar bu bölüme de uygun olacak mı? Zone’a yazılan her yeni kural, zone’daki arayüzlerin hepsine birden açılır.
  3. Bu bölüm zone’daki öbür bölümlerle aynı ağ türünde mi? Kullanıcı ağı, sunucu ağı ve misafir ağı NSA’nın 2.2’deki ayrımına göre farklı türlerdir.

Bölümlerin hangi güven düzeyinde olduğunu ağ segmentasyonu yazımızdaki erişim matrisi belirler; zone o matrisin firewall’daki karşılığıdır.

Zone’a Girmek Kuralları Devralmaktır

Bir oyun düşünün: takımın kurallarını değil, takımın kendisini seçersiniz. Takıma giren her oyuncu, takım için yazılmış bütün kurallara o andan itibaren uyar; yeni oyuncu için kural yeniden yazılmaz.

Bu sahneyi dört parça kuruyor:

  1. Zone, örnekteki duvardır; içine alınan şeritleri tek bir grup yapar.
  2. Zone’a eklenen arayüz duvarın içindeki şerittir.
  3. Zone’a yazılan kural duvarın çıkışındaki talimattır; duvarın içindeki her şeride uygulanır.
  4. Zone içi anahtar (Block intra-zone traffic) duvarın içindeki şeritler arasındaki geçitlerin kapalı tutulmasıdır.

Örnekteki sınır kapısında duvarın içine yeni bir şerit eklendiğinde görevli talimat listesini yeniden yazmaz; şerit çıkıştaki her talimata kendiliğinden uyar. Aynı şey tersinden de geçerlidir: o şeride uymaması gereken bir talimat da artık onun için geçerlidir. Mekanizma şöyle işliyor:

  1. Kural zone’a yazılır: kaynak arayüz ic-bolumler.
  2. Arayüz zone’a eklenir: append interface.
  3. Paket geldiğinde FortiGate arayüzün zone’unu bulur ve kuralları zone üzerinden arar.
  4. Zone’a yazılmış her kural o arayüzün trafiğine de uygulanır; arayüz için ayrıca bir şey yazılmaz.
Lab'daki bölge düzeni. ic-bolumler zone'u iki VLAN'ı topluyor: muhasebe (VLAN 70) ve depo (VLAN 90). Zone içindeki VLAN'lar arasındaki trafik fabrika ayarında reddediliyor. Zone'dan dış ağa kural 5 bütün servisleri, DMZ'deki web sunucusuna kural 6 yalnız HTTP'yi açıyor; ikisini de zone'daki her arayüz devralıyor. Misafir (VLAN 60) zone'un dışında; yalnız kendi kuralıyla, kural 11 ile internete DNS, HTTP ve HTTPS ile çıkıyor, DMZ'ye ulaşamıyor. DMZ'den iç ağa başlatılan bağlantıya kural yok ve policy 0 ile reddediliyor. misafir VLAN 60 · zone dışında ic-bolumler (zone) muhasebe VLAN 70 depo VLAN 90 zone içi: fabrika ayarında ret dis-ag (port3) dış ağ kural 11: DNS, HTTP, HTTPS kural 5: tüm servisler dmz (VLAN 80) web sunucusu 10.34.80.10 kural 6: HTTP DMZ'den başlatılan: policy 0 Misafirden DMZ'ye ve iç bölümlere giden: policy 0 Lab'daki bölge düzeni. ic-bolumler zone'u iki VLAN'ı topluyor: muhasebe (VLAN 70) ve depo (VLAN 90). Zone içindeki VLAN'lar arasındaki trafik fabrika ayarında reddediliyor. Zone'dan dış ağa kural 5 bütün servisleri, DMZ'deki web sunucusuna kural 6 yalnız HTTP'yi açıyor; ikisini de zone'daki her arayüz devralıyor. Misafir (VLAN 60) zone'un dışında; yalnız kendi kuralıyla, kural 11 ile internete DNS, HTTP ve HTTPS ile çıkıyor, DMZ'ye ulaşamıyor. DMZ'den iç ağa başlatılan bağlantıya kural yok ve policy 0 ile reddediliyor. ic-bolumler (zone) muhasebe VLAN 70 depo VLAN 90 zone içi: fabrika ayarında ret dis-ag (port3) dış ağ dmz (VLAN 80) web sunucusu kural 5 tüm servisler kural 6 HTTP misafir VLAN 60, zone dışı kural 11 DNS, HTTP, HTTPS DMZ'den iç ağa başlatılan: policy 0 Misafirden DMZ'ye: policy 0
Duvarın içindeki iki şerit, çıkıştaki iki talimatı birlikte devralıyor. Misafir duvarın dışında ve yalnız kendi talimatıyla çıkıyor.

Kazanç ve bedel aynı mekanizmadan geliyor. Kazanç: yeni bir iç bölüm zone’a eklendiğinde kural setine dokunmadan doğru kuralları alır. Bedel: zone’a yanlış bölüm girerse, kimsenin onun için yazmadığı kuralları da alır. Bu yüzden bir arayüzü zone’a eklemek, kural yazmak kadar dikkat ister.

FortiGate’te Zone Oluşturma ve Düzenleme

Bu adımdan önce iki şey hazır olmalı:

  1. Bölümlerin güven düzeyi kararı. Yukarıdaki üç soru; lab’da muhasebe ve depo aynı zone’a, misafir dışarıya.
  2. Zone’a girecek arayüzlerin kural durumu. Zone’a girecek arayüz başka bir kuralda tek başına kullanılıyorsa önce o kuraldan çıkarılır.

Zone Network → Interfaces → Create New → Zone ile açılır; var olan zone listede çift tıklanarak düzenlenir. Formda dört alan var:

  1. Name: ic-bolumler. Zone’un adı sonradan değiştirilemediği için baştan anlamlı verilir.
  2. Block intra-zone traffic: fabrika ayarında açık. Zone içindeki arayüzler arasındaki trafiği reddeder; açık kalır.
  3. Interface members: zone’a girecek arayüzler; lab’da depo ve muhasebe. misafir’i buradan çıkardım.
  4. Comments: isteğe bağlı açıklama.
FortiGate zone düzenleme formu: Name ic-bolumler, açık Block intra-zone traffic anahtarı ve Interface members listesinde depo ile muhasebe kırmızı çerçeveyle gösterilmiş
Zone formu kısa: ad, zone içi trafik anahtarı ve arayüz listesi. Misafir artık listede yok.

Interface members seçicisinde depo, muhasebe, misafir, yonetim (port1), ic-ag (port2) ve yedek-hat vardı, ama personel, dmz ve dis-ag (port3) yoktu. Bu üçü lab’daki kurallarda tek başına kullanılıyor. ic-ag (port2) ise VLAN yazısında kuralları personel’e taşındığı için listeye girdi. Kaydedince cihaz zone’u şöyle yazdı:

FortiGate CLI Çıktısı
config system zone
    edit "ic-bolumler"
        set description ''
        set intrazone deny
        set interface "depo" "muhasebe"
    next
end

set intrazone deny, formdaki Block intra-zone traffic anahtarının komut satırı karşılığı. Bu satır kısa show çıktısında görünmüyor, çünkü fabrika değeri; yalnız show full-configuration gösteriyor.

CLI’da Zone’a Arayüz Eklemek: set Değil append

Komut satırındaki farkı da ölçtüm. Zone’da depo ve muhasebe varken set interface "muhasebe" yazdım ve baktığımda zone’da yalnız o kalmıştı:

FortiGate CLI Çıktısı
config system zone
    edit "ic-bolumler"
        set interface "muhasebe"
    next
end

set, arayüz listesini baştan yazıyor ve depo zone’dan sessizce düştü. Zone’daki arayüzleri koruyarak eklemek append ile yapılıyor:

FortiGate CLI
config system zone
    edit "ic-bolumler"
        append interface "depo"
    next
end

Bundan sonra zone’da yeniden iki arayüz vardı (set interface "muhasebe" "depo"). Zone’a bağlı kurallar bu listeye göre çalıştığı için yanlış bir set satırı, düşen arayüzün trafiğini o an keser; bir sonraki bölümde bunu ölçtüm.

Zone’a Kural Yazmak: Zone’a Giren Arayüz Kuralı Devralır

Zone’un asıl işi, dışarıya giden kuralı sadeleştirmek. ic-bolumler’den dış ağa tek bir kural var. Arayüzde yol Policy & Objects → Firewall Policy → Create New:

  1. Name: Ic bolumler dis aga.
  2. Incoming Interface: zone’un kendisi, ic-bolumler. Listede zone, arayüzlerle birlikte durur ve ondan önce zone simgesiyle ayrılır. Üye arayüzler (muhasebe, depo) listede tek başına çıkmaz.
  3. Outgoing Interface: dış ağ.
  4. Source, Destination ve Service: iç bölümlerin internete ne için çıkacağı.
  5. NAT: açık, internete özel adresle çıkılmaz.
FortiGate Edit Policy formu, Ic bolumler dis aga: Incoming Interface alanında ic-bolumler zone'u kırmızı çerçeveyle işaretli
Kural tek bir zone'a yazılıyor; muhasebe ve depo bu satırı üyelikleriyle devralıyor.

Ekran kuralın bugünkü hâli: rehberin sonraki adımlarında dış ağ port3’ten dis-hatlar zone’una taşındı ve servisler HTTP, HTTPS ve PING ile daraltıldı (statik rota ve policy yazıları). Bu adımdaki ölçüm aşağıdaki hâliyle yapıldı:

FortiGate CLI
config firewall policy
    edit 5
        set name "Ic bolumler dis aga"
        set srcintf "ic-bolumler"
        set dstintf "port3"
        set action accept
        set srcaddr "all"
        set dstaddr "all"
        set schedule "always"
        set service "ALL"
        set nat enable
    next
end

depo yanlış set satırıyla zone’dan düşmüşken iki VLAN’dan dış ağdaki aynı adrese ping attım:

FortiGate CLI Çıktısı
... trace_id=65 func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=1, 10.34.70.10:1978->203.0.113.80:2048) tun_id=0.0.0.0 from muhasebe. type=8, code=0, id=1978, seq=1."
... trace_id=65 func=fw_forward_handler line=881 msg="Allowed by Policy-5: SNAT"
... trace_id=66 func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=1, 10.34.90.10:1981->203.0.113.80:2048) tun_id=0.0.0.0 from depo. type=8, code=0, id=1981, seq=1."
... trace_id=66 func=fw_forward_handler line=719 msg="Denied by forward policy check (policy 0)"

muhasebe kural 5’le geçti, zone dışındaki depo policy 0’a takıldı. depo’yu append ile geri ekledim ve kurala hiç dokunmadan aynı pingi tekrarladım:

FortiGate CLI Çıktısı
... trace_id=86 func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=1, 10.34.90.10:2048->203.0.113.80:2048) tun_id=0.0.0.0 from depo. type=8, code=0, id=2048, seq=1."
... trace_id=86 func=fw_forward_handler line=881 msg="Allowed by Policy-5: SNAT"

Zone’a giren arayüz, zone’a yazılmış kuralı kendiliğinden devraldı. İzlerin arasında FortiGate’in kendi adresinden (203.0.113.1) her saniye aynı hedefe giden ping’ler de vardı: statik rota yazısındaki hat izleme; onları çıkardım.

Misafiri Zone’dan Çıkarmak: Kendi Kuralı, Kendi Sınırı

Misafir zone’dan çıkınca kural 5’i de kaybetti, yani internete çıkışını da. Ona yalnız gereken servisleri açan ayrı bir kural yazdım. Formda (Policy & Objects → Firewall Policy → Create New) üç alan bu kuralın sınırını çiziyor:

  1. Incoming Interface: misafir. Zone’da olmadığı için arayüzün kendisi seçiliyor.
  2. Outgoing Interface: yalnız dış ağ. Hedef arayüz listesinde ic-bolumler ve dmz yok, misafirin iç bölümlere giden kuralı hiç yazılmıyor.
  3. Service: DNS, HTTP ve HTTPS. Misafir cihazının internette ad çözmesi ve web’e çıkması için yeterli, geri kalan her servis kapalı.
FortiGate Edit Policy formu, Misafir internet cikisi: Incoming Interface misafir ve Service alanında DNS, HTTP, HTTPS kırmızı çerçeveyle işaretli
Misafirin kuralı kendi arayüzünden yalnız dışarıya ve yalnız üç servise açılıyor.

Ekranda dış ağ bugünkü adıyla (dis-hatlar) görünüyor. Kuralın bu adımdaki hâli:

FortiGate CLI
config firewall policy
    edit 11
        set name "Misafir internet cikisi"
        set srcintf "misafir"
        set dstintf "port3"
        set action accept
        set srcaddr "all"
        set dstaddr "all"
        set schedule "always"
        set service "DNS" "HTTP" "HTTPS"
        set nat enable
        set comments "Misafir yalniz internete; ic bolumler ve DMZ kapali"
    next
end

Aynı misafir cihazından iki istek attım. İnternetteki web sunucusu 200 döndü, DMZ’deki sunucuya giden istek ise artık düştü:

FortiGate CLI Çıktısı
... func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=6, 10.34.60.10:42062->10.34.80.10:80) tun_id=0.0.0.0 from misafir. flag [S], seq 2359346692, ack 0, win 64240"
... func=fw_forward_handler line=719 msg="Denied by forward policy check (policy 0)"
...
... func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=6, 10.34.60.10:46586->203.0.113.66:80) tun_id=0.0.0.0 from misafir. flag [S], seq 1911239967, ack 0, win 64240"
... func=fw_forward_handler line=881 msg="Allowed by Policy-11: SNAT"

Kural 11 misafire iç bölümlerin kural 5’inden de dar bir çıkış veriyor. NSA’nın 2.4’teki “yalnız gereken” ilkesi misafir için daha da sıkıdır. Misafir ağının DHCP ve DNS düzenini DHCP sunucusu yazımızda anlattık.

FortiGate Zone İçi Trafik: Block Intra-zone Traffic

Aynı zone’daki iki VLAN birbirine ulaşıyor mu? Fabrika ayarında (intrazone deny) muhasebe’den depo’ya ping attım ve paketin yolunu debug flow ile izledim:

FortiGate CLI Çıktısı
... trace_id=45 func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=1, 10.34.70.10:64516->10.34.90.10:2048) tun_id=0.0.0.0 from muhasebe. type=8, code=0, id=64516, seq=1."
... trace_id=45 func=vf_ip_route_input_common line=2605 msg="find a route: flag=04000000 gw-10.34.90.10 via depo"
... trace_id=45 func=fw_forward_handler line=719 msg="Denied by forward policy check (policy 0)"

Sonuç VLAN yazısındakiyle aynı: aynı zone’da olmak iki VLAN’ı birbirine açmıyor. Sonra anahtarı kapattım (set intrazone allow) ve aynı pingi attım:

FortiGate CLI Çıktısı
... trace_id=49 func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=1, 10.34.70.10:1926->10.34.90.10:2048) tun_id=0.0.0.0 from muhasebe. type=8, code=0, id=1926, seq=1."
... trace_id=49 func=init_ip_session_common line=6024 msg="allocate a new session-0004130e, tun_id=0.0.0.0"
... trace_id=49 func=vf_ip_route_input_common line=2605 msg="find a route: flag=04000000 gw-10.34.90.10 via depo"
... trace_id=49 func=fw_forward_handler line=881 msg="Allowed by Policy-4294967295:"

Ping geçti. Onu geçiren kuralın numarası 4294967295, yani 32 bitlik bir sayının alabileceği en büyük değer. Bu numaralı bir kural listede yok; FortiGate zone içi serbest trafik için kendi içinde tuttuğu, görünmeyen bir kuralı kullanıyor. Anahtarın bir servis seçimi de yok: formda yalnız aç ve kapa var, açılan geçiş zone içindeki bütün trafiği kapsıyor.

Trafik logunda bu hedefe giden kayıtlara baktım. Anahtar açıkken reddedilen iki deneme oradaydı, anahtar kapatıldıktan sonra geçen ping’ler ise hiç yoktu:

FortiGate CLI Çıktısı
1: date=2026-10-01 time=13:36:35 ... srcip=10.34.70.10 ... srcintf="muhasebe" ... dstip=10.34.90.10 ... dstintf="depo" ... action="deny" policyid=0 ...
2: date=2026-10-01 time=13:36:34 ... srcip=10.34.70.10 ... srcintf="muhasebe" ... dstip=10.34.90.10 ... dstintf="depo" ... action="deny" policyid=0 ...

Yani Block intra-zone traffic kapatıldığında zone içindeki arayüzler birbirine servis seçilmeden açılıyor, bunu gösteren bir kural satırı olmuyor ve trafik loga düşmüyor. NSA’nın 2.4’teki iki şartı da (yalnız gerekeni açmak, reddedileni loglamak) böylece kaybolur.

Zone içindeki iki bölüm arasında geçiş gerekiyorsa anahtarı kapatmak yerine o geçiş için ayrı bir kural yazılır; hem neyin açıldığı hem de log görünür kalır. Ölçümden sonra anahtarı fabrika ayarına geri aldım.

Örnek: muhasebe depodaki etiket yazıcısına yazdıracak, başka hiçbir şeye ihtiyacı yok. Kuralın iki arayüzü de zone’un kendisi, geçişi adres ve servis daraltır (Policy & Objects → Firewall Policy → Create New):

  1. Name: Muhasebeden depo yazicisina.
  2. Incoming Interface ve Outgoing Interface: ikisi de ic-bolumler.
  3. Source: muhasebenin ağı, n-muhasebe.
  4. Destination: yalnız yazıcı, h-depo-etiket-yazici.
  5. Service: yalnız yazdırma portu, s-tcp-9100-yazdirma (TCP 9100).
  6. NAT: kapalı.
  7. Log Allowed Traffic: All Sessions, her yazdırma oturumu loga düşsün.
FortiGate New Policy formu, Muhasebeden depo yazicisina: Incoming Interface ve Outgoing Interface alanlarında ic-bolumler kırmızı çerçeveyle işaretli
Zone içi geçişte gelen ve giden arayüz aynı zone; neyin açıldığını adres ve servis söylüyor.

Formu bu yazı için kaydetmeden doldurdum: lab cihazının değerlendirme lisansı en fazla 10 kurala izin veriyor ve liste dolu. Adres ve servis nesneleri adres nesneleri yazımızda açıldı. 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"
        set logtraffic all
    next
end

Anahtar kapalıyken görünmeyen geçiş, bu kuralla listede adı olan ve loga düşen bir satır olur.

Örnekteki sınır kapısında anahtarı kapatmak, duvarın içindeki şeritler arasına kayıtsız bir geçit açmaktır: geçen araçlar ne talimat listesinde görünür ne de tutanağa yazılır.

FortiGate’te DMZ: Rol ve Yön

DMZ’nin neden ayrı bir bölge olduğunu firewall nedir yazımızın DMZ bölümünde anlattık. Lab’da DMZ, dmz adlı VLAN 80 arayüzü; Role satırında DMZ seçili:

FortiGate dmz arayüzünün düzenleme formu: Role DMZ ve yalnız Device detection içeren Network bölümü kırmızı çerçeveyle gösterilmiş; formda DHCP Server, Security mode ve Auto-managed by IPAM yok
DMZ rolünde form kısalıyor: DHCP sunucusu, Security mode ve IPAM seçeneği çıkmıyor. Güvenlik ayrımını rol değil, kurallar yapıyor.

Rolün değiştirdiği şey arayüz formu oldu. LAN rolündeki depo’nun formunda DHCP Server, Security mode ve Auto-managed by IPAM vardı; DMZ rolündeki dmz’nin formunda üçü de yoktu. Güvenlik ayrımını rol yapmıyor; onu, bölgeler arasında hangi yöne kural yazıldığı yapıyor.

DMZ’de bir web sunucusu (10.34.80.10) duruyor. İç bölümlerden ona yalnız HTTP açık ve kuralın hedefi DMZ’nin tamamı değil, sunucunun kendisi. Önce sunucu için bir adres nesnesi açılır (Policy & Objects → Addresses → Create New → Address, h-dmz-web, 10.34.80.10/32), sonra kural (Firewall Policy → Create New):

  1. Incoming Interface: ic-bolumler, Outgoing Interface: dmz.
  2. Destination: h-dmz-web. DMZ’nin bütün ağı değil, yalnız bu sunucu.
  3. Service: yalnız HTTP.
  4. NAT: kapalı. İç bölümler DMZ’ye kendi adresleriyle gider, sunucunun logu isteği yapan makineyi gösterir.
FortiGate Edit Policy formu, Ic bolumlerden DMZ web: Destination h-dmz-web ve Service HTTP kırmızı çerçeveyle işaretli
İç bölümlerden DMZ'ye giden kural tek sunucuya ve tek servise açılıyor.

Nesnenin ve kuralın komut satırındaki karşılığı:

FortiGate CLI
config firewall address
    edit "h-dmz-web"
        set comment "DMZ web sunucusu"
        set subnet 10.34.80.10 255.255.255.255
    next
end
config firewall policy
    edit 6
        set name "Ic bolumlerden DMZ web"
        set srcintf "ic-bolumler"
        set dstintf "dmz"
        set action accept
        set srcaddr "all"
        set dstaddr "h-dmz-web"
        set schedule "always"
        set service "HTTP"
    next
end

Hedef önceden all idi; DMZ’ye ileride konacak her sunucuya HTTP’yi açık bırakıyordu. Adres nesnelerinin adlandırılmasını adres nesneleri yazımızda anlattık. İki yönü denedim:

FortiGate CLI Çıktısı
... func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=6, 10.34.70.10:38152->10.34.80.10:80) tun_id=0.0.0.0 from muhasebe. flag [S], seq 1905055268, ack 0, win 64240"
... func=fw_forward_handler line=881 msg="Allowed by Policy-6:"
...
... func=print_pkt_detail line=5845 msg="vd-root:0 received a packet(proto=6, 10.34.80.10:44520->10.34.70.10:80) tun_id=0.0.0.0 from dmz. flag [S], seq 1518329069, ack 0, win 64240"
... func=fw_forward_handler line=719 msg="Denied by forward policy check (policy 0)"

muhasebe’den DMZ’deki sunucuya istek kural 6’yla geçti ve sunucu 200 döndü. DMZ’deki sunucudan muhasebe’deki bir bilgisayara başlatılan bağlantı ise zaman aşımına düştü; trafik logunda aynı bağlantının dört denemesi de reddedilmiş olarak duruyor. İlki:

FortiGate CLI Çıktısı
1: date=2026-10-01 time=14:24:08 ... srcip=10.34.80.10 srcport=44520 srcintf="dmz" srcintfrole="dmz" dstip=10.34.70.10 dstport=80 dstintf="muhasebe" dstintfrole="lan" ... action="deny" policyid=0 policytype="policy" ...

DMZ’nin koruması budur: sunucu ele geçirilse bile iç ağa başlatacağı bağlantı için bir kural yoktur ve her deneme logda iz bırakır. Bu yön için kural yazılmaz. DMZ’deki sunucuyu internete açmak ise ayrı bir iştir; dışarıdan gelen isteği sunucuya ulaştıran Virtual IP’yi FortiGate kullanım rehberimizde anlattık.

Örnekteki sınır kapısında DMZ, kapının dışındaki gümrük antreposudur: içeriden antrepoya gidilebilir, antrepodan içeriye talimatsız kimse giremez.

Doğrulama: FortiGate’in Bölge Düzeni Doğru mu?

Ayar bittiğinde beş şey kontrol edilir; her biri yukarıda lab’da ölçüldü:

  1. Zone’daki arayüzler aynı güven düzeyinde. show full-configuration system zone çıktısında misafir gibi farklı bir bölüm yoktur.
  2. Zone içi kapalı. Aynı çıktıda set intrazone deny görünür. Zone’daki iki arayüz arasındaki ping policy 0 ile düşer.
  3. Zone’a giren arayüz kuralı devralıyor. Zone’a yeni eklenen arayüzün trafiği debug flow çıktısında zone’un kural numarasıyla geçer.
  4. Misafirin kendi kuralı var. Misafirden DMZ’ye ve iç bölümlere giden istek policy 0 ile düşer, internete giden istek kendi kuralıyla geçer.
  5. DMZ’den içeri kapalı. DMZ’deki sunucudan iç ağa başlatılan bağlantı policy 0 ile düşer ve logda ret olarak görünür.

Sonuç: FortiGate’te Zone Kuralı Sadeleştirir, Arayüz Seçimi Dikkat İster

Zone, arayüzleri tek bir ad altında toplar ve kuralı gruba yazdırır: zone’a giren VLAN, kurala dokunmadan zone’un kurallarını devralır. Doğru düzende zone’a yalnız aynı güven düzeyindeki bölümler girer, zone içi kapalı kalır, bölgeler arasında yalnız gereken servisler açılır ve DMZ’den içeri kural yazılmaz. Lab’da dört şey beklenenden farklı çıktı:

  1. Yanlış zone’a eklenen misafir DMZ’ye ulaştı. İç bölümler için yazılmış kural 6, aynı zone’daki misafire de uygulandı.
  2. Kurallarda kullanılan arayüzler zone formunda görünmedi. Kuralı başka arayüze taşınan port ise listeye girdi.
  3. set interface bir arayüzü sessizce düşürdü. Düşen depo internete çıkamadı; append ile geri eklenince kurala dokunmadan çıktı.
  4. Zone içi anahtar kapanınca görünmeyen bir kural devreye girdi. 4294967295 numaralı kuralla geçen trafik logda hiç görünmedi.

Örnekteki sınır kapısında duvarın içindeki şeritler tek çıkışı ve tek talimatı paylaşır; bu yüzden duvarın içine yalnız aynı talimata uyması gereken şeritler alınır, aralarına da kayıtsız geçit açılmaz. Sıradaki adım, FortiGate’in bu bölgeler arasında paketleri nereye göndereceğini bilmesi, yani rehberin 12. adımı; açılış listesinin kalanı 20 adımlık kontrol listesinde duruyor.

FortiGate Firewall Zone ve DMZ Hakkında Sık Sorulan Sorular

Konmamalı. Zone'a giren arayüz, zone'a yazılmış bütün kuralları devralır. Lab'da misafir ağı iç bölümlerin zone'undayken, adı İç bölümlerden DMZ web olan kural 6 üzerinden DMZ'deki web sunucusuna ulaştı ve 200 aldı. Misafir zone'dan çıkarılıp yalnız DNS, HTTP ve HTTPS'e izin veren kendi kuralına alınınca aynı istek policy 0 ile düştü.
Zone formundaki Block intra-zone traffic seçeneği kapatılmış olabilir. Fabrika ayarında açıktır (CLI'da intrazone deny) ve zone içi trafik policy 0 ile reddedilir. Lab'da seçeneği kapatınca muhasebe ile depo arasındaki ping, kural listesinde görünmeyen 4294967295 numaralı bir kuralla geçti ve trafik logunda hiç görünmedi.
Lab'da kurallarda kullanılan arayüzler (personel, dmz ve dis-ag) zone formunun Interface members listesinde hiç çıkmadı. Kuralı başka arayüze taşınan ic-ag (port2) ise listeye girdi. Bir arayüzü zone'a almadan önce onu kullanan kurallar bulunur; kural zone'a yazılacaksa arayüz kuraldan çıkarılır, sonra zone'a eklenir.
Lab'da formda görünen alanları değiştirdi: DMZ rolündeki arayüzde DHCP Server, Security mode ve Auto-managed by IPAM seçenekleri çıkmadı. DMZ'yi iç ağdan ayıran rol değil, kurallardır. DMZ'deki sunucudan muhasebeye başlatılan bağlantı, o yöne kural yazılmadığı için dört denemede de policy 0 ile reddedildi ve dördü de logda göründü.
append interface ile. set interface arayüz listesini baştan yazar: lab'da set interface "muhasebe" satırından sonra zone'da yalnız muhasebe kaldı ve depo internete çıkamadı. Zone'daki arayüzleri koruyarak eklemek için append interface "depo" yazılır.
İ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