Microsoft ISA yı neden kullanırlar bilmiyorum. Belki kolay yönetiliyordur. Her neyse. Ama şöyle bir gerçek var microsoft ürünleri active directory gruplarının ne olduğunu şıppadan anlıyor olmalı. Peki bunu ntlm authentication kullanan Squid ile yapmak istersek nasıl yapabiliriz? Olayı daha da somutlaştırmak gerekiyorsa active directory deki "xxx" ve "yyy" grubu internete 10:30 ve 14:30 arası çıkabilsin, diğerleri istediği gibi çıkabilsin.
İlk olarak squid'in ACL'lerinin işin içine gireceğini hemen düşünebiliriz. Doğrudur girecek. Squid de iki tane ACL vardır. Bir tane normal acl olup kafanıza göre yazdığınız acl dir. Diğeri ise bir script veya bir programın outputunun sonucunda calışan external_acl lerdir.
Active directoryden kullanıcıların sorgularının yapılması gerekmektedir. External_Acl ye input olarak verilen LOGIN değerlerinin active directoryden sorgusu yapılıp eğer o kişi istenilen gruptaysa squide OK değilse ERR dönmesi gerekir.
Squid microsoft domainde olmalıdır, zaten ntlm bunu gerektirir. Bir de elimizde güçlü bir microsoft user olmalıdır. Bu usera jedi diyelim. jedi userimiz için kerberos ticket alalım. (Kerberos olayı super bir seydir)
[root@msows219 ~]# kinit jedi@example.com.tr
Bu ticket ile artık active directory sorgularımızı iki de bir şifre girmek zorunda kalmadan yapabileceğiz.
Domaindeki adı ab105560 olan kullanıcıyı sorgulayalım.
[root@msows219 ~]# net ads search sAMAccountName=ab105560
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Padawan Padawan 105560
sn: Padawan
description: AB105560
givenName: Padawan
distinguishedName: CN=Padawan Padawan 105560,OU=securtydeneme,OU=BilgiIslemPersoneli,OU=oz
el grup,OU=adalet,OU=01_AB_KULLANICI,DC=example,DC=com,DC=tr
displayName: Padawan Padawan 105560
memberOf: CN=xxx,DC=example,DC=com,DC=tr
memberOf: CN=kafanagore,DC=example,DC=com,DC=tr
name: Padawan Padawan 105560
sAMAccountName: AB105560
gibi bir sonuç döner. Fazlalıkları sildiğim bu ldap resultta görüldüğü üzere memberOf attribute ile kişinin hangi ldap dalında olduğu görülebilir. Scriptimiz bunu sorgulamalıdır. Bu member of attributetunun döndüğü değere göre OK veya ERRor dönmelidir.
Hemen bir script yazalım bunun için:
#!/bin/sh
while read login ; do
uid=$(echo $login cut -d% -f2sed -e 's/5c//g')
ayrac=$(net ads search "(&(sAMAccountName=$uid)((memberOf=CN=xxx,DC=example,DC=com,DC=tr)(memberOf=CN=yyy,DC=example,DC=com,DC=tr)))" mail awk {'print $2'})
if [[ $ayrac -eq "1" ]]
then
echo OK
else
echo ERR
fi
done
Bu scripti squid.conf icinden kullanılmasını sağlayalım
external_acl_type ldap_group %LOGIN /ana/grupbelirleme.sh
acl izinliler external ldap_group
Bu şekilde bu scriptin kullanılmasını sağlayacağız ve scripte input olarak ntlm den elde edilen LOGIN değeri giriliyor ve kisi xxx veya yyy grubuna üyeyse OK dönüyor else ERR.
Zaman kriteri için
acl zaman time 10:30-14:30
http_access allow zaman izinliler
diyerekten ACL'yi kullanıma acıyoruz. Bu sayede active directory de xxx ve yyy grubuna üye kişiler saat 10:30-14:30 arasında interneti kullanacaklardır. Artık elimizde active directoryden kullanıcıların sorgusunu yapıp belli grupları sorgulayan ve bu sorgunun sonucuna göre internete çıkışlara izin veren bir proxy'imiz var.
Yazının başında kerberos ticket tan bahsetmiştik. Bu ticket ile sorgularımızı yaptık. Eğer ticket ile değilde her sorguda sifre göndermek istersek net ads search satırlarına -Ujedi%password ün eklenmesi gerekir. Ama bu benim önerdiğim bir sey degildir. Bunun yerine keytab dosyası oluşturulup bu ticket zamanının doluşundan önce yenilenip kinit komutuyla şifre girmeden kullanıma açılabilir. Bunun için microsoftculardan jedi kullanıcısı için keytab dosyasını oluşturmaları istenir. Tabiki bunu oluşturmaları için hangi komutu vermeleri gerektiğini söylemeniz gerekmektedir.
ktpass -princ nssldap/jedi@EXAMPLE.COM.TR -mapuser jedi@EXAMPLE.COM.TR -pass * -out jedi.keytab
ve bu keytab dosyasını alıp linuxe yuklersiniz. Bu dosyanın ne kadar önemli olduğunu söylemeye gerek yoktur. sakın 777 lemeyin dosyayı.
[root@msows219 ~]# kinit -k nssldap/jedi -c /tmp/krb5cc_23
ile uid si 23 olan squid userına ticket verilir.
[root@msows219 ~]# chown squid.squid /tmp/krb5cc_23
ile ticket squid userinin kullanımına sunulur. Tabiki bu işlemi squidin cronuna koyacagınız bir scriptle de yapabilirdiniz. Ticket'in süresi dolmadan bu userin ticketi yenilenip kullanıma devam edililir. Bu yenileme işlemi sırasında ps -ef grep "net ads search" ile active directory de search eden process ler kill edilip yeni ticketi kullanmaları sağlanabilir.
Yukarıdaki işlemler sonucunda Squid proxy yazılımı ile microsoft kullanıcıları active directory ile iletişime geçilip sorgulandı ve belli bir zaman kriterine göre internet çıkışları için izin verildi.
Bakılması gereken linkler:
http://www.squid-cache.org/
http://web.mit.edu/Kerberos/
http://gentoo-wiki.com/HOWTO_Adding_a_Samba_Server_into_an_existing_AD_Domain#Linux_client_configuration
Wednesday, June 27, 2007
Ejabberd Kurulumu:
Günümüzde şirket içi haberleşmelerde mesajlaşma programlarının kullanılması yaygın bir hal almıştır. Tabiki bir yerden sonra çalışanların paso msn üstünden chat yapmaya başladığını görüp acaba ne zaman çalışmaya başlayacaklar diye düşünenler için sadece şirket içi mesajlaşmada kullanılabilecek bir mesajlaşma programı önem arzetmektedir. Microsoft tarafından Live Sunucu olarak satılan bu hizmet çok geniş özellikleri barındırmakla beraber her client için istenilen yıllık 30$ civarındaki cal lisans bedeli ile illallah dedirtmektedir. Zaten bir çok özelliğini de kullanmayacağınızı garanti edebilirim. Bunun yerine open source protokol olan jabber yapısı üstüne kurulu olan ejabberd yazılımını önerebilirim. Bizzat test edip onayladığım yazılım, bir çok şirket için tatmin edici sonuçlar verecektir. Cluster çalışacak şekilde yapılandırabildiğiniz bu yazılım performans olarak çok iyi sonuclar vermektedir. Password backend olarak bir çok yapıyı desteklemektedir. Mesela mail sunucusunda kullanıcı authenticationında LDAP yapısını kullanıyorsanız ejabberd ile bu yapıyı kullanmaya devam edip kullanıcılarınızın mesajlaşma programı için mail şifrelerini kullanmalarını sağlayabilirsiniz. 140 gün önce işletime aldığım load balancer arkasındaki cluster yapıdaki iki tane ejabberd sunucusu toplamda 6000 civarı anlık kullanıcıya hizmet vermektedirler.
Yukarıdaki yapının nasıl kurulduğuna ilişkin yaptığım çalışmanın dosyasını ise http://funkypunkydrunky.googlepages.com/ejabberd.pdf linkten bulabilirsiniz.