Mikrotik kullanıp yöneten kişiler bilirler. Paketler üzerinde işlem yapıp yasaklama, izin verme gibi kurallar yazmak gerekebilir. Mikrotik bu anlamda bayağı esnek bir yapıya sahiptir. İlk kullanmaya başlayanlar genelde kural yazarken zorlanabilirler. Eğer daha önce UTM yönetimi yaptı iseniz eminim karşınıza Mikrotik gelince yapısı çok farklı gelecektir. Bu yazıda Mikrotik tarafında Filtre Kurallarını ele almayı hedefliyorum. Yapı çok esnek olduğu için bazı durumlara değinmeyip temel kuralların yazılmasını göstereceğim.
Güvenlik duvarları üzerinden geçen paketleri filtreye tabi tutarak veri akışını yönetebilir. Gerekli paketleri engelleyebilir ya da izin verebilirler. Mikrotik bu işlemleri ve daha fazlasını yapabilecek yetenektedir. Geçen paketleri belirlediğimiz farklı parametrelere göre değerlendirebilir. Her cihazda olduğu gibi tanımlanan paketler yukarıdan aşağıya doğru işletilir.
Cihaz üzerinde tanımlı Networkler arasında güvenlik amaçlı denetme yapılması ağınızı en sağlık ve güvenli şekilde kullanmanızı sağlayacaktır.
Filtre kuralları bir Zincir (Chain) yapısında çalışırlar. Mikrotik tarafında zincirlerde işlenen bir sıra vardır.(input->forward->output). Kendi zincir yapınızı oluşturabileceğiniz gibi mevcut hazır yapıları da kullanabilirsin. Ben kural yazarken her iki durumu da kullanıyorum.
İnterface
Cihazın üzerinde fiziksel yer alan ya da sanal olarak oluşturulmuş data giriş ve çıkışı yapılabilen portlardır. Biz yazımızda interface için arayüz kelimesini kullanacağız.
Chain Türleri
Yeni bir kural oluşturduğunuzda zincir seçiminde aşağıdaki seçenekler yer alır.
Forward
Cihaz üzerinden geçen paketleri yakalayan zincirdir. İşlem yapılacak paketler cihaz üzerinden hedefe doğru geçip giderse bu zincire sahip kurallar çalıştırılır. Örneğin cihaz üzerinden geçip pppoe-out1 arayüz tarafına giden paketlerde QUIC (UDP 443) protokolünü engellemek istersek “Forward” zincirini kullanmamız gerekmektedir.
|
/ip firewall filter
add action=drop chain=forward comment=“QUIC Yasakla” dst–port=443 out–interface=pppoe–out1 protocol=udp
|
Yukarıdaki kuralda cihaza gelip geçen trafikte çıkış arayüzü pppoe-out1 ise ve bu pakette hedef portu udp 443 ise paket direkt engellenecektir. Kabaca internet arayüzüne giden paketlerde QUIC protokolü yer alıyorsa paket engellenir.
İnput
IP adresine sahip olan bir arayüz üzerinden IP adresi ile cihaza giren paketleri yakalamak için kullanılan zincirdir.
Örneğin LOKAL arayüz üzerinden cihaza gelen DNS sorgularını engellemek istersek aşağıdaki gibi bir kural yazılması gerekir.
|
/ip firewall filter
add action=drop chain=input dst–port=53 in–interface=LOKAL protocol=udp
|
Output
Arayüz üzerinden cihazı terk edip çıkan tüm paketleri yakalamak için kullanılır. Cihazın kendisinde oluşturulan paketler sadece output zinciri ile yakalanır.
Örneğin cihazın kendi DNS sunucusunun dış DNS sorgularını yakalayıp listelemek istersek output zinciri kullanmalıyız.
|
/ip firewall filter
add action=add–dst–to–address–list address–list=DNS–SORGU–LIST address–list–timeout=10s chain=output
dst–port=53 out–interface=pppoe–out1 protocol=udp
|
Yukarıdaki kural incelediğimizde cihazın pppoe-out1 arayüzü üzerinden dışarı yapılan DNS(udp 53) sorguları yakalanıp 10 saniye boyunca DNS-SORGU-LIST listesinde tutulur. “/ip/Firewall/Address Lists” kısmından oluşturulan listeyi görebilirsiniz.
Zincir (Chain) Oluşturma
Yazının başında zincir oluşturmaktan söz etmiştim. Aslında oluşturulan zincir, standart zincirlerden ibarettir. (input, forward, output) . Bazı durumlarda fazla olan zincir kurallarını bu yöntemle sadeleştirebilirsiniz.
Örneğin pppoe-out1 arayüzünden cihaza gelen bazı TCP paketlerini engellemek istiyoruz. Aşağıdaki gibi bir kuralla bunu çözebiliriz.
|
/ip firewall filter
add action=jump chain=input in–interface=pppoe–out1 jump–target=tcp
add action=drop chain=tcp dst–port=80 protocol=tcp
add action=drop chain=tcp dst–port=23 protocol=tcp
add action=drop chain=tcp dst–port=8080 protocol=tcp
add action=drop chain=tcp dst–port=22 protocol=tcp
add action=drop chain=tcp dst–port=53 protocol=tcp
|
Gördüğünüz gibi input zinciri ile pppoe-out1 arayüzüne direkt gelen paketleri yakalayıp “jump” ile “tcp” zincirine gönderiyoruz. Eğer parametrelere uyan bir paket olursa paketi engelliyoruz.
Kural Eylemleri (Action)
Fark etti iseniz kural zincirlerini anlatmaya çalışırken örneklerde sürekli “drop” eylemi ile paketleri engelledik. Şimdi bu eylemler üzerinde duracağım. Kural yazarken istediğiniz eyleme göre farklı işler yaptırabiliriz.
Eylemler Seçenekleri
accept : Parametrelere uygun paketler kabul edilir.
add-dst-to-address-list : Parametrelere uygun paketlerdeki, hedef adresleri barındıran liste oluşturur.
add-src-to-address-list : Parametrelere uygun paketlerdeki, kaynak adresleri barındıran liste oluşturur.
drop : Parametrelere uygun paketler geri cevap verilmeden engellenir.
fasttrack connection : Paketleri filter,NAT,Queues gibi işlemlerden bypass(atlatmak) edip hızlı şekilde sonuca ulaştırır.
jump : Kullanıcı tanımlı zincirlere yönlendirmek için kullanılır.
log : Parametrelere uygun paketleri tespit edip Log mesajı üretmek için kullanılır.
passthrough : Paket kurallara uyuyorsa sayac bir artar ve sonraki” kurala geçer.(Genelde istatistik almak için kullanılır.)
reject : Parametrelere uygun paketler, geri bilgi verilerek engellenir.
return : Atlama yapıldığı yerden zincire geri gönderir.
tarpit : Gelen TCP bağlantılarını yakalar ve tutar (TCP SYN paketine SYN/ACK ile cevap verir.)
Log kutucuğu: Hangi eylemi seçerseniz seçin Action tabında Log kutucuğu yer alır. Eğer Log kutucuğu seçilirse kural işletildiği zaman sisteme Log mesajı atacaktır. Hemen altında yer alan “Log Prefix” bölümüne ne yazarsanız Log mesajının başında yer alacaktır.
Adres Listeleri ve Adresler
Parametre olarak kaynak ve hedef adres listeleri oluşturularak kurala eklenir. Adres listeleri “/ip/Firewall/Address Lists” tabından elle oluşturulabilir. Oluşturduğunuz kuralda “Advanced” tabından “Src. Address List ve Dst. Address List” kısmından seçilerek kurala eklenebilir.
Src. Address List = Kaynak Adres Listesi (Paketlerin geldiği kaynak adreslerin listesi)
Dst. Address List = Hedef adres Listesi (Paketlerin gittiği hedef adreslerinin listesi)
Eğer Liste oluşturmadan tek ip yazılacaksa “General” Tabında “Src. Address ve Dst.Address” kısmına tanımlanabilir. Ama bu kısımlara tek IP adresi yazılabilir.
Fark etti iseniz kurallarda adres tanımları ve diğer parametrelerin girildiği kutuların başlarında ufak bir kutucuk yer alıyor. Bu kısma tıklarsanız seçili hale getirilir. Bu kısım seçili ise karşısındaki girilen parametreni tam tersi geçerlidir.
Mesela Src.Address kısmına 192.168.2.3 girili ise bu kutucuk seçilirse kural 192.168.2.3 dışındaki IP ler için geçerli olur. Diğer parametrelerde de bu durum geçerlidir.
Kelime Engelleme (Content)
En sevdiğim özelliklerinden birisi kelime engelleme diyebilirim. Forward olarak yazılan bir kuralda paket içerisinde ilgili kelime yazıyorsa paketi engellebilirsiniz.
Mesela LOKAL arayüzünden gelen paketlerde “youtube, mynet, haber” kelimeleri yer alıyorsa engellemek istiyorum. Yani bir kişi bilgisayarından adreslerinde “youtube, mynet, haber” kelimelerinin içerdiği sitelere girmesini istemiyorum. Content parametresi kullanılarak ile kural yazılabilir.
Kuralın en kötü tarafı her kuralda tek kelime tanımlanmasıdır. Bunun için kendi zincirimizi oluşturup kullanabiliriz. Aşağıda bu konuya uygun kural dizisi yer almaktadır. Kelime tanımlamalarını kuralın “Advanced” tabından bulunan “content” parametresinden yapılabilir.
Örnek Content parametresinin kullanımı.
|
/ip firewall filter
add action=jump chain=forward in–interface=LOKAL jump–target=kelime
add action=drop chain=kelime content=youtube
add action=drop chain=kelime content=mynet
add action=drop chain=kelime content=haber
|
Arayüz Tanımlama (interface)
Kuralları yazarken eğer arayüz belirtilmez ise tüm gelen paketler işletilir. Bu durumdan kaçmak istersek kuralın “General” tabında bulunan “In. Interface, Out. Interface, In. Interface List, Out. Interface List” parametrelerini kullanabiliriz.
In. Interface : Giriş arayüzü
Out. Interface : Çıkış arayüzü
In. Interface List : Giriş arayüz listesi
Out. Interface List : Çıkış arayüz listesi
Örneğin kuralda sadece LOKAL arayüzden gelen paketleri işlemek istiyorsak kuralda In. Interface kısmını LOKAL olarak seçmeliyiz.
Bazı kurallarda arayüzleri seçerken hata alabilirsiniz. Kuralın yapısı uygun değilse size hata verir ve tanımlama yapmaz.
Protokol ve Port Tanımlama
Kuralları yazarken belli protokoldeki portları parametre olarak verebiliriz. İlgili kuralın “General” tabında bulunan “Protokol, Src. Port, Dst. Port, Any. Port” kısımlarında gerekli tanımlamalar yapılabilir.
Protokol : IP protokol türü seçilir. (tcp,udp,icmp..)
Src. Port : İşlenen paket içeriğindeki kaynağın port numarası verilir.(0-65535)
Dst. Port : İşlenen paket içeriğindeki hedefin port numarası verilir.(0-65535)
Any. Port: İşlenen paket içeriğindeki hem kaynak hemde hedef port numarası verilir(0-65535)
Bir yere port ile erişim sağlandığında Src. Port kendi otomatik oluşturur. Bu şekildeki uygulamalarda Src. port değişkendir. Biz genelde Src.port sabit değilse Dst. Portu kullanıyoruz.
Port konusunu örnekle pekiştirelim.
pppoe-ou1 arayüzünden dışarı ilerleyen trafikte UDP 53 portunu engelleyelim.
|
/ip firewall filter
add action=drop chain=forward dst–port=53 out–interface=pppoe–out1 protocol=udp
|
Gerekli parametreleri değiştirerek farklı kurallar yazabilirsiniz.
Bağlantı Durumları (Connection Type,State)
Kuralları yazarken bağlantıların durumuna göre işleyebiliriz. İlgili kuralın “General” Tabında bulunan “Connection Type, Connection State, Connection NAT State” özelliklerini amacımıza göre parametre olarak verebiliriz.
Connection Type : Bağlantı türü seçilir (ftp,h323,irc,pptp,quake3,sip,tftp)
Connection State :
invalid : Bir şekilde bağlantı oluşturulmamış geçersiz paketler.(Genelde engellenmesi tavsiye edilir.)
established : Mevcut çalışan bir bağlantıya ait bir paket
related : Başka bir paketin parçası olan ama başlı başına paket olmayan paketler.
new : Yeni oluşturulan bir bağlantıya ait bir paket
untracked : Bağlantı takibi RAW tablolarında atlatılmış paketler
Connection NAT State : Bağlantının Paket yönü belirtilir. İlk Yönü (Src. NAT , Dst. NAT olabilir)
Genelde aşağıdaki kuralları kullanıp cihazdaki geçersiz paketleri elemeyi tercih ediyorum.
|
/ip firewall filter
add action=accept chain=input comment=“Established,Related Kabul Et” connection–state=established,related
add action=accept chain=forward connection–state=established,related
add action=accept chain=output connection–state=established,related
add action=drop chain=input comment=“Invalid Paketleri Engelle” connection–state=invalid
add action=drop chain=forward connection–state=invalid
add action=drop chain=output connection–state=invalid
|
Yukarıdaki kuralları cihazınıza eklerseniz gelen giden tüm paketlerde geçersiz olan paketleri engelleyecektir. Tavsiyem mutlaka kullanın. İnternet trafiğiniz daha stabil çalışacaktır. Bu kurallar bütününü mutlaka diğer kuralların altına yerleştirin. Üstte kalırsa başka kuralları ezebiliyorlar.
Kaynak MAC adresi (Src. MAC Address)
Bazı kurallarda paketin kaynak MAC adresini belirtip işlem yaptırmak gerekebilir. Mesela ağınızda “00:01:02:03:04:05” adresine sahip bir cihaz varsa ve MAC adresine göre engellemek istiyorsak aşağıdaki gibi bir kural yazabiliriz.
Kuralı yazaken arayüz belirtmeniz ve “Advanced” tabından “Src.MAC Address” kısmına MAC adresi yazmalısınız.
|
/ip firewall filter
add action=drop chain=forward out–interface=pppoe–out1 src–mac–address=00:01:02:03:04:05
|
“Content” tanımlamasında olduğu gibi MAC tanımlamasında da tek Mac adresi yazılabilir. Her MAC için ya zincir oluşturmanız ya da tek tek tanımlama yapmanız gerekmektedir.
Buraya kadar Mikrotik tarafında filtre kurallarına yer verdim. Yazmadığım bir çok özellik daha mevcut. Bu yazıda en çok kullanılan özelliklere yer vermeye çalıştım. Daha detaylı bilgileri Mikrotik Wiki sayfasından ulaşabilirsiniz.
address, address list, Chain, content, dst.nat, dst.port, filter rules, fitre kuralları, forward, input, interface, jump, kurallar, mikrotik, output, pars, protokol, Src MAC Address,