Tacacs+ Sunucusunun İşlevi, Kurulumu ve Konfigürasyonu

Merhabalar herkese,

Oldukça uzun bir yazıyla karşınızdayım. Aslında 2-3 parçada eklenebilecek bir yazı ancak dökümanın tek bir yerde toplanması açısından bölmedim ve komple her şeyi burada anlattım 🙂 Buyrun efendim.

Tacacs (Terminal Access Controller Access Control System), radius benzeri bir kimlik doğrulama ve yetkilendirme sunucusudur. Cisco systems tarafından geliştirilip bugünkü haline getirilmiştir. Radius’tan farklı olarak yetkilendirme ve kimlik doğrulama işlemi fonksiyonlarını birbirinden ayırmıştır. AAA protokolü ile birlikte çalışır. Tacacs TCP 49. Portu kullanır. Tacacs yardımıyla bir kullanıcı adı ve şifre oluşturulup cihazlara uzaktan bağlantı bu kullanıcı adı ve şifrelerle sağlanabilir. Aynı zamanda yetkilendirme ile her kullanıcıya ayrı yetkiler verilebilir. Kullanıcı adı ve şifreyi kendi  databasei içerisinde tutar. Sizlere CentOS makinaya adım adım tacacs nasıl kurulur ve yapılandırılır anlatacağım.

Kurulum ve yapılandırma kısmını birbirinden ayıracağım öncelikli olarak. Kurulum aşamasında yapılması gerekenleri sizlere göstereceğim. Ardından da yapılandırma işi de iki kısımdan oluşuyor. Network cihazları kısmı ve server kısmı olarak. Elimden geldiğince anlaşılır şekilde anlatmaya çalışacağım.

Kurulum Aşaması

Öncelikli olarak söylemem gerekir ki, sanırım artık linux sunucular için yeni sürüm çıkmamakta ve kurulum dosyasını bulmakta oldukça güçlük çektim. ftp://ftp.shrubbery.net/pub/tac_plus sayfasında tar(zip)lanmış şekilde bulunmakta. Ancak oradan indirdiğimiz tac_plus dosyamız sunucumuzda service olarak çalışmamakta ve service olarak çalışmadığından dolayı gereken işlemleri yapmakta zorlanmaktayız. Dolayısıyla biraz daha araştırdıktan sonra rpm dosyası olarak bulduğum tac_plus sayesinde kurulum işlemi oldukça kolaylaştı.

Biraz rpm’den bahsedelim. Rpm bir paket management tool’udur. Rpm windowstaki installer lar gibidir. Rpm CentOS ve RedHat versiyonlarda çalışır. Ubuntu ve Fedora’da çalışmaz.

Rpm dosyasını google’da “rpm tac_plus” şeklinde aratınca ilk sayfada çıkan rpmfind.net sayfasından kullandığımız linux sürümüne göre rpm dosyaları bulunmakta. Ancak burada çıkan rpm’ler de her sürümün her versiyonunda çalışmayabiliyor. Örneğin; “tac_plus-4.0.4.26-1.el6.nux.src” rpm i yalnızca el6 release linuxlarda çalışabilir. Yani CentOS 6.0 ve sonraki sürümlerinde ya da rethat ler için de aynı şekilde el6 sürümünde çalışabilir. Dikkat edilmesi gereken bir diğer nokta da x86_64 ya da i386, i686 sürümünde olup olmadıklarıdır. Yani makinanız 32 bitse, i386 ya da i686; 64 bit ise x86_64 olan rpm leri kullanabilirsiniz. “tac_plus-4.0.4.26-1.el6.nux.i686” mesela benim kullandığım rpm ismi bu şekildedir. Rpm dosyasını indirirken yukarıda ismini yazdığım iki rpm dosyasını da indirmeniz gerekiyor. Biri src yani source dosyası, diğeri de esas kurulumu yapan bin dosyasıdır. Bu iki dosyayı birlikte “wget” komutuyla indirebiliriz. Resimde görülebilir dosyalar.

Dosyaları indirdikten sonra rpm aracılığıyla kurabilmek için birkaç yapılandırma daha yapmamız gerekmekte. Öncelikli olarak mock u indirmemiz gerekiyor. “yum install mock” ile gereken indirme işlemini yapabilirizi. Ardından da bu mockbuild eklentisini kullanabilmek için bizden bir kullanıcı eklememizi istiyor. Onu da şu şekilde yapabiliyoruz: “useradd -s /sbin/nologin mockbuild”

Ardından rpm ile kurulum işlemine başlayabilecek duruma gelebiliyoruz. Kurulum kısmında orijinal haliyle işletmemiz gereken komut şudur: “rpm –ivh <rpm dosyasının ismi>”. Ancak sha şifreleme algoritmalarından dolayı md5 olarak eğer hash lenmediyse bu rpm dosyası hata verebiliyor. Öyle bir hata alındığında işletilmesi gereken komut şudur: “rpm –ivh –nosignature <rpm dosyasının ismi>”. Burada dikkat edilmesi gereken kısım şu: önce src rpm i ardından bin olan rpm çıkartılmalıdır. İşlemin başarıyla tamamlanıp tamamlanmadığını anlamak için “locate tac_plus” ya da “service tac_plus restart” komutlarını kullanabilirsiniz. Service restart dediğinizde yeşil yeşil OK yazılarını görüyorsanız başarıyla işlem tamamlanmış demektir 🙂

Default’ta rpm ile kurulum sonucunda dosyalar /etc altına atılıyor. Tacacs ın en önemli dosyası, conf dosyası; yani tac_plus.conf dosyasıdır. Tac_plus.conf ile ilgili neler yapabileceğinizi anlayabilmek ve öğrenebilmek açısından man tac_plus.conf dosyası size yardımcı olacaktır. Kurulumumuz başarıyla tamamlanmıştır. Artık konfigürasyon kısmına geçebiliriz.

Konfigürasyon Aşaması

Konfigürasyon Aşamasını da aslında temelde ikiye bölmek gerektiğini düşünüyorum. Dolayısıyla size öncelikli olarak sadece server’da yapılan ayarlamaları göstereceğim.

Kurulumumuzun başarılı olup olmadığını anlamak için bir de şu komutu çalıştırmamız faydalı olacaktır: “netstat –na | grep 49”

Komut çıktımız resimdeki gibiyse tac_plus servisimiz düzgün bir şekilde çalışıyor demektir. Dolayısıyla konfigürasyon kısmına başlayabiliriz. Tac_plus konfigürasyonunda tek bir dosya üzerinde oynama yapıyoruz: “tac_plus.conf”. Tac_plus servisimiz çalışırken tac_plus.conf dosyasını okuyarak çalışır.

Biraz tacacs sunucusunun işlevlerinden bahsetmemiz gerekebilir. Tacacs sayesinde, birçok kullanıcı oluşturulup onlara farklı yetkilendirmeler verilebiliyor demiştik. Sadece belirli komutların çalıştırılabileceği, sadece belirli kullanıcıların login olabileceği, hem login hem de enable şifrelerini sunucudan çekebilmeyi sağlayabiliyoruz. Kullanıcı adı ve şifrelerini bir dosyadan çektirebiliyoruz. Acl tanımlayarak yalnızca belirli ip lerin cihazlara erişmelerini sağlayabiliyoruz. Belirli protokoller için tanımlamalar, kısıtlamalar yapabiliyoruz. Aslında yapabildiğimiz şeyler çok geniş. Ama ben yalnızca bir kısmını kullanacağım bu özelliklerin 🙂

Tac_plus.conf dosyasının çıktısı şu şekildedir:

Bu rpm den gelen tac_plus.conf dosyasıdır. Bu dosyayı dilediğimiz şekilde değiştirebiliyoruz. Ancak regex lere ve yapıya dikkat etmemiz gerekiyor.

Öncelikli olarak cihaz ile bağlantıyı kurabilmesi açısından bir key oluşturmamız gerekiyor. Bu key ile birlikte veriler encrypt edilip yollanıyor karşı tarafa. Cihaz ve server daki key lerin uyuşması gerekiyor. Ardından bir log dosyası oluşturabilmek için “accounting file = <dosyanın yolu>” ekleyebiliriz. Burada tacacs ile ilgili loglar düşüyor. Artık esas amacımız olan yetkilendirme yapma kısmına geçebiliriz. Kullanıcı oluşturma kısmıyla ilgili olan kısmı konfigürasyon parçası olarak ele alalım.

user = test  {

default service = deny

member = USERS

}

Bu parçada yaptığımız şeyi anlatmak gerekirse; kullanıcı ismimiz test, default service kısmı ise verdiğimiz yetkiyi anlatıyor. Yani, default’ta hiçbir komutu çalıştırabilecek durumda değil bu kullanıcı. Member kısmında oluşturduğumuz gruba dahil edebiliyoruz. Küme parantezi içerisinde yazmamız gerekiyor bütün ayarları. Kullanıcıların ayarlarını yaparken bu konsepte uymamız gerekmekte. Yani kullanıcının adını yazdıktan sonra küme parantezi ile ayarları yazıyoruz.

group = USERS {

default service = deny

login = des “BAzgBuk4yt7HQ”

enable = des  “AT2Kk.D7k/9kA”

service = exec {

priv-lvl = 0

}

cmd = show {

permit .*

}

}

Burada önce grup ismi yazıldıktan sonra küme parantezi içerisine ayarlar giriliyor, yine aynı şekilde. Default service kullanıcı ayarları kısmında yapılma mantığıyla aynı. İki tarafta da belirtiyor olmamızın farklı bir etkisi yok, tek tarafta da belirtebilirdik. Login ve enable şifrelerini de gördüğünüz şekilde ayarlayabiliyoruz. Des diyerek hashli gönderiyoruz şifreyi. Eğer istersek cleartext şeklinde gönderebiliriz şifremizi. Onun için de şöyle bir şey yazmamız gerekir: ‘login = cleartext “test” ‘. Aynı zamanda kullanıcı isimlerinin tutulduğu bir dosyadan çekilmesini istiyorsak da şöyle bir ayarlama yapabiliriz: ‘login = file /etc/tacacs/kul_adi’. Ancak dosyadan çekebilmek için dosya başlarında şunu yazmamız gerekiyor: “default authentication = file /etc/tacacs/kul_adi” . Service exec diyerek switchte exec modda vereceğimiz privilege level ı belirleyebiliyoruz. Burada exec ve shell olarak iki farklı seviyede komutlar mevcut ve burada vereceğimiz priv-lvl ile o komutların çalışmalarını yetkilendirebiliyoruz. Priv-lvl 0 demek yetkisiz, priv-lvl 15 demek en yetkili anlamındadır. Ardından komut komut izin verebileceğimizi bildiren cmd parçası var. Cmd altında istediğimiz komutlara ve onun alt komutlarına izin verebiliyoruz. Alt komuttan kastım şudur: mesela komutumuz “show” komutu, biz sadece “show running-config” e izin verip diğerlerini engelleyebiliriz. Alt komutumuz burada running-config dir. Bu şekilde çeşitli konfigürasyonlar ve çeşitli komut parçaları kullanarak çeşitlendirebiliyoruz server ımızı. Cmd altında dikkat etmemiz gereken şey regular expression dır. Çünkü cmd altını okurken servisimiz, regular expression uyumlu olarak okuyor. Yani her şeye izin vermek istiyorsak, permit .* dememiz şart. Aksi takdirde çalıştırılabilir tacacs ın dosyası hata veriyor. Burada kendi yapılandırdığım bir tac_plus.conf dosyası çıktısını görebilirsiniz:

Bu konfigürasyonla amacım /etc/tacacs/admin.passwd altındaki kullanıcı adı ve şifrelerden kimlik denetimini sağlamak. Ardından da admin ve test olarak oluşturduğum iki grup ile yetkilendirme yapmak. Admin grubu her şeye yetkili kullanıcılardır. Her türlü şekilde login olup her türlü komutu çalıştırabilirler. Exec seviyesinde privilege-level 15 tir. Ekstradan da işimi garantiye almak için enable komutuna da izin vermişim J test grubu ile ise sınırlı yetkiye sahip kullanıcılar oluşturup onlarla kimlik denetimi yaparak login olmasını sağlamışım. Bu grup altında yalnızca enable, show running-config, exit komutlarına izin vermişim. Global configuration mode a girmelerini engellemeyi garanti etmesi açısından da tekrar configure komutunu engellemişim. Ardından da çıktıda gözükmüyor ama test isminde bir kullanıcı oluşturup cleartext olarak şifresini gönderecek şekilde yapılandırmasını yapmışım. Exec ve shell seviyesinde çalışan komutlar farklı olup priv-lvl değeri de ona göre farklılık göstermektedir. Bu akıldan çıkmasın J

Tabi bu yazdığımız komutlar network cihazları üzerinde ayarlama yapılmazsa pek bir işe yaramıyor J o açıdan da artık network cihazı tarafındaki konfigürasyonlara geçmenin tam sırası.

Öncelikli olarak şunu söylemem gerekir ki bu tarz yetkilendirme sunucuları aaa protokolü ile çalışır. AAA, authentication authorization accounting açılımına sahiptir ve isminden anlayabileceğiniz üzere bu durumlar için üretilmiş protokoldür J Cihaz üzerinde yapılması gereken ilk çalıştırılması gereken komut şudur:

Router(config)#aaa new-model

Ardından tacacs sunucusunu kullanacağımızı cihazın bilmesini sağlayan komutumuz ve kullanacağı key geliyor:

Router(config)#tacacs-server host <sunucu ip si>

Router(config)#tacacs-server key <key>

Artık cihazımız tacacs sunucusu kullanacağı yerde hangi ip ye ulaşması gerektiğini biliyor. Gerekli kimlik denetimi ve yetkilendirmeyi yapabileceği komutlar da aaa protokolü vasıtasıyla gerçekleniyor. O komutlar da şu şekilde:

Router(config)#aaa authentication login default group tacacs local

Router(config)#aaa authentication login konsol group tacacs none

Router(config)#aaa authorization commands 0 test group tacacs

Router(config)#aaa authorization commands 15 admin group tacacs

Router(config)#line vty 0 15

Router(config-line)#authorization commands 0 test

 Router(config-line)#authorization commands 15 admin

Router(config-line)#authorization exec 15 admin

Router(config-line)#authorization exec 0 test

Router(config-line)#login authentication default

Router(config-line)#exit

Router(config)#line console 0

Router(config-line)#login authentication konsol

Burada yaptıklarımızı kısaca özetlemek gerekirse; new-model diyerek yeni komutları desteklemesini sağladık cihazımızın. Ardından authentication için method oluşturduk. Bu methodlardan ilki default olan. Terminal bağlantılarımızda default loginimiz tacacs ile yapılacak. Yani tacacs taki kullanıcı adı ve şifrelerimiz önemli, oldu ki tacacs sunucus ile bağlantımızda sıkıntı oluştu, local databasedeki kullanıcı adı ve şifreyi kullanacak. Konsol methodumuz ise, console bağlantısında kullanılacak ve eğer ki tacacs bağlantısı koparsa, hiç şifre kullanmadan enable kısmına geçecek. Hızlı bir şekilde müdahale edebilmemiz için bu şekilde bir yapılandırma söz konusu. Ardından yetkilendirme kısmındaki ayarlara göz gezdirelim. Aaa altında commands yazarsak eğer, exec moddaki komutlar için yetkilendirme sağlamış oluruz. Aynı zamanda burada bir de privilege level vermemiz gerekiyor. Eğer ki yazdığımız method ile bağlantı sağlanırsa o privilege level altında bulunuyor ve komutlarımız bu privilege level ile çalışıyor. Yani yetki vermek istiyorsak 15, istemiyorsak 0 yazmamız gerekiyor. Aynı zamanda bu methodların çalışabilmesi için line altına da gereken komutları girmemiz gerekiyor. burada önemli olan privilege level lar. Yazılan method isimleri farklı da olabilir. Aaa authorization altında kullanılabilecek birçok mod mevcut. Bizi ilgilendiren kısım yalnızca commands kısmı olduğundan o kısmı anlattım.

Basit bir şekilde tacacs kurulumunu elimden geldiğince anlatmaya çalıştım. Daha ayrıntılı konfigürasyonları ileride deneyimleyip tecrübelerimi paylaşacağım.

Görüşmek üzere!

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir