Fortigate Firewall’da “Local-in-Policy” İle Erişimleri Nasıl Kısıtlayabilirsiniz?
@Fortinet

Fortigate Firewall’da “Local-in-Policy” İle Erişimleri Nasıl Kısıtlayabilirsiniz?

* English versions are added below each paragraph *

Değerli okurlar, bu makalemde Fortigate Firewall cihazlarınızda “Local-in-Policy” ile örneğin WAN Interface’inize gelen HTTPS trafiklerini nasıl kısıtlayarak, sadece “Trusted Host” larınıza erişim izni verebileceğinize değiniyor olacağım.

Dear readers, in this article, I will be talking about how you can only allow access to your "Trusted Hosts" by restricting the HTTPS traffic coming to your WAN Interface with "Local-in-Policy" on your Fortigate Firewall devices.


Yapınızda bir Fortigate Firewall kullanıyor olabilirsiniz ve bu Firewallunuza ofis dışındayken VPN yapmadan erişmeniz gerektiği zor bir durumla karşı karşıya kalabilirsiniz(Bugün kaldım olmaz demeyin 😊) Firewallunuzun WAN Interface’inde HTTPS erişimini aktif etmeniz halinde ofis dışındayken VPN yapmadan da firewallunuzun arayüzüne erişip konfigürasyon gerçekleştirebilirsiniz. Firewallunuzun arayüzüne HTTPS erişiminin tüm dünyaya açık olması güvenlik açısından ciddi sorunlar doğurabilir tabii ki. Ancak HTTPS erişimini Interfaceiniz üzerinde açtıktan sonra Local-in-Policy ile sizin kontrolünüz ve kullanımınızda olan belirli bir kaç IP Adresinize ofis dışındayken VPN yapmadan Firewallunuzun arayüzüne HTTPS ile erişim izni tanımlayabilirsiniz. Bu yaşayacağınız zor durumlarda hayat kurtarıcınız olabilir.

You may be using a Fortigate Firewall in your structure and you may face a difficult situation when you need to access your Firewall without a VPN while you are out of the office (Don't say you can't stay today 😊) If you activate HTTPS access on the WAN Interface of your Firewall, you can access your firewall's interface and configure it without VPN while you are out of the office. Of course, the fact that HTTPS access to your firewall's interface is open to the whole world can cause serious problems in terms of security. However, after you enable HTTPS access on your Interface, with Local-in-Policy, you can define a few IP Addresses that are under your control and use, while you are out of the office, without VPN, to access the interface of your Firewall with HTTPS. This can be your life saver in difficult situations.


Bir çok teknisyen HTTPS erişimini de kısıtlayabileceğini veya nereden yapacağını bilemiyor olabilir ya da güvenli olmadığından dolayı tercih etmiyor olabilir fakat Local-in-Policy ile bu erişiminizi güvenli bir şekilde kullanabilirsiniz.

Many technicians may also restrict HTTPS access or do not know where to do it, or they may not prefer it because it is not secure, but you can use this access securely with Local-in-Policy.


Tabii ki erişim izni vereceğiniz public IP Adreslerinizin ISPniz tarafından sabitlenmiş/değişmeyen IP Adresleriniz olması yine güvenlik açısından büyük bir önem taşımaktadır.

Of course, it is of great importance in terms of security that your public IP Addresses, which you will grant access to, are fixed/unchanged by your ISP.


Yukarda paylaşmış olduğum kısa bir bilgilendirme üzerine, gelin bu ayarlamayı bir Fortigate Firewall cihazımızda nasıl gerçekleştirebileceğimizi görelim;

Upon a brief information I have shared above, let's see how we can perform this adjustment on a Fortigate Firewall device;


Öncelikle Firewallunuzda default olarak 443 olan HTTPS portunu kullanmıyor olabilirsiniz. Örnek vermek gerekirse, bu örneklemeler için kullanacağım Firewallumda HTTPS erişimi için 18443 portunu kullanıyorum ve HTTP isteklerini de direkt olarak HTTPS e çevirip 18443 portuma yönlendiriyorum. Dolayısıyla bu ayarımızı aşağıdaki ekran görüntüsündeki menüden kontrol edip işlemlerimize devam etmemiz gerekecektir. Kaş yapalım derken göz çıkarmak istemeyiz 😊

First of all, you may not be using the HTTPS port, which is 443 by default on your Firewall. For example, I use port 18443 for HTTPS access on my Firewall, which I will use for these examples, and I directly convert HTTP requests to HTTPS and forward them to port 18443. Therefore, we will need to check this setting from the menu in the screenshot below and continue our operations.


Firewallunuzun kullanılmakta olan HTTPS portunun ne olduğunu, System>Settings menüsünden aşağıdaki alandan öğrenebilirsiniz;

You can find out what the HTTPS port of your firewall is in the System>Settings menu from the field below;

No alt text provided for this image

HTTPS için kullandığımız portumuzu öğrendikten sonra, default olan 443(HTTPS) portu dışında bir portsa, bunun için bir “Service” oluşturmamız gerekli ki Local-in-Policy yazarken bu servisimizi seçebilelim çünkü default servisler dışındaki port numaralarını direkt olarak giremeyeceğiz bu policy yazarken, bunun için bu servisimize bir isim vermis olmamız gerekecektir. Bunun için de aşağıdaki ekran görüntüsünde de görebileceğiniz gibi “TCP/18443” isminde TCP 18443 portu için yeni bir servis oluşturuyorum, bunu da “Policy & Objects” sekmesinde “Services” kırılımında “Create New” butonuna tıklayıp, ekran görüntüsündeki gibi yeni servisim için değerleri girerek “Ok” butonuna basıp yeni servisimi oluşturdum;

After knowing our port we use for HTTPS, if it is a port other than the default 443(HTTPS) port, we need to create a "Service" for this so that we can select this service when typing Local-in-Policy because we cannot directly enter port numbers other than default services. For this we will need to give our service a name. For this, as you can see in the screenshot below, I create a new service for the TCP 18443 port named "TCP/18443", click the "Create New" button in the "Services" tab in the "Policy & Objects" tab, and then set the values for my new service as in the screenshot. I created my new service by entering the “Ok” button;

No alt text provided for this image

Servisimi oluşturduktan sonra, bir de yukarda belirtiğim gibi “Trusted Host” olarak sayılacak, erişim izni olacak olan public IP Adreslerim için birer “Address” oluşturmam gerekecektir. Yine Local-in-Policy yazarken direkt IP Adresi veremeyeceğimiz için bir isim belirtmemizi isteyecektir Firewallumuz bizden. Local-in-Policy kurallarımız GUI üzerinden “Firewall Features” alanından açmanız durumunda gözükebilir ancak burada default kullanılanları görebilirsiniz, dolayısıyla Local-in-Policy kurallarınızı CLI üzerinden yazmanız gerekecektir ne yazık ki. GUI üzerinden Local-in-Policy kuralı yazamayacaksınızdır.

After creating my service, I will also need to create an "Address" for my public IP Addresses, which will be counted as "Trusted Host" as I mentioned above and will have access permission. Again, when typing Local-in-Policy, our Firewall will ask us to specify a name, since we cannot give an IP Address directly. Our Local-in-Policy rules can be seen if you open them from the "Firewall Features" area on the GUI, but you can see the default ones here, so you will have to write your Local-in-Policy rules through the CLI, unfortunately. You will not be able to write a Local-in-Policy rule via the GUI.


Önemli Not: CLI üzerinden ne yaptığınıza emin olmadan Local-in-Policy kuralı yazmamanız naçizane en büyük tavsiyem olacaktır. Güzel bir ayar yapmaya çalışırken, tüm Firewallunuza erişiminizi kaybedip her şeyin berbat olmasını istemezsiniz 😊

Important Note: It would be my best advice not to write a Local-in-Policy rule until you are sure of what you are doing through the CLI. You don't want to lose access to your entire Firewall and mess everything up when you're trying to set it up nicely 😊


Evet, yukarda bahsettiğim “Address” lerimizi de aşağıdaki ekran görüntüsünde de görebileceğiniz gibi oluşturduktan sonra Local-in-Policy kurallarımızı yazacağız. Bunun için “Policy & Objects” sekmesinden “Addresses” kırılımında “Create New” butonuna tıklayarak, Firewallumuza HTTPS ile erişim izni vereceğimiz ve bizim kontrolümüzde olan ve sabitlenmiş public IP Adresimiz için bir isim belirleyip, tipini “Subnet” olarak seçip ve IP/Netmask alanına da PUBLICIP/32 şeklinde IP Adresimizi de yazdıktan sonra “Ok” butonuna tıklayıp, adresimizi de eklemeyi bitirmiş oluyoruz. İhtiyacımız varsa ekleyeceğimiz diğer IP Adreslerimizi de yine aynı şekilde ekledikten sonra Local-in-Policy kurallarımızı yazabiliriz Adres ekleme adımının örnek bir ekran görüntüsünü aşağıda sizlerle paylaşıyorum;

Yes, as you can see in the screenshot below, we will write our Local-in-Policy rules after creating our "Addresses" that I mentioned above. For this, from the "Policy & Objects" tab, by clicking the "Create New" button in the "Addresses" breakdown, we will give access to our Firewall with HTTPS and specify a name for our fixed public IP Address, which is under our control, select the type as "Subnet" and enter the IP / Netmask field. After typing our IP Address in the form of PUBLICIP/32, we click the "Ok" button and we finish adding our address. If we need it, we can write our Local-in-Policy rules after adding our other IP Addresses in the same way. I am sharing a sample screenshot of the address adding step below;

No alt text provided for this image

Servisimizi ve erişim izni vereceğimiz bizim kontrolümüzde ve sabitlenmiş olan IP Adreslerimizi de ekledikten sonra, CLI üzerinden Local-in-Policy kurallarımızı yazabiliriz. Daha önce de bahsettiğim gibi, GUI üzerinden ne yazık ki bu kuralları yazmanıza olanak tanınmıyor Fortinet tarafından. CLI üzerinden iki adet kural yazmamız gerekecektir. Bunlara ait örnek ekran görüntülerini de sizlerle aşağıda paylaşıyor olacağım.

After adding our service and IP Addresses that are under our control and fixed to which we will grant access, we can write our Local-in-Policy rules via the CLI. As I mentioned before, unfortunately, Fortinet does not allow you to write these rules through the GUI. We will need to write two rules over the CLI. I will be sharing sample screenshots of these with you below.


İlk kuralımız Firewallların çalışma mantığına göre “Accept” kuralımız olacaktır tabii ki. Bu kuralımızı aşağıdaki ekran görüntüsünde de yer aldığı şekilde yazmamız gerekecektir. Girilen komutların açıklamalarını ekran görüntüsü altında sunuyor olacağım;

Of course, our first rule will be the "Accept" rule according to the working logic of Firewalls. We will need to write this rule as shown in the screenshot below. I will present the explanations of the entered commands under the screenshot;

No alt text provided for this image

Bu kuralımızda kullandığımız ilk komutumuz Local-in-Policy yazabilmemiz için bu alana giriş yaptığımız “config firewall local-in-policy” komutumuzdur. Akabinde “edit 1” diyerek yeni bir kural oluşturup hemen peşinden asıl kuralımızı oluşturan komutlarımızı yazıyoruz. Bu komutlarımızın açıklamarı ise şu şekildedir;

The first command we use in this rule is our "config firewall local-in-policy" command, which we enter in this field so that we can write Local-in-Policy. Then we create a new rule by saying “edit 1” and then write our commands that make up our main rule. The explanations of these commands are as follows;


“set intf wan1” – Bu komutumuzla; erişimi verdiğimiz public IP Adresimizin hangi interface tarafından geleceğini belirtiyoruz.

“set intf wan1” – With this command; We specify which interface will come from our public IP Address that we have given access to.


“set srcaddr DINCER-PUBLIC-IP” – Bu komutumuzla; erişimi verdiğimiz public IP Adresimizin “Address” olarak eklemesini sağlıyoruz, hangi IP Adresinin erişim yapabileceğini belirtmiş oluyoruz kısacası. Buradaki “DINCER-PUBLIC-IP” kısmı sizin kendi Firewallunuzda erişim izni vermek için oluşturacağınız “Address” teki isim olacaktır tabii ki.

“set srcaddr DINCER-PUBLIC-IP” – With this command; We make sure that our public IP Address, to which we give access, is added as "Address", in short, we specify which IP Address can access. The “DINCER-PUBLIC-IP” part here will of course be the name in the “Address” that you will create to allow access on your own Firewall.


“set dstaddr all” – Bu komutumuzla; erişim izni vereceğimiz IP Adresimizin hangi hedef IP adreslerimize erişebileceğini seçebildiğimiz alan. Dilerseniz bunun için de farklı bir “Address” oluşturup bu kısmı da kısıtlayabilirsiniz ancak ben bu örneğimde “all” olarak vermeyi tercih ettim, zaten belirli bir IP Adresime izin vereceğim için, bunda bir sakınca göremedim naçizane. Bunun da bir açık olduğunun düşünen olursa, lütfen beni de bilgilendirmek için mesaj yoluyla ulaşınız, bu benim de çok işime yarayan bir bilgi olacaktır.

“set dstaddr all” – With this command; The area where we can choose which destination IP addresses our IP Address to which we will grant access can access. If you wish, you can create a different "Address" for this and restrict this part as well, but I chose to give it as "all" in this example. If anyone thinks that this is a bug, please contact me via message to inform me, this will be very useful information for me.


“set action accept” – Bu komutumuzla; gelen isteğin “Accept” mi yoksa “Deny” mı geçeceğini belirliyoruz.

“set action accept” – With this command; We determine whether the incoming request will pass "Accept" or "Deny".


“set service TCP/18443” – Bu komutumuzla; erişim izni verdiğimiz IP Adresimizin hangi porta geçebileceğini belirleyebiliriz, yukarda da bahsettiğim gibi benim örneğimde bu port 18443’tür, defaultta 443 olan HTTPS portu için direkt olarak “set service HTTPS” olarak kuralınızı düzenleyebilirsiniz.

“set service TCP/18443” – With this command; We can determine which port our IP Address to which we allow access can pass, as I mentioned above, this port is 18443 in my example, you can directly edit your rule as "set service HTTPS" for the HTTPS port, which is 443 by default.


“set schedule always” – Bu komutumuzla; erişim izni verdiğimiz IP Adresimizin hangi zaman aralığında bu erişimi yapabileceğini belirleyebiliriz. Ben bu örneğimde yine “Always” olarak seçtim fakat dilerseniz sizler kendi Firewalllarınızda, erişim zamanını da kısıtlayabilirsiniz tabii ki.

“set schedule always” – With this command; We can determine in which time period our IP Address, to which we have granted access, can make this access. In this example, I chose "Always" again, but if you wish, you can also restrict the access time in your own Firewalls, of course.


“set status enable” – Bu komutumuzla; yazdığımız bu Local-in-Policy kuralımızın aktif olmasını istediğini belirliyoruz.

“set status enable” – With this command; We determine that we want this Local-in-Policy rule we wrote to be active.


Bu “Accept” kuralımız sonrasında sadece izin verdiğimiz IP Adreslerimizden erişim sağlanabilmesi ve WAN tarafından gelen diğer tüm Firewall arayüzümüe olacak olan HTTPS erişimlerini blocklamamız için bir de “Deny” kuralı yazmamız gerekecektir. Bu kuralımızın örnek ekran görüntüsünü de aşağıdaki sizinle paylaşıyorum, ekran görüntüsü altında yine açıklamasını bulabilirsiniz. Bahsettiğim ekran görüntüsü aşağıdaki şekildedir;

After this "Accept" rule, we will also need to write a "Deny" rule in order to be able to access only from our allowed IP Addresses and to block HTTPS access to all other Firewall interfaces coming from the WAN. I am sharing the sample screenshot of this rule with you below, you can find its explanation under the screenshot. The screenshot I'm talking about is as follows;

No alt text provided for this image

“Deny” kuralımızı yazarken de “edit 2” diyerek ikinci boş kuralımıza girip ayarlamalarımızı gerçekleştiriyoruz ve bu kuralımızda “Accept” kuralımızdan farklı olarak “set srcaddr all” yazıyoruz ki bir üst kuralımızda izin verdiğimiz IP Adreslerimiz dışında kalan tüm adresleri kapsayabilsin. Bir diğer değişiklik ise “set action deny” kısmıdır, yine bir üst kuralımızda izin verdiğimiz IP Adreslerimiz dışında kalan tüm adreslerden gelen istekleri blocklamak istediğimiz için bu action kısmını bu kuralımızda “Deny” olarak seçip devam edip işlemlerimizi tamamlamış oluyoruz.

While writing our "deny" rule, we enter our second empty rule by saying "edit 2" and make our adjustments, and in this rule, unlike our "Accept" rule, we write "set srcaddr all" so that it can cover all addresses other than the IP Addresses we allow in our upper rule. Another change is the "set action deny" part, since we want to block requests from all addresses other than the IP Addresses we allow in our upper rule, we choose this action part as "Deny" in this rule and continue our operations.


Yazmış olduğumuz bu iki Local-in-Policy kuralımızın son görüntüleri ise aşağıdaki ekran görüntüsünde de görebileceğiniz şeklide olmalıdır;

The final images of these two Local-in-Policy rules we have written should be as you can see in the screenshot below;

No alt text provided for this image

Tüm bu işlemlerden sonra, son kalan işimiz ise kurallarda bahsetmiş olduğumuz WAN1 interfaceimizin HTTPS erişimini aktif etmek oluyor. Bunun için ise aşağıdaki ekran görüntüsünden de görebileceğiniz gibi, “Network” menüsünden “Interfaces” kırılımına gelip “wan1” interfaceimize çift tıklayıp içine girdikten sonra “HTTPS” kutucuğunu işaretlememiz gerekecektir. HTTPS erişimimiz makalenin başlarında da belirttiğim gibi benim örneğimde 443 yerine 18443 olduğu için ofis dışından veya VPN yapmadan Firewallumun IP Adresini yazıp 18443 portundan Firewallumun arayüzüne sadece “Accept” kuralımda belirttiğim IP Adreslerimin erişmesi için gereken tüm adımları tamamlamış bulunuyorum. Bunun testini de izin verdiğim kendi IP Adresim ve izinli olmayan cep telefonumun IP Adresi üzerinden sağlayacağım. Testin ekran görüntülerini de aşağıda ayrıca paylaşıyorum. HTTPS kutucuğunun işaretlenmesi adımın ekran görüntüsü aşağıdaki şekildedir;

After all these processes, our last job is to activate the HTTPS access of our WAN1 interface, which we mentioned in the rules. For this, as you can see from the screenshot below, we will need to come to the "Interfaces" breakdown from the "Network" menu and double-click on our "wan1" interface and check the "HTTPS" box after entering it. As I mentioned at the beginning of the article, since our HTTPS access is 18443 instead of 443 in my example, I have completed all the steps required to access the interface of my Firewall from the 18443 port, only the IP Addresses that I specified in my "Accept" rule, by typing the IP Address of my Firewall from outside the office or without VPN. I will test this through my own IP Address, which I allow, and the IP Address of my non-authorized mobile phone. I also share screenshots of the test below. The screenshot of the step of checking the HTTPS box is as follows;

No alt text provided for this image

Az önce “Accept” kuralımda izin vermis olduğum IP Adresimden Firewallumun public IP Adresini yazıp 18443 portuna erişim isteği yaptığımda, adresim izinli olduğundan dolayı, karşıma Firewallumun login ekranını getiriyor aşağıdaki ekran görüntüsünde de görebileceğimiz gibi;

When I write the public IP Address of my Firewall and request access to the 18443 port from my IP Address that I have just allowed in my “Accept” rule, it brings up the login screen of my Firewall because my address is allowed. As we can see in the screenshot below;

No alt text provided for this image

İzin verdiğim IP Adreslerim dışında bir istek geldiğinde(bunun testini de izin vermediğim cep telefonumun IP Adresi üzerinden gerçekleştiriyorum) yazmış olduğum “Deny” Local-in-Policy kuralıma match edip karşıma Firewallumu getirmeyecektir. Bunun ekran görüntüsünü de aşağıda sizlerle paylaşıyorum;

When a request other than my allowed IP Addresses comes (I test this on the IP Address of my mobile phone, which I do not allow), it will match my “Deny” Local-in-Policy rule that I have written and will not bring my Firewall to me. I am sharing the screenshot of this with you below;

No alt text provided for this image

Bu uzunca sayılabilecek makaleme göz atıp sonuna kadar gelebildiyseniz umarım Local-in-Policy kullanımı hakkında biraz da olsa bilgilendirebilmişimdir ve faydalı olabilecek bir dökümantasyon oluşturabilmişimdir. Değerli vaktinizi ayırıp okuduğunuz için teşekkür ederim. Sonraki makalelerimde tekrar görüşmek üzere 😊

If you were able to take a look at this long article and come to the end, I hope I was able to inform you a bit about the use of Local-in-Policy and create a useful documentation. Thank you for taking your precious time to read. See you again in my next articles 😊

Yorumları görmek veya yorum eklemek için oturum açın

Dinçer ÖKSÜZBAKAN adlı yazarın diğer makaleleri

Diğer görüntülenenler