Kurumsal Network Kurulumu

FortiGate Firewall NAT Ayarı: IP Pool ve Central NAT

FortiGate Firewall NAT ayarı: NIST'e göre NAT nerede açılır, oturum tablosu ve log, IP Pool ve ARP cevabı, yedek hatta çıkış adresi ve central NAT.

İlker Pehlivan

FortiGate Firewall NAT ayarı, iç ağdan çıkan bağlantıların kaynak adresini dışarıda geçerli bir adresle değiştirmektir. NIST’in tarif ettiği düzende NAT bir güvenlik özelliği değil, bir yönlendirme işlemidir: yalnız internete çıkan kurallarda açılır, iç bölümler arasında kapalı kalır. Çevirinin iki ucu, yani iç adres ve dışarıda kullanılan adres, portlarıyla birlikte logda tutulur.

Bu yazı FortiGate Firewall yapılandırma rehberimizin 15. adımıdır. Çevirinin kendisini, bağlantı defterini ve portun neden önemli olduğunu NAT nedir yazımızda Linux’ta ölçtük; burada FortiGate’in üç yüzünü ölçtüm: kuraldaki NAT, IP havuzu ve central NAT kipi.

İki bulgu beklenenden farklı çıktı: iç bölümler arasındaki bir kuralda açık kalan NAT, DMZ sunucusuna iki bölümü tek adresten gösterdi. Central NAT’a geçildiği anda da bütün çıkışın çevirisi durdu.

Örnekteki sınır kapısı dışarıya giden yükleri kendi adresiyle gönderir; dönen her şey kapıya gelir ve kapı onu içerideki sahibine iletir. Kapı yükleri ikinci bir adresle, yan kapısının adresiyle gönderiyorsa o kapının zilini de bağlamak zorundadır; bağlamazsa dönen koliler dışarıda bekler. FortiGate’te yan kapı IP havuzundaki adres, zil de o adresi soran ARP isteğidir.

Bu yazı, Kurumsal Network Kurulumu hizmetimizde çıkış adreslerini planlarken ve 5651 kayıtlarıyla eşleştirirken kurduğumuz düzeni anlatır.

FortiGate Firewall NAT ayarı benzetmesi: sınır kapısının ofisinde ikinci bir yan kapı var, dışarıdan dönen kolinin kuryesi zili çekiyor, görevli yan kapının kapağını açıp koliyi alıyor
Yükü ikinci bir adresle gönderen kapı, o adresin kapısını da açmak zorundadır. FortiGate de IP havuzundaki adresi sorana kendi adına cevap verir. Vermezse dönen trafik kapıda kalır.

FortiGate’te NAT Neden Gerekir? Özel Adres Dışarıdan Dönmez

Lab’da iç bölümlerin internete çıktığı kural (5) fabrika ayarındaki gibi NAT açık duruyor. Muhasebedeki bir bilgisayardan (10.34.70.10) internetteki bir web sunucusuna bağlandım ve servis sağlayıcı tarafında yakaladım:

Çıktı
13:00:09.326943 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 203.0.113.1.38982 > 198.18.0.1.80: Flags [S], seq 89869212, ...
13:00:09.326976 00:0c:29:a0:71:b8 > 00:0c:29:d1:72:41, ethertype IPv4 (0x0800), length 74: 198.18.0.1.80 > 203.0.113.1.38982: Flags [S.], seq 1841193170, ack 89869213, ...

Dış taraf bağlantıyı FortiGate’in hat adresinden (203.0.113.1) geliyor görüyor ve cevabı oraya veriyor. Yakalamanın saatleri UTC; lab’daki saat üç saat ileride. Kuralda NAT’ı kapatıp aynı bağlantıyı denedim:

Çıktı
13:00:22.468118 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 10.34.70.10.55058 > 198.18.0.1.80: Flags [S], seq 2475455749, ...
13:00:23.513127 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 10.34.70.10.55058 > 198.18.0.1.80: Flags [S], seq 2475455749, ...

Paket bu kez özel adresle çıktı ve cevap gelmedi; dış tarafın 10.34.70.10’a giden bir yolu yok, bağlantı dört denemeden sonra düştü. NAT nedir yazımızda Linux’ta ölçtüğümüz durumun aynısı. NAT’ı geri açtım.

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

NAT yalnız internete çıkan kurallarda açılır ve çıkışta hattın kendi adresi kullanılır. İç bölümler arasında ve DMZ’ye giden kurallarda NAT kapalı kalır. Ayrı bir çıkış adresi ancak karşı taraf onu istiyorsa IP havuzuyla verilir. Her oturumun iç adresi, çevrilmiş adresi, portları ve zamanı logda tutulur.

Bu düzeni üç kaynak birlikte tarif ediyor:

  1. NIST SP 800-41 Rev. 1 (Eylül 2009), bölüm 3.2: NAT, firewall’un güvenlik işlevinin bir parçası değildir. Bölüm 2.4 aynı şeyi öneri olarak yazar: NAT bir firewall türü değil, bir yönlendirme biçimi sayılır. Bölüm 3.2 log için de açıktır: NAT kullanılıyorsa log özel adresi göstermelidir, yoksa loglar birçok makineyi tek bir genel adresle yanlış tanımlar.
  2. RFC 6302 (BCP 162, Haziran 2011): adres paylaşımı yüzünden internete bakan sunucular gelen adresin yanında kaynak portu ve doğru bir zaman damgasını da kaydetmelidir. Zaman saniyesine kadar doğru olmalı ve izlenebilir bir zaman kaynağından alınmalıdır. Aynı bilgi çeviriyi yapan tarafta da tutulmazsa iki kayıt eşleşmez.
  3. Fortinet FortiOS 7.0.10 Administration Guide: Static SNAT sayfası çıkış adresi olarak en yaygın seçimin çıkış arayüzünün adresi olduğunu söyler (arayüzde Use Outgoing Interface Address). Dynamic SNAT sayfası IP havuzunu, Central SNAT sayfası da central NAT açıkken kurallardaki NAT seçeneğinin atlandığını anlatır.

Türkiye’de logun ikinci bir sahibi var: 5651 sayılı kanun trafik kayıtlarının saklanmasını istiyor. FortiGate’te bu kaydın açılmasını ve saklama süresini log ayarları yazımızda anlattık.

FortiGate’te NAT dört biçimde duruyor:

Kuraldaki NATIP havuzuCentral SNATNAT kapalı
Nerede ayarlanırKural formu, NAT anahtarıIP Pools + kural formuAyrı Central SNAT tablosuKural formu
Çıkış adresiHattın adresiHavuzdaki adresTablodaki kurala göreDeğişmez
Ne zamanİnternete çıkan her izinKarşı taraf ayrı adres istiyorsaÇok kurallı, çok adresli cihazİç bölümler arası, DMZ
Lab örneğiKural 1, 5, 11Muhasebe, ölçüm boyuncaÖlçüm boyuncaKural 6 (iç bölümlerden DMZ’ye)

Tablonun son sütunu sık atlanan kuralı söylüyor: NAT her izin kuralında açık gelir ve iç kurallarda kapatılması gerekir.

Kuraldaki NAT, kural formunun Firewall / Network Options bölümünde durur. İnternete çıkan kural 5’te (Policy & Objects → Firewall Policy, kurala çift tıklanır) üç alan bu düzeni kuruyor:

  1. NAT: açık.
  2. IP Pool Configuration: Use Outgoing Interface Address, yani çıkış adresi hattın kendi adresi. Use Dynamic IP Pool ayrı bir çıkış adresi gerektiğinde seçilir, aşağıda ölçtüm.
  3. Log Allowed Traffic: All Sessions. Çevrilmiş adres ve port her oturumda loga yazılır.
FortiGate Edit Policy formu, Ic bolumler dis aga: NAT anahtarı ve IP Pool Configuration satırında Use Outgoing Interface Address, en altta Log Allowed Traffic All Sessions kırmızı çerçeveyle işaretli
İnternete çıkan kuralda NAT açık ve çıkış adresi hattın kendisi; çevirinin izi en alttaki log ayarında.

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

FortiGate CLI
config firewall policy
    edit 5
        set name "Ic bolumler dis aga"
        set nat enable
        set logtraffic all
    next
end

Use Outgoing Interface Address için ayrı bir satır yok: kurala havuz verilmediği sürece (ippool fabrika ayarında kapalı) nat enable hattın adresini kullanır.

Kaç Çıkış Adresi Olmalı?

NIST de Fortinet de bir sayı vermiyor. Pratik karşılığı: her internet hattı için bir çıkış adresi. Ayrı bir adres, ancak bir bölümün trafiği karşı tarafta ayrıca tanınacaksa açılır. Hat sayısı bunu doğrudan etkiliyor. Birincil hattı keserek yedek hatta geçirdim ve aynı isteği gönderdim:

Çıktı
13:02:23.606182 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 198.51.100.1.54092 > 198.18.0.1.80: Flags [S], seq 1241549865, ...
13:02:23.606211 00:0c:29:a0:71:b8 > 00:0c:29:d1:72:41, ethertype IPv4 (0x0800), length 74: 198.18.0.1.80 > 198.51.100.1.54092: Flags [S.], seq 3169410510, ack 1241549866, ...

Kural aynı, ama çıkış adresi artık yedek hattın adresi (198.51.100.1); statik rota yazısında kurduğumuz dis-hatlar zone’u iki hattı tek kuralda topluyor. Kurumu çıkış adresinden tanıyan bir karşı taraf, örneğin bir bankanın ya da bir yazılım sağlayıcısının whitelist’i, iki adresi birden bilmelidir. Bilmezse yedek hatta geçildiği anda o hizmet kesilir.

Ne Zaman NAT Kapalı Kalır?

İç bölümlerden DMZ’deki web sunucusuna giden kuralda (6) NAT kapalı. Formda (Policy & Objects → Firewall Policy, kurala çift tıklanır) Firewall / Network Options bölümündeki NAT anahtarı kapatılır. Anahtar kapanınca IP Pool Configuration satırı da formdan kalkıyor:

FortiGate Edit Policy formu, Ic bolumlerden DMZ web: Outgoing Interface dmz ve kapalı NAT anahtarı kırmızı çerçeveyle işaretli
DMZ'ye giden iç kuralda NAT kapalı: sunucu isteği yapan makineyi kendi adresiyle görür.
FortiGate CLI
config firewall policy
    edit 6
        set name "Ic bolumlerden DMZ web"
        set nat disable
    next
end

set nat disable fabrika değeri olduğu için kuralın show çıktısında görünmüyor; satırın yokluğu NAT’ın kapalı olduğunu söyler.

Kapalıyken sunucunun kendi erişim logu isteği gerçek adresle kaydetti; kuralda NAT’ı açıp aynı isteği muhasebeden ve depodan gönderdim:

Çıktı
10.34.70.10 - - [01/Oct/2026 13:01:54] "GET /nat-kapali HTTP/1.1" 404 -
10.34.80.1 - - [01/Oct/2026 13:01:56] "GET /nat-acik HTTP/1.1" 404 -
10.34.80.1 - - [01/Oct/2026 13:01:56] "GET /nat-acik-depo HTTP/1.1" 404 -

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

  1. NAT kapalıyken sunucu muhasebedeki bilgisayarı kendi adresiyle (10.34.70.10) gördü.
  2. NAT açıkken muhasebeden gelen istek FortiGate’in DMZ arayüzünden (10.34.80.1) geliyor göründü.
  3. Depodan gelen istek de aynı adresten göründü; sunucunun gözünde iki bölüm tek bir istemciye dönüştü.

Sunucuda kaynak adrese göre yazılmış bir erişim kuralı ya da bir saldırı sonrası log incelemesi, bu durumda kimin bağlandığını söyleyemez. NIST’in log kuralının iç tarafta karşılığı bu. NAT’ı geri kapattım.

Çevirinin Defteri: Oturum Tablosu ve Trafik Logu

FortiGate çeviriyi oturum tablosunda tutuyor; NAT nedir yazımızdaki memurun defteri burada bu tablo. Bir bağlantıyı açık tutup tabloya baktım (diagnose sys session list, kaynak adrese ve hedef porta süzülmüş):

FortiGate CLI Çıktısı
session info: proto=6 proto_state=01 duration=11 expire=3589 timeout=3600 flags=00000000 socktype=0 sockport=0 av_idx=0 use=3
...
hook=post dir=org act=snat 10.34.70.10:51744->198.18.0.1:80(203.0.113.1:51744)
hook=pre dir=reply act=dnat 198.18.0.1:80->203.0.113.1:51744(10.34.70.10:51744)
misc=0 policy_id=5 pol_uuid_idx=14738 auth_info=0 chk_client_info=0 vd=0

Oturumun iki satırı çevirinin iki yönü:

  1. Gidiş (act=snat): 10.34.70.10:51744 kaynağı, parantez içindeki 203.0.113.1:51744 olarak dışarı çıkıyor.
  2. Dönüş (act=dnat): 203.0.113.1:51744’e gelen cevap, parantez içindeki 10.34.70.10:51744’e geri çevriliyor.

Bu bağlantıda kaynak port değişmedi; FortiGate portu, çakışma yoksa olduğu gibi bırakıyor. policy_id=5 oturumu açan kuralı, timeout=3600 da TCP oturumunun boşta ne kadar tutulacağını söylüyor.

Oturum tablosu bağlantı bitince silinir; kalıcı kayıt trafik logudur. Kural 5’in logunu, log yazısının internet çıkışı için önerdiği All Sessions kipine aldım. Kural 11 de aynı kipe geçti. Oturum kapanınca yazılan satır:

FortiGate CLI Çıktısı
1: date=2026-10-01 time=16:01:24 ... srcip=10.34.70.10 srcport=54342 srcintf="muhasebe" ... dstip=198.18.0.1 dstport=80 dstintf="port3" ... policyid=5 ... policyname="Ic bolumler dis aga" service="HTTP" trandisp="snat" transip=203.0.113.1 transport=54342 duration=1 sentbyte=341 rcvdbyte=473 ...

Satır, NIST’in ve RFC 6302’nin istediği her şeyi taşıyor:

  1. İç adres ve port: srcip, srcport.
  2. Dışarıda kullanılan adres ve port: transip, transport.
  3. Zaman ve süre: saniyesine kadar date ve time, ardından duration.

Dışarıdan “şu saatte 203.0.113.1:54342’den bir bağlantı geldi” diye sorulduğunda cevap bu satırdır.

FortiGate IP Pool: Ayrı Bir Çıkış Adresi

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

  1. Servis sağlayıcıdan alınmış ek bir adres: lab’da hattın ağındaki 203.0.113.100.
  2. Ayrı adresle çıkacak bölümün nesnesi: muhasebenin ağı, n-muhasebe; adres nesneleri yazısında VLAN’ın kendi nesnesi olarak bıraktık.
  3. Karşı tarafın gerekçesi: örneğin muhasebenin bağlandığı bir hizmetin whitelist’i. Gerekçe yoksa ayrı adres açılmaz.

Menü yolu: Policy & Objects → IP Pools → Create New. Formun alanları:

  1. Name: p- önekiyle. Lab’da p-muhasebe-cikis.
  2. Comments: neden açıldığı. Lab’da Muhasebe ayri cikis adresi; karsi tarafin whitelist'i icin.
  3. Type: Overload, fabrika ayarı. Havuzdaki adresi birçok iç adres paylaşır; One-to-One, Fixed Port Range ve Port Block Allocation de seçilebilir.
  4. External IP address/range: 203.0.113.100-203.0.113.100, tek adres.
  5. ARP Reply: fabrika ayarında açık. Neden açık kalması gerektiği aşağıdaki bölümde.
FortiGate New Dynamic IP Pool formu: ad p-muhasebe-cikis, tür Overload; External IP address/range alanındaki 203.0.113.100-203.0.113.100 ve açık ARP Reply anahtarı kırmızı çerçeveyle işaretli
Havuzun adresi ve ARP cevabı birlikte işaretli; adres hattın ağındansa ikisi birbirinden ayrılmaz.

Havuz kendi başına bir şey yapmaz; bir kurala verilir. Muhasebe için kural 8’in (yazıcı reddi) altına, kural 5’in (iç bölümler) üstüne bir kural yazdım. Kural 8’in üstte kalması şart: yazıcı da muhasebenin ağında. Formun NAT bölümünde Use Dynamic IP Pool seçilip havuz verilir:

FortiGate Edit Policy formu, Muhasebe internet cikisi kuralı: Source alanındaki n-muhasebe ile NAT açık, Use Dynamic IP Pool seçili ve p-muhasebe-cikis havuzu kırmızı çerçeveyle işaretli
Ayrı çıkış adresi bir bölüme bağlanıyor; aynı hattaki diğer bölümler hattın adresiyle çıkmaya devam ediyor.

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

FortiGate CLI
config firewall ippool
    edit "p-muhasebe-cikis"
        set startip 203.0.113.100
        set endip 203.0.113.100
        set comments "Muhasebe ayri cikis adresi; karsi tarafin whitelist'i icin"
    next
end
config firewall policy
    edit 12
        set name "Muhasebe internet cikisi"
        set srcintf "ic-bolumler"
        set dstintf "dis-hatlar"
        set action accept
        set srcaddr "n-muhasebe"
        set dstaddr "all"
        set schedule "always"
        set service "HTTP" "HTTPS" "PING"
        set logtraffic all
        set nat enable
        set ippool enable
        set poolname "p-muhasebe-cikis"
        set comments "Muhasebe internet cikisi ayri adresle (p-muhasebe-cikis). Isteyen: BT, 2026-10-01"
    next
end

Muhasebeden ve depodan aynı sunucuya bağlandım ve dış tarafta yakaladım:

Çıktı
13:04:03.818176 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 203.0.113.100.49054 > 198.18.0.1.80: Flags [S], ...
13:04:03.818209 00:0c:29:a0:71:b8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 203.0.113.100 tell 198.18.0.1, length 28
13:04:03.818534 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype ARP (0x0806), length 60: Reply 203.0.113.100 is-at 00:0c:29:d1:72:41, length 46
13:04:03.818538 00:0c:29:a0:71:b8 > 00:0c:29:d1:72:41, ethertype IPv4 (0x0800), length 74: 198.18.0.1.80 > 203.0.113.100.49054: Flags [S.], ...
13:04:03.844703 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 203.0.113.1.47654 > 198.18.0.1.80: Flags [S], ...

Muhasebe havuz adresiyle (203.0.113.100), depo hattın adresiyle (203.0.113.1) çıktı. Arada iki satır daha var: dış taraf cevabı göndermeden önce havuz adresinin kimde olduğunu sordu ve cevabı FortiGate kendi MAC adresiyle verdi.

Havuz Adresinin Zili: ARP Reply

Bir apartmana gelen kuryeyi düşünün. Paketin üstünde “Daire 100” yazıyor. Kurye kapıya gelir ve zili çalar; açan olursa paketi verir, açan olmazsa paket geri gider. Daire boş değildir belki, ama zil bağlı değilse içerisi kuryeye görünmez.

Bu sahneyi sınır kapısının dört parçası taşıyor:

  1. Hattın adresi (203.0.113.1) kapının ana adresidir; FortiGate’in arayüzünde durur ve herkes onu tanır.
  2. Havuz adresi (203.0.113.100) yan kapıdır; hiçbir arayüzde durmaz.
  3. ARP sorusu zili çalan kuryedir: servis sağlayıcının cihazı cevap paketini göndermeden önce “203.0.113.100 hangi kapıda?” diye sorar.
  4. ARP Reply anahtarı yan kapının zilinin bağlı olup olmamasıdır.

Örnekteki sınır kapısında yükleri yan kapının adresiyle gönderen görevli, o kapının zilini de bağlamak zorundadır; yoksa dönen koli dışarıda kalır. Mekanizma şöyle işliyor:

  1. FortiGate muhasebenin paketini havuz adresiyle gönderir; gidiş için kimseye bir şey sorulmaz.
  2. Dış sunucunun cevabı 203.0.113.100’e yazılır. Cevabı hattın ağına teslim edecek cihaz, lab’da servis sağlayıcı tarafı, bu adresin MAC adresini ARP ile sorar.
  3. ARP Reply açıksa FortiGate kendi MAC adresiyle cevap verir; cevap paketi FortiGate’e gelir ve oturum tablosundan muhasebedeki bilgisayara çevrilir.
  4. Kapalıysa soru cevapsız kalır; cevap paketi hiç gönderilmez ve bağlantı zaman aşımına düşer.
IP havuzu ve ARP cevabı. Solda ARP Reply açık: muhasebenin paketi FortiGate'ten havuz adresi 203.0.113.100 ile çıkıyor; servis sağlayıcı tarafı cevabı göndermeden önce bu adresin kimde olduğunu soruyor, FortiGate kendi MAC adresiyle cevap veriyor ve sunucunun cevabı FortiGate'e geliyor. Sağda ARP Reply kapalı: paket yine havuz adresiyle çıkıyor, ama soruya kimse cevap vermiyor, adres FAILED kalıyor ve cevap paketi gönderilemiyor. ARP Reply açık: zil bağlı FortiGate hat: .1 havuz: .100 servis sağlayıcı 1. kaynak .100 2. ".100 kimde?" 3. "bende" 4. cevap bağlantı kuruldu ARP Reply kapalı: zil bağlı değil FortiGate hat: .1 havuz: .100 servis sağlayıcı .100 FAILED 1. kaynak .100 2. ".100 kimde?" 3. cevap yok 4. cevap gönderilemez bağlantı zaman aşımına düştü IP havuzu ve ARP cevabı. Üstte ARP Reply açık: muhasebenin paketi FortiGate'ten havuz adresi 203.0.113.100 ile çıkıyor; servis sağlayıcı tarafı cevabı göndermeden önce bu adresin kimde olduğunu soruyor, FortiGate kendi MAC adresiyle cevap veriyor ve sunucunun cevabı FortiGate'e geliyor. Altta ARP Reply kapalı: paket yine havuz adresiyle çıkıyor, ama soruya kimse cevap vermiyor, adres FAILED kalıyor ve cevap paketi gönderilemiyor. ARP Reply açık: zil bağlı FortiGate hat: .1 havuz: .100 servis sağlayıcı 1. kaynak .100 2. ".100 kimde?" 3. "bende" 4. cevap bağlantı kuruldu ARP Reply kapalı: zil bağlı değil FortiGate hat: .1 havuz: .100 servis sağlayıcı .100 FAILED 1. kaynak .100 2. ".100 kimde?" 3. cevap yok 4. cevap gönderilemez bağlantı zaman aşımına düştü
Gidiş için zile gerek yok; dönüşte servis sağlayıcı havuz adresini sorar ve cevabı ancak zil bağlıysa teslim eder.

Kazanç ve sorumluluk aynı yerden geliyor. Kazanç: havuz adresi hiçbir arayüze atanmadan kullanılabiliyor. Sorumluluk: adres hattın ağındansa onu sahiplenen tek şey ARP cevabıdır. Fortinet’in CLI başvurusu anahtarı, IP havuzu bir kurala eklendiğinde ARP isteklerine cevap vermeyi açıp kapatan seçenek diye tanımlıyor ve fabrika değeri enable.

Havuz Adresi Çıkıyor, Cevap Gelmiyor

Havuzun ARP Reply anahtarını kapatıp (set arp-reply disable) aynı isteği gönderdim:

Çıktı
13:04:37.486675 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 203.0.113.100.46278 > 198.18.0.1.80: Flags [S], ...
13:04:37.486868 00:0c:29:a0:71:b8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 203.0.113.100 tell 198.18.0.1, length 28
13:04:38.489104 00:0c:29:a0:71:b8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 203.0.113.100 tell 198.18.0.1, length 28
...
203.0.113.100 dev ens224 FAILED

Giden paket doğru adresle çıktı; FortiGate tarafında her şey yolunda görünüyordu. Dış taraf adresi sordu, kimse cevap vermedi ve komşu tablosunda adres FAILED kaldı; cevap paketi gönderilemedi. Bu arızanın teşhis sırası şöyle:

  1. Dış tarafta yakalama yapılabiliyorsa, havuz adresiyle giden paket görünüyor ama dönen yoksa ARP satırlarına bakılır.
  2. Havuzun arp-reply ayarı kontrol edilir.
  3. Servis sağlayıcı havuz bloğunu FortiGate’in hat adresine yönlendiriyorsa ARP sorusu hiç gelmez ve bu ayarın önemi kalmaz; hangisinin geçerli olduğu servis sağlayıcıyla konuşulur.

Zili Yeniden Bağlamak

Anahtar set arp-reply enable ile geri açılır. Açtıktan sonra muhasebenin isteği yeniden 200 döndü. Ölçümden sonra muhasebe kuralını ve havuzu sildim: havuz adresi birincil hattın ağından ve yedek hatta geçildiğinde o hattın servis sağlayıcısı bu adrese dönen trafiği FortiGate’e yönlendirmez. İki hatlı bir kurumda ayrı çıkış adresi her hat için ayrı planlanır.

FortiGate Central NAT: Çeviriyi Kurallardan Ayırmak

Central NAT kipinde çeviri kurallardan alınır ve Central SNAT adlı ayrı bir tabloya taşınır; kural yalnız izin verir, adres çevirisini o tablo yapar. Fortinet’in kılavuzu tablonun yukarıdan aşağı okunduğunu ve güvenlik kuralından sonra uygulandığını söylüyor. Çok sayıda kuralı ve çıkış adresi olan bir cihazda çevirileri tek yerden görmek için tercih edilir.

Kipi CLI’da açmayı denedim (config system settings, set central-nat enable) ve iki engelle karşılaştım:

FortiGate CLI Çıktısı
Cannot enable central-nat with firewall policy using vip (id=3).
...
Cannot enable central-nat with firewall policy using ippool (id=12).

Birinci engel, dışarıdan DMZ’deki web sunucusuna açılan kural 3’ün sanal IP (v-dmz-web) kullanmasıydı; ikincisi, muhasebe kuralının IP havuzu kullanmasıydı. İkisi de central NAT’ta kendi tablolarına taşınır. Kural 3’ün hedefini geçici olarak sunucunun kendi nesnesine çevirip havuzu kuraldan çıkarınca kip açıldı ve hata vermeden başka bir şey oldu:

Çıktı
13:05:44.712956 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 10.34.70.10.58090 > 198.18.0.1.80: Flags [S], ...
13:05:45.753079 00:0c:29:d1:72:41 > 00:0c:29:a0:71:b8, ethertype IPv4 (0x0800), length 74: 10.34.70.10.58090 > 198.18.0.1.80: Flags [S], ...

Paketler özel adresle çıktı. Kural 5’in show çıktısında set nat enable satırı kaybolmuştu ve show firewall central-snat-map boş döndü; yeni kipte çeviri yalnız o tablodan geliyor. Menü de değişti: Policy & Objects altına Central SNAT eklendi, Virtual IPs de DNAT & Virtual IPs oldu.

Menü yolu: Policy & Objects → Central SNAT → Create New. Formun alanları:

  1. Incoming Interface ve Outgoing Interface: ic-bolumler ve dis-hatlar.
  2. Source Address ve Destination Address: all; internete giden çeviri.
  3. NAT: açık. IP Pool Configuration satırında Use Outgoing Interface Address, yani hattın adresi.
  4. Comments: Ic bolumler internet cikisi; hattin adresiyle.
FortiGate Central SNAT kural formu: sol menüdeki Central SNAT öğesi ile NAT açık, Use Outgoing Interface Address seçili ve protokol any satırları kırmızı çerçeveyle işaretli; gelen arayüz ic-bolumler, giden arayüz dis-hatlar
Central NAT açılınca menüye kendi tablosu ekleniyor; kuraldaki NAT anahtarının işini artık bu form yapıyor.

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

FortiGate CLI
config firewall central-snat-map
    edit 1
        set srcintf "ic-bolumler"
        set dstintf "dis-hatlar"
        set orig-addr "all"
        set dst-addr "all"
        set comments "Ic bolumler internet cikisi; hattin adresiyle"
    next
end

Aynı istek yeniden 203.0.113.1 kaynağıyla çıktı ve sunucu 200 döndü. Sonra kipi kapattım: kural 5’te set nat enable satırı geri geldi ve trafik kuraldaki NAT’la çıkmaya devam etti; FortiGate eski ayarları saklamış. Central SNAT tablosundaki kural ise yerinde kaldı ama artık kullanılmıyordu. Ölçümden sonra onu sildim, kural 3’e sanal IP’yi geri verdim ve bütün bölümlerin yolunu yeniden denedim.

Hangi kipin seçileceği bir tasarım kararıdır. Az kurallı bir cihazda kuraldaki NAT okunur ve yeterlidir; lab bu kipte kaldı. Çok sayıda kuralın ve çıkış adresinin olduğu bir cihazda central NAT çevirileri tek tabloda toplar.

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

  1. İnternete çıkan her izin kuralında NAT açık; dış tarafta kaynak adres hattın adresi.
  2. İç bölümler arası ve DMZ kurallarında NAT kapalı; hedef sunucunun logunda istemcinin kendi adresi görünüyor.
  3. Çıkış adresini tanıyan karşı tarafların listesinde her hattın adresi var.
  4. IP havuzu varsa arp-reply açık ya da servis sağlayıcı havuz bloğunu FortiGate’e yönlendiriyor.
  5. Trafik logunda srcip, srcport, transip ve transport birlikte görünüyor; internet kurallarının logu All Sessions.
  6. NAT kipi biliniyor: show system settings çıktısında central-nat durumu; central NAT’taysa her çıkış için bir Central SNAT kuralı var.

Sonuç: FortiGate’te NAT Bir Yönlendirme Kararıdır

FortiGate fabrika ayarında NAT’ı her izin kuralının içinde açar ve çıkışta hattın adresini kullanır. NIST’in tarif ettiği düzende bu çeviri yalnız internete çıkarken yapılır, iç kurallarda kapatılır ve iki ucu portlarıyla birlikte loga yazılır. Lab’da dört şey beklenenden farklı çıktı:

  1. İç bölümlerden DMZ’ye giden kuralda NAT açılınca DMZ sunucusu muhasebeyi ve depoyu tek bir adresten (10.34.80.1) geliyor gördü.
  2. Yedek hatta geçince çıkış adresi de değişti (198.51.100.1); kural aynı kaldı.
  3. ARP Reply kapalı bir havuz paketi doğru adresle gönderdi ama cevabı hiç alamadı.
  4. Central NAT açılınca kurallardaki NAT ayarları devreden çıktı ve tablo boşken bütün çıkış çevirisiz kaldı; kip kapanınca eski ayarlar geri geldi.

Örnekteki sınır kapısında yükü yan kapının adresiyle göndermek, o kapının zilini de bağlamayı gerektirir; içeriye giden yükte ise kapı kendi adını yazmaz, gönderenin adını bırakır.

Dışarıdan içeriye port açmayı, yani sanal IP’yi, rehberde aynı adımın ikinci kısmında ve FortiGate kullanım rehberimizde anlattık. Açılış listesinin kalanı 20 adımlık kontrol listesinde duruyor.

FortiGate Firewall NAT Ayarı Hakkında Sık Sorulan Sorular

İnternete çıkan kurallarda. İç bölümler arasındaki ve DMZ'ye giden kurallarda NAT kapalı kalır, çünkü hedef sunucu gerçek kaynak adresi görmeli. Lab'da iç bölümlerden DMZ'ye giden kuralda NAT açılınca DMZ'deki web sunucusu muhasebeyi de depoyu da FortiGate'in DMZ adresinden (10.34.80.1) geliyor gördü; NAT kapalıyken muhasebenin kendi adresini (10.34.70.10) görüyordu.
Çıkışta hattın adresi yerine başka bir adres kullanmak içindir; örneğin karşı tarafın whitelist'ine yazılacak ayrı bir çıkış adresi. Lab'da muhasebenin trafiği havuzdaki 203.0.113.100 ile, depo ise hattın adresiyle (203.0.113.1) çıktı. Havuzun ARP Reply seçeneği açık kalmalı: kapatınca dış taraf bu adresi sordu, cevap alamadı ve bağlantı kurulamadı.
Görünür. İzin kuralında log All Sessions kipindeyken her oturum satırı hem iç adresi ve portu (srcip, srcport) hem çevrilmiş adresi ve portu (transip, transport) taşıyor. NIST SP 800-41 logda özel adresin görünmesini, RFC 6302 de portun ve zamanın tutulmasını istiyor. Kayıtların saklanması ayrı bir iştir; FortiGate diski fabrika ayarında 7 gün tutar.
Kurallarda Virtual IP ya da IP Pool kullanılıyorsa açılmıyor. Lab'da önce Cannot enable central-nat with firewall policy using vip (id=3), sonra aynı hata ippool için (id=12) geldi. İkisi kurallardan çıkarılınca kip açıldı.
Central NAT kipinde çeviri kurallardan alınır ve Central SNAT tablosuna taşınır; o tablo boşken çeviri hiç yapılmaz. Lab'da kip açıldığı anda kurallardaki NAT satırları kayboldu ve paketler özel adresle çıkıp cevapsız kaldı. Central SNAT tablosuna bir kural yazılınca çıkış adresi yeniden 203.0.113.1 oldu.
İ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