in Eski Blog Yazılarım

C# ile Mikrotik API’sinin Kullanımı

Bazı ufak ölçekli ağlar’da Mikrotik kullanıyoruz ve bazı ufak
ölçekli network’lerede saldırılar ve izinsiz erişimler olabiliyor.
Bunları mümkün olduğunca otomatize etmek gerekiyor ve bunun içinde
Mikrotik’in API‘sini kullanıyoruz.

Genelde
senaryomuz sunucuda çalışan belirli servislerin olaylarını (Events)
yakalayıp (Örneğin MSSQL’in AUDIT_LOGIN_FAILED event’ı) belirli değerlerin dışındaysa sisteme erişimini kapatmak
şeklinde gelişiyor. Bunun sisteme erişimi kapatmak kısmında da C# ile
mikrotik’e erişip firewall bölümünün Filter kısmına yeni bir rule
eklemek oluyor. Bunuda aşağıdaki şekilde gerçekleştiriyoruz.

Mikrotik
Wiki’sinde her dilde mikrotik’e ulaşabileceğiniz client sınıfı hazır
olarak var. C# class’ı için
http://wiki.mikrotik.com/wiki/API_in_C_Sharp adresine bakabilirsiniz.
Daha sonra aşağıdaki gibi bir kod işinizi görecektir.

        static void IpBlokla(string ip)
{
MK mikrotik = new MK("10.5.5.1"); // Mikrotik IP
if (mikrotik.Login("mikrotik_user", "password"))
{
mikrotik.Send("/ip/firewall/filter/add");
mikrotik.Send("=action=drop");
mikrotik.Send("=chain=forward");
mikrotik.Send("=dst-port=25");
mikrotik.Send("=protocol=tcp");
mikrotik.Send("=protocol=tcp");
mikrotik.Send(String.Format("=src-address={0}",ip));

mikrotik.Send(".tag=firewall", true);

foreach (string h in mikrotik.Read())
{
Console.WriteLine(h);
}
}
}

Bu
C#’kodu Firewall bölümüne drop tipinde yeni bir rule ekliyor ve TCP
protokolünün 25. portunu blokluyor. Tabi sizin vereceğiniz IP
doğrultusunda çalışıyor.

Burda önemli olan komut’u sonlandıracağınızda bir .tag belirleyip Send metodunun endsentence parametresi vermeniz.

Mikrotik API’si için geçerli bir komut oluşturmak normal terminal komutu ile aynıdır buna bir örnek vermek gerekirse;

Terminal için kural

/ip firewall filter add action=drop chain=forward disabled=no dst-port=8911 in-interface=Local protocol=tcp

API için kural

/ip/firewall/filter/add =action=drop =chain=forward =disabled=no =dst-port=8911 =in-interface=Local =protocol=tcp

API’de oluşturabileceğinzi komutların terminalden tek farkı boşluklar
yerine / (Slash) ve özelliklerin başınada = (Eşittir) işareti koymanız.

Mikrotik’in bu özelliğini kullanarak istediğiniz kuralı (Lisansınızın
Level 4 ve üzeri olması gerekiyor) API ile oluşturup gönderebilir ve
otomatize edebilirsiniz.

Son olarak hazırladığımı C# projesini aşağıdan download edebilrisiniz.

Download MkClient_Source.rar