Uzun zamandır hiç yazı yayınlamamışım. Biraz kendime dair birşeyler eklemek istiyorum. Bir kaç ay önce Oracle Certified Professional, Oracle Solaris 10 System
Administrator sertifikasını aldım. Toplamda iki tane eğitim almak ve akabinde alınan eğitimlerle ilgili sınavlara girmek gerekiyor. İstenirse 2011 Ağustos ayına kadar eğitimleri almadan sınavlara girilebiliyor. Oracle bu tarihten sonra sınavları alabilmek için kurslara gitmeyi şart koşuyor.
Kursları Bilginç IT'den Tahsin Hoca veriyor. Şimdiye kadarki tanıdığım en iyi eğitmenlerden biri. Super bir ders anlatış tarzı var. Eğitimler tamamlandıktan sonrası ise artık biraz çalışmaya bakıyor.
İlk sınav Oracle Solaris 10 System Administrator Certified Professional Exam, Part I. Şahsi fikrim bu sınavın ikincisine göre daha zor olduğu. Çünkü çok incik boncuk var gibime geldi. Bir sürü de ayrıntı var.
İkinci sınav Oracle Solaris 10 System Administrator Certified Professional
Exam, Part II. Bu sınav ilkine göre daha kolay. Bu sınavın curve de daha düşük.
Bence bir unixci için bu iki sınavı geçmek hiç zor olmaz. Sadece Solaris'e özgü Zone, ZFS gibi konuları iyi kavramak yeterli olur.
Eğitim alındıysa, mutlaka bu sınavlara girmek gerekiyor diye düşünüyorum. Sonuçta pahalı eğitimler ve şirketlerin bu eğitimlerin geri dönüşünü istemeleri çok normal, hem çalışma alanında hem de çalışanın kariyerinde. Sertifika işte burada devreye giriyor. Eğitim alınmıştır, üstünde birazcık çalışılmıştır. Sınavlara girilip sertifka alınmıştır.
Monday, April 25, 2011
Thursday, September 30, 2010
Monday, September 27, 2010
Bir tane email sunucusunu MX tip sorgu yapmadan doğrudan kullanıp email gondermek için sendmail üstünde bazı ayarlamalar yapmak gerekiyor.Sendmailde ayar yapılmadığı zaman submit edilmiş mail requestlerini kendi üstünde göndermeye çalışıyor. Bu yüzden relay'e açılmış email sunucusuna göndermesi gerektiğini submit.cf dosyasında değişiklik yapıp kullanması gereken email sunucusunu işaret etmek gerekiyor.
Bu yüzden
/etc/mail/cf/cf/submit.mc dosyasındaki
FEATURE(`msp', `[127.0.0.1]')dnl
satırı
FEATURE(`msp', `[10.XXX.XXX.XXX]')dnl
ile değiştirilir.
ve /etc/mail/cf/cf/ directoryisindeyken yeni konfigurasyon
m4 ../m4/cf.m4 submit.mc >submit.cf.yeni komutu ile yaratılır.
Bu dosya
cp submit.cf.yeni /etc/mail/submit.cf ile yerine kopyalanır.
Artık sendmail tüm gönderilmeye çalışılan emailleri tanımlanmış mail sunucusunu kullanarak göndermeye çalışır.
Friday, October 16, 2009
Çok ilginç bir durum. Turkcell o kadar reklam yaptı her yöne 1200 dakika bedava dedi şimdi bir sene geçmeden tarifeyi değiştirdi. 500 dakika turkcell, 500 dakika diger operator, 500 dakika sabit hat (sabit hat arayan var mı aramızda?)arayanlar ücretsiz konuşuyor artık. Bu tarifeye insanlar diğer operatörleri rahat aramak için geçmişti halnuki. Türkiye'de tüketiciyi kandırmak sanki ödüllendiriliyor devlet tarafından.
Bu ülkede Sanayi ve Ticaret bakanlığı ne işe yarar? Tarifeyi değiştirme yetkisini, tüketicinin aleyhine kullanmasına nasıl izin verilir? Artık bakanlık bu şekilde yalan dolan reklamlarla, üç aylık tarifelerle müşteri toplamaya izin verirse, aha yazıyorum buraya bu işin kokusu çıkar. Bu arada Turkcell in oyununa da gelip de iyiki avea hattımı değiştirmemişim. Dört beş ay göreceli olarak avea hattıma Turkcell in tarifesine göre daha fazla para ödemek, salak yerine konmaktan bin kat iyi oldu.
Saturday, October 10, 2009
Bu seneki tiyatro sezonun açtık ne yazıkki. Oyunun adı Gizler Çarşısı'ydı. Acaip bir zaman kaybıydı. İlk perdede salonun tamamı doluyken ikinci perdede yer yer boşluklar oldu. Millet gözünü açmış. Bastı gitti. Biz çok ümitvar olduğumuz için salonda kaldık. Mesela yanımızdaki çift ikinci yarıda yoktu. Uzun zamandır görmeyip orada rastladığım arkadaşlar da ilk perde sonunda arada, daha fazla dayanamayacağız diye gittiler. Zaten ikinci perde birinci perdeden de beterdi. En azından ilk perde de çarşı sahnesi vardı. Koca oyun boyunca sadece bir sahne. Bravo!!! Bir de millet alkışladı sonunda. Neyi alkışlıyor bu insanlar dedim kendi kendime. Oyun kötü, sunum kötü ama alkış gırla. Aslında çok da fazla değildi birçok oyuna göre ama o arada ayağa kalkan tipler yok mu acaip sinir etti. Belki de akrabaları vardı oyunda. O yüzden ayağa kalkmış olabilirler, neyseki azınlıktılar ama çıkışta bu ankara halkına müstehak dedim. Önüne ne konulursa alkışlıyorlar. Bir kızın dışarı çıkınca "Ohh be özgürlük" dediğini duyunca güldüm. Ne işkenceydi ama helal olsun adamlar acı çektirdiler oyun boyunca.
Gönderen
funkypunkydrunky
zaman:
12:55 PM
0
yorum
Etiketler: Gizli bahçe, tiyatro
Wednesday, October 07, 2009
Şirket networkunde, firewall ve proxy arkasında yer alan kullanıcılar için herhangi bir linuxe ssh bağlantısı yapmak imkansız gibi birşeydir.Şimdi her bağlantı bitti de ssh mı kullanmak kaldı denilebilir ama ssh gibisi var mı? Çoğu zaman can sıkıcı engellemeler yapan proxy, firewall u by pass etme çözümünü de kendi içinde sunar. Proxy ilk defa özgürlüğe açılan kapı olacak. Reçete çok basit. Bir tane CNTLM, bir tane proxytunnel ve pek tabiki putty.
1) Ev networku ve pcsinde yapılması gerekenler:
a)İlk önce ADSL için statik ip alınır TTNET'ten.
b)Ev linux'unun SSH'in port 80 den dinlemesini sağlamak gerekir. Bunun için vim /etc/ssh/sshd_config komutu ile ayar dosyası edit edilip
bu dosyaya "Port 80" satırı eklenir.
ssh servisi restart edilir ve adsl modem üstünden port forwarding etkin hale getirilip statik ipnin 80. portuna gelen istekler ev linux'une yonlendirilir.
Not: Kesinlikle login hakkı olan hic bir kullanıcı için basit şifre kullanmayın, yoksa geçmiş yazılarda okuyabilieceginiz üzere linux'unuz zombie yapılabilir. SSH servisini dısarıdan erişime açmak dikkat edilecek bir konudur.
2) İş yeri bilgisayarında yapılması gerekenler:
a)CNTLM ve proxytunnel programları indirilir.
b)Cntlm kurmak için setup.bat kullanılırsa program files'in altına dosyalar cntlm klasorune atılır. Bu directorye girilip cntlm.ini dosyasında
Username KullanıcıAdım
Domain LoginOlurkenKullanılanDomaınAdı
Password Sifre
Proxy IsYeriProxyIPsı:ProxyninCalistigiPort
yukarıdaki satırlara uygun değişiklikler yapılır.
Cntlm 'i kullanmamızın sebebi proxytunnel programının ntlm authentication kullanan proxylerde sıkıntı yaşamasıdır. CNTLM sayesinde proxy sanki authentication istemeyen bir proxy gibi olacak.
c)proxytunnel.exe -a 22 -p 127.0.0.1:3128 -d evLinuxunstatikIPsi:80
komutu ile localhostta baglantı bekleyen CNTML uzerinden ev linux'unun 80 inci protuna bağlandık ve bu bağlantıyı localhostta port 22 ye aktardık. Artık localhosttaki port 22 ye gelen her baglnatı ev linuxundeki ssh servisine gidecek.
d) putty ile 127.0.0.1 e ssh baglantısını yaparsanız biraz bekledikten sonra sshin geldiğini göreceksiniz.
Bu yöntem ile daha değişik actionlar da yapılabilir. Tüm proxy kısıtlamasını bitirebilirsiniz. Şirket proxysisini kullanarak ev proxyinize bağlanıp kafanıza göre internette surf yapabilirsiniz,hem de şifreli şekilde. Bir proxy'iyi by pass etmek aslında bu kadar kolaydır fakat abuse edilebilecek bir konu olabileceği için proxy kurallarını by pass etmenin nasıl yapılabileceği konusunda ayrıntılara girmeyeceğim.
Not: Bu şekilde proxy ve firewallu by pass etmek kurum kuralları ile ters düşmenize sebep olabilir.
Wednesday, September 30, 2009
Sene 2005 te nette bir yazı okumuştum. Adamın birisi güvenliğinden sorumlu olduğu şirketin networkune DOS attack yapan elemanların peşine düşüyordu. Heyecan ve aksiyon dolu olaylardan:P sonra onları bir IRC odasında buluyordu. Sonunu hatırlamıyorum ama bir benzeri benim de başıma geldi. Dikkatsizliğimden ötürü ev linux'um zombie haline getirmişler. Hatta bir çok eleman sisteme login olmuş değişik destinasyonlardan. Tek sebebi test için açtığım bir kullanıcının şifresinin basit olmasıydı. 123456 gibi basit bir şifre verince port taraması yapan elemanlar 22. portu açık görüp dictionary attack yapmışlar. İşin garibi dünyanın heryerinden bu attackları alan bilgisayarım en sonunda makedon elamanlar tarafından o kullanıcının şifresi değiştirilerek bir nebze korunmuş:)Peki bu olay nasıl çıktı ve ben nasıl trace ettim.
Arada herkes gibi last yaptım ve admin kullanıcısının değişik iplerden geldiğini gördüm. O sırada bu admin kullanıcısını kim nasıl oluşturmuş falan diye de bayağı kafa patlattım. Hikayenin ileriki safasında kendimin açtığımı neyseki hatırladım. Admini görünce bu kullanıcıya hemen switchledim ve historysine baktığımda alakasız komutlar gördüm. wget ile freewebtown.com adresinde bir şeyler indirildiğini görünce acaip sinirlendim. Bu adres hastalıklı bir yer. Masum görüntüsünün altında keylogger, hack yazılımlarını barındırıyor. 2006 yılında TC Kimlik no girip soy ağacını çıkaracağını iddia eden keylogger programının bilgileri toplayıp ftplediği yerde bu adresti. Nedense zararlı ne varsa burada barındıyor insanlar.
Ele geçirilen kullanıcının sahip olduğu tüm dosyaları diskte arattim. Gizli olarak "/dev/shm/ /admin/" directory haricinde başka bir yerde dosyası yoktu. Temizledim. Home'daki dosyalara bakmaya başladım. Ascii dosyalarının birinde bir IRC sunucusuna bağlanmak için girilmiş bilgileri buldum. Netstatlayınca uzaktaki bir sunucunun 6667 portuna bağlantının olduğunu gördüm. Dosyanın içeriğindeki bilgilere göre Mirc'imi çalıştırıp "oğlum siz ne ayaksınız" demek için pc'min bağlı olduğu chat odasına girdim. Linux'um bir garip isimle orada duruyordu. Whois yapınca ne yalan söyleyeyim içim cız etti. Statik ip'mi gördüm, gözlerim doldu. Alo kimse var mı diye bağırırken elemanın birisi çıktı, ne var bilader der gibi konuştu. Benim bilgisayarımı bot yapmışssınız deyip terbiyemi bozdum. Klasik bir lamer gülüşü ile benim bilgisayardan bana mesaj gönderdi. Yine sinir stress oldum. Kendi linux'umde kill ettim procesi tekrar spawn edip baglanıyordu. Killeri oldum processinin yavrum diyerekten, ben de rm -rf diyerekten admin kullanıcısının home'u nu temizledim, kullanıcıyı kaldırdım ve linuxumu o kötü hayattan çekip çıkardım. Sonra her nedense ingilizcesi dandik eleman ingilizce bilen bir arkadaşını çağırdı. Adam ilk olarak biz kimseye saldırmıyoruz dedi. Sadece eğlenmek için bot yapıyoruz falan filan dedi. Asıl merak ettiğim olay nasıl girdiniz pc me dedim. Zaten arkanızda çok iz bırakmışsınız bulmak kolay oldu dedim. Geldikleri ipleri gösterdim. Nasıl dictionary attack yaptıklarını anlattı. Tembellikten arkalarında bu kadar iz bıraktıklarından bahsetti,i şimdiye kadar kimsenin onları arayıp bulmadığından bahsetti. Bu arada öbür lamer yarı türkce yarı bilmem ne ce mesaj atıp sempatiklik yapıyordu. Bro demeye başladık bir birimize, tatlıya bağladık, öpüştük barıştık. Bana hack programları verdi. Bir kaç örnek gösterdi. Neyse abbas yolcu yarın iş var dedim. Özetleyecek olursam Root'a geçememişlerdi.Benim salaklığımın bir sonucu olarak linuxum kötü yola düşmüştü. Aldığım ders: Basit bir şifre verilmemeli hiç bir kullanıcıya. Anlamadığım nokta, chat odasındaki 50 60 tane bot pc ile ne yaptıklarıydı:)
Friday, September 04, 2009
Djangoyu anlatmak için bazı klasik laflar vardır. 10 dakikada blog, 30 dakikada wiki,55 dakikada google yazabileceğiniz framework sloganlı videolar var nette.Aslinda bu şekilde tek reklamı yapılan Django degil, diger frameworklere ait videoları da izleyebilirsiniz. Bu strateji işe yarayan bir yöntem açıkcası. Bu şekilde aldanan bir insan olarak:), pek tabiki çok memnunum bu durumdan, 10 dakika da olmasa da en sonunda geçmiş yazılarımda da belirttiğim trip uygulamasını bitirdim. Django ile yazılmış bu uygulamayı beş aylık bir sürede bitirdim. 10 dakika nere beş ay nere? Planlaması, tasarımı ve kodlamasını tek başıma yapmam belki de bu kadar uzun bir süre de bitirmeme neden oldu da diyebilirz. Tabiki çoğunlukla boş zamanlarımda yazmam da bu süreyi uzattı.
Neden bu uygulama maksimum bir saat içinde django kullanılarak yazılamadı?
1)İki tane workflow vardı.Aşağıda bir tanesinin şekli var.
2)User gruplar vardı ve degişik yetkilerin yapılandırılması.
3)Excel tabanlı raporlama.
5)Email notification.
6)Gezi takvimi.
7)Kullanıcı ayarları.
Çok iyi bir sonuç aldım. Herkese tavsiye ederim. Django küçük iş uygulamaları için biçilmiş kaftan.
Thursday, August 27, 2009
I have 1 terra My Book World Edition disk and I want to mount it to my linux machine. But i dont want to add a line to fstab in order to mount automatically. Because this disk is portable and whenever it is not plugged, linux will stay for a long time to mount this disk while it is startting. It is better to use autofs to mount this kind of share. I set up my share by using My Book World Edition web interface as one can see below:
My username is admin and password is 123456.
To mount cifs share automatically, i just add below line to /etc/auto.misc file
backup -fstype=cifs,username=admin,password=123456 ://disk_server/public
Friday, July 24, 2009
At this moment i am writing a django application and in this application reports can be exported to excel files. For CharField everything is ok but for decimal fields it is becoming complicated. Why? because in Turkey, we are using "," as a decimal separator. In database, decimal fields are kept as xx.x and excel is creating problems when it is regional setting adjusted to recognize xx,x as default format. This is typical internalization problem that you can see anywhere. Normally, django project considering this kind of problems.(i.e date filter, you can easily implement your date format with this filter.)But noone can blame Django not to have decimal formats converter filter in template,in fact implementing a decimal filter format converter is so simple in django.
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/ in this web page you can see how to write your own custom filter. But maybe you dont like to spend your time while reading long pages.Just look at this django file django/template/defaultfilters.py . This is the file which is containing default filters in django. In this file you need to spend less than five minutes to write your own simple decimal format converter filter.
Problem: 1881.19 -->1881,19 (a filter is needed in template).
Just add below lines to defaultfilters.py
def string2tr(value):
decimaltr=str(value).replace(".",",")
return decimaltr
And register your filter in this file
register.filter(string2tr)
Now whenever you want to convert xx.xx to xx,xx you can use your filter in templates. {{value|strig2tr}}
Sunday, April 19, 2009
Şirkette devamlı iş gezileri oluyor. Bu geziler için excel de formlar hazırlanıyor. Bu formları hazırlamak zaman kaybına ve insan hatasına yol açıyor. Financial group managerın bu konuda bir çözüm istemesi ile uzun zamandır beklediğim fırsatın dogdugunu anlamıştım. Bu olayın öncesine gitmek gerekiyor aslında. Öğrenmek için kendime dil arıyordum. Sistem tarafında olduğum için scripting bir dil lazımdı bana. Shell scriptin kalas gibi olması artık canıma tak etmişti. Php ye baktım o da hoşuma gitmedi. Perl çok karmaşık bir dil gibi geldi. Pek tabikini öğrenirim ama dünya gelişiyor. Yok mu bana kafama göre bir dil derken python ile tanıştım. En başta pythonun syntax olayına bayıldım. Gereksiz satır sonu karakteri yoktu. indentler sayesinde parantezlerden de kurtulmuştum. Herkes bilir bu basit görülecek iki konunun aslında geçmişte "AAA nasıl unutmuşum parantezi,noktalı virgülü" diyerekten insanın başını ağrıttıgını. Videolar, kitaplar derken pratik bir hobi uygulaması yazayım diyerekten ilk denememde çok güzel sonuçlar aldım. Tüm kapıları açacak anahtar bileşenler çok güzel bir şekilde yerine oturuyordu. Hobi olarak kendime iki tane imza toplama web sitesi seçip imagemagick ve tessaract-ocr kullanıp captchalarını kırıp kafama göre imza atma scriptleri yazdım. Tabiki saldırı amaçlı değil Red Kit adına bir kaç tane imza attıktan sonra bıraktım. Sevmiştim ben bu pythonu. Database bağlantısı da çok kolay. Pythonun tek tarafı script yazmak değil tabiki. Daha değişik neler yapılabilir diye ararken Django yu gördüm. Django dokümanlarını okudukca ilgim daha da arttı. Django ile bir uygulama geliştirmek istedim. Ruhumu ele geciren bu istekle artık baş edemiyordum.Ama bu nasıl olacaktı. Nette bir çok proje vardı. Klasik herkes blog yazıyordu. Kardeşim bu blog olayını da abarttılar diyerekten ne yazsam ne yazsam diye düşünürken Angelo'nun isteği ile lamba kafamın üstünde parıldadı. Bir hafta süre istedim. Draft project getireceğim dedikten sonra önceden django da zerre birşey geliştirmemiş bir insan olarak daldım bu işe. Bir hafta sonra önüne koydugumda very good diyerekten gönderdi beni. Projeme bir sponsor bulmuştum. Peki neye very good demişti. Aşağıdaki snapshotları var.
Django framework kullanıcı yönetimi sağlıyor:)
Kullanıcıları gruplayıp gruplara yetki verebilirsiniz. Bu kullanıcı sadece trip request edip kendi triplerini görebilir.
Kullanılar triplerini request edip trip'inin hangi step te beklediğini takip edebilir.
Tum triplerin görülebildiği alan.
Tek özellikleri bu değil tabiki. Assistant grubundakiler tripleri arrange edip managerların onayına göndermeleri gerekiyor. Asistanlar formları excel'e de export edebiliyorlar. Tek başına django nun yetmeyeceği konularda ise Jquery ve EcoTree den faydalandım. Bir sürü bug'ım hala var. Ama şöyle bir gercek var, koda iki hafta el atamayıp iki hafta sonra baktıktan sonra hemen herşeyi hatırlayıp bir onbeş dakika da tekrardan hakim olabilmek Django'nun ve pek tabiki python'un güzelliği. Özellikle database ve template tarafında Django rulezzz derim. Herkese python lu günler.
Wednesday, January 21, 2009
Opensource un her alana el attığı bilinen bir durum. İş yerinde çalışanların günlük zaman çizelgelerini görebilecekleri ve kartlı giriş sistemi ile uyumlu olan bir sisteme ihtiyacımız vardı. Bu sisteme halk arasında pdks deniliyor. Bir şirket bulup bu işi yaptıralım mı diye yönetimle konuşurken karşıma timetrex çıktı. Track employee attendance özelliğini içeren aslında daha fazlası olan bir sistem. Bordro düzenleme özelliği de var. Ben bu muhasebe işlerinden zerre kadar anlamadıgımdan bu konuya girmeyeceğim ama bir muhasebeciyle çalışılıp bu sistemin Türk mevzuatına da uyarlanabileceğine inanıyorum. Timetrax php ve postresql kullanılarak hazırlanmış bir yazılım. Peki kullanıcıların işe geliş gidiş saatlerini nasıl üstüne alacak? İş yerlerinde kullandığımız kartlı sistemlerde bu kayıtların tutulduğu bir veritabanı var. Bizdeki sistemde kartlı geçiş sisteminin kullandığı database ms access. Eksik olan ne? Tabiki kartlı geçiş sisteminden veriyi çekip Timetrex'e veriyi gönderebilecek bir program. Hangi veriyi hangi tablodan çekeceğimi anladıktan sonra python ile veriyi çekip Timetrex'e veriyi yükledim. Şimdilik daha uygulamaya geçmedik fakat herkese öneririm.
Gönderen
funkypunkydrunky
zaman:
11:31 AM
0
yorum
Etiketler: pdks, personel takip sistemi, timetrex
Friday, January 09, 2009
Windows üstünde django calıştırıp mssql 2005 ile bağlantı kurdum. Bu django nasıl birseymiş diye kurcalarken gördümki mssql database inde bulunan türkçe karakterli kayıtları django encode etmeye çalışırken dağılıyordu. "TemplateSyntaxError at utf8 codec can't decode bytes" şeklinde hata veriyordu. Mssql in utf8 oldugunu dusunmek gaflet ve dalalet gibi birsey. http://docs.python.org/library/codecs.html sayfasından Türkce codecin cp1254 oldugunu görüp c:\Python25\Lib\site-packages\django\utils\encoding.py de bulunan
def force_unicode(s, encoding='utf-8', strings_only=False, errors='strict'):
fonsiyonunda utf-8 yerine cp1254 koyarak, turkce karakter problemini çözdüm.
def force_unicode(s, encoding='cp1254', strings_only=False, errors='strict'):
Herkese tavsiye ederim. Ailecek cp1254 kullanıyoruz.
Tuesday, October 07, 2008
Centos ile bir program kurmak istediğimde çoğunlukla rpm i kullanıp programları kursam da bazen acaip dependency işleri ile karşılaşıyorum hemen tabiki yuma geciyorum. Fakat yum da gidip dışardaki sunuculardan paketleri getiriyor. Benim istediğim ise localdeki bir sunucudan çekmesi dosyaları. Hem hızlı olacak hem de güvendiğim kaynaktan olacak.
Bunu yapmak ciddi manada kolay.
İlk önce bir klasör oluşturup (mkdir -p /repo/centos5/) Centos cdsinden tum rpm dosyalar, oluşturulan klasöre kopyalanır.
createrepo -v /repo/centos5 diyerekten centos5 directorysinin altına repodata adlı bir klasör oluşturup yum'un ihtiyac duydugu dosyaları bu komut oluşturur.
filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml
Bu oluşturulan klasörlere http üzerinden erişim verilmesi gerekir. http.conf tan directiveler degistirilir. Bu sunucu üstünde http'yi kullanmadığım için kafama göre takılıp klasörü http nin document root una koyacak şekilde değişiklik yaptım.
DocumentRoot "/repo/centos5/"
Yukarıdaki directivelerde deger olarak /var/www/html vardı. Onun yerine dosyaların bulundugu directory i girdim. Firewall üstünden http erişimini açtıktan sonra. SElinux ayarını yapmak gerekiyor. Websunucu üstünden servisi yapılan dosyaların ve klasörlerin http daemonı tarafından ulaşılabilmesi için http contextlerinin olması gerekir. Bunu ise
chcon -R --reference=/var/www/html/ /repo/centos5/
komutu ile yaparız. Artık http daemonı bu directorye erişebilir.
Şimdi yum.conf ayarlarını yapacagız.
[base]
name=Centos $releasever - $basearch - Base
enabled=1
gpgcheck=1
baseurl=http://xxx.xxx.xxx.xxx
satırları eklerir ve /etc/yum.repos.d klasörü silinir yada daha en iyisi adı değiştirilir.
Artık yumladıgınızda kendi local sunucunuza baglanacaksınız.
Gönderen
funkypunkydrunky
zaman:
1:40 AM
0
yorum
Etiketler: repository, rpm, yum
Wednesday, September 10, 2008
YUM hatası
primary.xml.gz 100% |=========================| 82 kB 00:00
http://helios.imbb.forth.gr/mirrors/centos/5.2/extras/i386/repodata/primary.xml.gz: [Errno -1] Metadata file does not match checksum
Bu hatanın ustesinden gelebilmek için
yum clean all
komutu ile yum'un cachei temizlenir ve sorun çözülür.
Gönderen
funkypunkydrunky
zaman:
1:44 AM
0
yorum
Etiketler: metadata file does not match checksum, yum
Tuesday, May 27, 2008
Autofs örneği
/etc/fstab dosyasını kullanarak açılışta filesystemleri mount ederiz. Ama soyleki nfs üzerinden bir filesystemi mount etmek isteyecek olursak ve herhangi bir sebepten dolayı bu sunucu devre dışıysa boot süresi uzayacaktır. Bunu engellemek elimizde. Mesela kullanıcıların home directorylerini nfs üstünde tutalım. Kullanıcı login oldugu an home directorysi mount olsun. Kullanıcı çıktıktan sonra da unmount etsin. İlk once nfs shared bir home directory oluşturulur. Bunu eski yazılarda bulabilirsiniz.
Autofs i ayarlamak için /etc/auto.master dosyasını editlemek gerekiyor.
/home /etc/auto.map
İlk sutunda otomatik mount edilecek filesystemin localde nereye mount edilecegini belirtiliyoruz. İkinci sutunda ise map yer alıyor. /etc/auto.map in icerigine ise
kullanici_adi -rw,fd=5,pgrp=3737,minproto=2,maxproto=4 10.0.0.2:/home/kullanici_adi şeklindeki satırı koyarsak 10.0.0.2 ipli sunucudan /home/kullanici_adi klasörünü alıp ihtiyac halinde kendi üstündeki /home/kullanici_adi klasöre mount eder.
service autofs restart diyerekten automount servisini tekrardan başlatırız
df komutu verdiğimizde aşağıdaki gibi mount etmek istediğimiz filesystemin mount edilmemiş oldugunu goreceğiz.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 7099768 5918904 820208 88% /
/dev/sda1 194442 12837 171566 7% /boot
none 257220 0 257220 0% /dev/shm
/dev/sda6 1004024 17720 935300 2% /halil
/dev/sda5 1004024 110524 842496 12% /var
Ama cd /home/kullanici_adi dersek otomatik olarak bu filesystem mount edilecektir.
df komutunun cıktısı aşağıdaki gibidir.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 7099768 5918904 820208 88% /
/dev/sda1 194442 12837 171566 7% /boot
none 257220 0 257220 0% /dev/shm
/dev/sda6 1004024 17720 935300 2% /halil
/dev/sda5 1004024 110528 842492 12% /var
10.0.0.2:/home/kullanici_adı 1004032 101312 851712 11% /home/kullanici_adi
Monday, May 26, 2008
OPENID NEDİR?
Openid ruzgarı artık rüzgar olmaktan çıktı fırtınaya döndü. Kullanıcı adım neydi şifrem neydi? Bu sorunlar artık yok. Artık web dunyası yeni yetkilendirmeye geçiyor. Şifre devri bitt. Tek yapmanız gereken openid url'nizi submit etmek. Gün geçtikce openid'yi destekleyen sitelerin sayısı çığ gibi büyüyor. Açık bir protokol. Kullanımı basit ama alıştığımızdan cok farklı oldugu icin onyargılar olabilir. Peki sifrenizi girmeden nasıl yetkilendiriyor? Linkteki blogtan aldıgım şekil aslında herseyi acıklıyor. http://blogs.sun.com/bblfish/entry/the_openid_sequence_diagram
Bu akış şemasını özetleyecek olursak kullanıcı openid url sini submit ediyor ve girmek istediği site tarafından openid bilgilerini saklayan openid kimlik sağlayıcısına yonlendiriliyor. Openid kimlik sağlayıcısına kullanıcı adı ve şifresini submit ediyor. Kimlik saglayıcı şifreli token veriyor kullanıcıya ve bunu kullanıcı girmek istediği siteye post ediyor. Girmek istediği site de bu şifreli tokenin yetkilendirilmiş mi diye openid kimlik sağlayıcısına soruyor. Bir sorun olmazsa bu adımlarda kullanıcı yetkilendirilip siteye girebiliyor. Bu hizmeti veren bir çok site var. Bunlardan birisi de blogger. Sizin adınıza openid'niz kullanımınıza hazır ve nazır. Openid'nin çıkış kaynagı olan livejournal.com dan bunun demosunu yapalım.
Sağ üst koşede gorulen openid login seçeneğini seçilir, open id login kutucuguna
blogspot.com da saklanılan openid urlsi girilir.
Karsıma blogspot'un kullanıcı adı ve şifre soran sayfası gelecek ve buraya bloga giris için kullandıgım kullanıcı adı ve şifresini girdikten sonra karşıma onay ekranı gelecek
Bu sayfadan izni verdikten sonra girmek istediğimiz site olan livejournal.com a yönlendirilip login olma işlemini bitireceğiz.
Openid artık alıştığımız yetkilendirme yönteminin tamamen değişmesine sebep olacak. Kullanıcılar kendi openid servis saglayacagısını kurup şifresinin garantisi kendi olacak. Sistemciler single sign on için artık kasmayacak. Şifrelerin unutulması diye birşey kalmayacak. Gelecekte (böyle bir plan hala yok) devletin portallarından vatandasların yararlanması çok kolay olacak. E-devlet e geçişte tüm yetkilendirmelerin openid ile yapılması beklenen birşey olacak.
Wednesday, May 21, 2008
Selinux konusunda araştırma yaparken Selinux ile güvenliği sağlanan bir linux sunucusu gördüm. Amca unix'in sağladığı izinleri kullanmadan sadece Selinux ile bu işlerin yapılabileceğinin demosunu yapmış. Dunyaya açmış sunucuyu root şifresini de veriyor. Hodri meydan diyor bir manada:)Sayfası http://www.coker.com.au/selinux/play.html
Friday, May 16, 2008
Linux'un ve Unixin root u olmanın yaşı ve cinsiyeti yok. Brezilya'dan gelen Monica bunun en güzel örneği. Kadın 48 yaşında ve unix sistem muhendisi. Kendisiyle çok iyi anlaştık. Şimdiye kadar gormemiştim hobiden ote bu işten para kazanan ve mesleğini layıkıyla yapan bir bayan. Düşünüyorumda öğretmenlikten daha çok bir bayana yakışan meslek unix sistem yöneticiliğiymiş. Bayanlara duyurulur.
Tuesday, May 06, 2008
"xhost +" komutuyla diger kullanıcıların baglanmasına izin vermeme ragmen dışardan x baglantısı alamıyordum.
RedHat EL de security sebebiyle x serverlar network uzerınde dinlemiyor. Alınan hata mesajı
Error: Can't open display: xxx.xxx.xxx.xxx
Port 6000'den dinlemesi gerekirken dinlemediğini goruyorsunuz.
ps -ef |grep X denildiği zaman
root 3585 3539 3 May06 ? 01:03:14 /usr/X11R6/bin/X :0 -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp
ile zaten herşey ortaya çıkıyor. X server nolisten posizyonunda. Bu ayarı değiştirmek için
gdmsetup'ı çalıştırmak gerekiyor.
Security tabındakı Always disallow TCP connections to X server seçeneğini seçili durumdan seçili olmayan duruma almak gerekiyor.
Thursday, May 01, 2008
Redhat EL de bir suru daemon var ve bu daemonlar acilista belli bir sira ile aciliyor. Ve sistemin acilis leveline gore rcx.d klasorlerindeki linklerle asil dosyanin gosterdigi yer olan /etc/init.d klasorundeki dosyalar calistiriliyor. Bu rcx.d klasorlerinde sirali bir sekilde calistirmak icin SXdaemon formati kullanilip (X calistirma onceligini gosteriyor) X'in alacagi degere gore ya sonra baslatiyor yada once. Ornek olarak rc5.d directorysinde bulunan S12YYYY daemonu S55WWW daemonundan once calistiriliyor. Eger bir daemonun onceligini degistirecekseniz tum bu rcx.d kalsorlerine girip sembolik linklerle ugrasip adlarini degistirip bu islemi yapmak gerekir. Bunun kurutulusu ise chkconfig komutudur. Onceligi 58 olan ntpd daemonini onceligi 45 e dusurmek istersek chkconfig komutuyla bu islem yapilabilir. Ama burada bagimli oldugu servislerden once calistirmaya calismamakta gerekli. Network servisinden once ntpd calistirmak sacmalik olur. Network ayaga kalkmadan ntpd isimize yaramaz.Bunun icin
/etc/init.d/ntpd dosyasi edit edilir ve
#chkconfig - 58 90
olan satir bulunur ve 58 45 yapilir.
#chkconfig - 45 90
yapildiktan sonra bu satir,
sirasiyla
chkconfig --del ntpd
chkconfig --add ntpd
chkconfig --level 12345 ntpd on
diyerekten istedigimiz prioritye bu daemonu cekmis oluruz.
NFS ile linux makineler arasinda paylasim acmak ve bunu kullanmak cok kolay bir olay. Senaryomuz /home directorylerin paylasilmasi ve network ustunde tutulmasi. Bunun icin ilk once nfs in acilista yuklenip yuklenmedigine bakacagiz.
system-config-services diyerekten nfs i calistiririz. Sonra nfs klasorlerini ustunde tutacak olan linux'un /etc/exports dosyasini edit ederek
/home 192.168.2.0/255.255.255.0(async,no_subtree_check,rw)
satirini ekleriz. Belirttigim network ise baglanmasini istedigim bilgisayarlarin bagli oldugu network. Parantez bitisik network ifadesine yoksa parantez icindeki secenekler bu networkun haricine uygulanir. NFS i bir daha baslatalim degisikligi gorsun diye. Baslattiktan sonra client olarak dusundugunuz bir makinede
mount 192.168.2.8:/home /home
dersek home directorynin ustune baglanip artik 192.168.2.8 ipli bilgisayarin ustundeki nfs klasorunu gormeye baslariz. Bilgisayarin acilislarda bunu otomatik mount etmesini istersek
/etc/fstab dosyasini asagidaki satiri ekleriz.
192.168.2.8:/home /home nfs rw 0 0
Wednesday, April 30, 2008
Virtual linuxler zaman bakimindan geri kaliyordu. Bu yuzden /etc/cron.d/ntp diye bir dosya olusturdum. Bu dosyanin icinede
*/5 * * * * root /etc/init.d/ntpd restart > /dev/null &
satirini koydum ve bes dakikada bir ntp yi tekrardan baslatmasini istedim. Biraz amele bir cozum. Vmware in guest ile hostun saatini sekronize eden vmware tools diye bir zimbirtisi da varmis. Onun la ugrasmaktansa hemen dan dun bu sekilde cozdum.
Gönderen
funkypunkydrunky
zaman:
7:56 AM
0
yorum
Etiketler: ntp, vmware player
Linuxde local accountlardan sikildiniz mi? Windows sifreniz ayri linux sifreniz ayri mi ve bunlarin tek olmasini mi istiyorsunuz? O zaman kerberos authentication tam size gore. Bu calisma Redhat EL4 ustunde yapilmistir. Asagidaki paketlerin yuklu olmasi gerekmektedir. Bunu kontrol edebilmek icin rpm -qa|grep krb5 denmesi yeterli.
krb5-libs-1.3.4-27
pam_krb5-2.1.8-1
krb5-workstation-1.3.4-27
Paketlerin yuklu oldugunu gordukten sonra /etc/krb5.conf dosyasinin degistirip kerberos servisi olarak windows sunucu gosterilir.
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM= {
kdc = domaincontroller.example.com:88
admin_server = domaincontroller.example.com:749
default_domain = example.com
}
EXAMPLE.COM = {
kdc = 10.0.0.2
}
EXAMPLE.COM = {
}
[domain_realm]
.example.com= EXAMPLE.COM
example.com = EXAMPLE.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Artik sisteme giriste kerberos sunucusunun kullanmayi saglamak icin tercih edilen authenticationlara kerberosun eklenmesi gerekmektedir. Bunun icin authconfig programi
calistirilip kerberos da secili posizyona getirilir yada asagidaki gibi elle
edit edilerek dosyaya gerekli eklemeler yapilir.
/etc/pam.d/system-auth dosyasini edit ederek
auth sufficient /lib/security/pam_krb5.so try_first_pass
satirini ilk uclu grupta ikinci satira konulur.
Ikinci uclu grubun ilk satirina
auth required /lib/security/pam_krb5.so try_first_pass
satiri konulur.
Bundan sonra ntp server ayarlarinin yapilmasi gerekiyor. Cunku kerborize authenticationda zaman cok onemli bir degisken. Linuxun saatiyle DC serverin saatleri uyusmazsa authenticatin gerceklesmez. Sonra da sadece "adduser windows_kullanici_adiniz" komutuyla kullanicinizi olusturmalisiniz. Kullanici icin sifre girilmesi gerekmez. Artik linuxe windows accountunuzla girebilirsiniz.
Kaynaklar: http://wiki.case.edu/Kerberos/Authentication_on_Linux#Location_of_PAM_Stack
http://barney.gonzaga.edu/~awithers/integration/
Gönderen
funkypunkydrunky
zaman:
6:59 AM
0
yorum
Etiketler: kerberos, linux. windows
Ihtiyac hasil oldu ve sekiz tane virtual linux kurmam gerekti. Bir tanesini vmware de hazirladiktan sonra dosyalari digerlerine kopyaladim. Sekizi de calisti ve sekizi de dhcp den ayni ip`yi aldi. Bunun sebebi dhcp mac adreslerine gore dagitirken ipyi benim makinalarin hepsinin maclerinin ayni olmasi. MAC adresini degistirerek bu dertten kurtulabiliriz.
ifconfig eth0 down
komutu verilerek eth0 down yapilir.
vim /etc/sysconfig/network-scripts/ifcfg-eth0
dosyasini editleyerek
HWADDR=00:0C:29:DF:3F:C8 ekleriz. Daha dogrusu olani yazdigimizla degistiririz.
ifconfig eth0 hw ether 00:0C:29:DF:3F:C8
ile degisikligi uygulariz. Ama reboot durumunda bu bilgi gider. Bu yuzden acilista bu sorunla karsilamamak icin
vim /sbin/ifup
dosyasini editleyerek
ilk satirina
ifconfig eth0 hw ether 00:0C:29:DF:3F:C8
komutunu eklersek bundan sonra yeni macimiz bu olur. Bu degistirmeyi Redhat EL4 te yaptim.
Gönderen
funkypunkydrunky
zaman:
1:47 AM
0
yorum
Etiketler: mac adresi degisikligi, redhat
Wednesday, April 02, 2008
Şirketlerde sadece NTLM authetication kullanan proxylerin arkasından internete çıkmak linux bilgisayarlarda problem yaratmaktadır. Linux bilgisayarlardan bu tip proxyler ile internete çıkarken karşınıza şifre ekranı gelmekte ve bu ekranda microsoft domaine ait kullanıcı adı ve şifre girmenize rağmen bu tip proxyler izin vermemektedir. Çünkü bu pop-up menusunde girdiğiniz kullanıcı adı ve şifre Basic authentication ile gonderilmekte ve ntlm protokolune uygun olmamaktadır. Bu yüzden linuxte kullandığınız firefox'un requestlerini microsoft'un istediği şekle çeviren ara bir proxy'e ihtiyac vardır. Bunun çeşitli örnekleri var. İlki ntlmaps adlı proxy. http://ntlmaps.sourceforge.net/ den indirebileceğiniz python la yazılmış proxy. Basit bir confu var. server.cfg dosyasını değiştirmeniz gerekiyor.
PARENT_PROXY:xxx.xxx.xxx.xxx
PARENT_PROXY_PORT:8080
Ayarı ile bağlanmak istediğiniz proxy'i yazarsınız.
LISTEN_PORT:5865
Bu ayarlada istediğiniz port üzerinden küçük proxy'niz calısır. Firefox'un proxy ayarları kısmına bu bilgileri girip çalışmayan internet bağlantınızı etkin hale getirebilirsiniz. Bu proxy python ile yazıldığı için çok aşırı şekilde sistem kaynağını tüketmekte. Bunun yerine de C ile yazılmış cntlm adlı proxy'i de öneriyorum. Çok hızlı response timeları var ve çok daha az şekilde sistem kaynağı kullanıyor. http://cntlm.sourceforge.net/ indirilebilinir. Yalnız bir tavsiyem var, bu proxy için şifrenizi conf dosyasına yazmayıp "cntlm -I" şeklinde çalıştırıp şifrenizi sormasını sağlayarak çalıştırınız. Her işin başı ve sonu güvenlik...
Thursday, January 03, 2008
Gmail hesabımı karıstırırken gecen sene falan hazırladıgım bir tane odev gozume ilisti. Ogrenci ders kayıt programı diğer arkadasların da menuleri olsa koyardım. Benim dokumanlar var sadece. C++ ile basit dosya okuma ornekleri. Odevin son hali bu olmasa gerek. Yada bu şekilde hic bir odev teslim edilmemeli:)
odevi indirmek istiyorsanız
Thursday, October 04, 2007
Thursday, September 27, 2007
Askerlik şokunu artık atlattım. Buranın bilgi işleminde tek tüfek takılıyorum. Tam bir teknisyen muhendis karısımı çalısıyorum. Kimi zaman elimde pense cad5 hazırlıyorum, kimi zaman balkona çıkıp fırlatılan kabloyu tutmaya çalışıyorum. En çok gelen hata da windowsun disk yapısının bozulup açılmaması. Velhasıl Buraya bir tane domain controller kurup küçük bir ağ oluşturmamı istediler. Bende hemen başladım. Üç gün içinde bitireceğim. İlk intiba olarak microsoft ürünü kullanmak garip geldi. Sonra alışıyor insan. Zaten küçük bir domaini yönetmek için atom fiziği bilmek gerekmiyor ya da it is not rocket science.
Thursday, August 09, 2007
Tuesday, July 31, 2007
Redhat EL 4 te sunucu üstüne çok baglantı gelince netstat komutunun çalışması sırasında bogus hatası ortaya çıkabilmekte ve bunu engellemek için aşağıdaki değişiklikleri yapmak gerekmekte. Bu hata alınıyorsa sistemden cpu kullanımının ve memory kullanımının normal seviyelerde olsa bile istenilen performans alınamıyor. Özellikle proxy gibi port kullanımının fazla oldugu sistemlerde bu yapılandırmaya ihtiyaç duyulmaktadır. Bu kernel parametrelelerini sistemde çalışan ilk script içine koymak gerekiyor.
echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
echo 3 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
/etc/security
* soft fsize -1
* soft core 0
* soft cpu -1
* soft data -1
* soft rss 65536
* soft stack 65536
* - nofile 102476
* - msgqueue 102400000 #100MB Burasi Byte cinsinden
* - memlock 204800 # 200MB burasi KB cinsinden
Linux'um ne kadar bedava?
Linux bedava demek onu tercih etmek icin bir sebep midir? Veya Özgür yazılımın Bedava yazılım olarak mı nitelendirilmesi gerekiyor? Bu konunun içinde olan insanlarda gördüğüm düşünce yapısını ki aslında bu kişiler bence olayın gerçek çercevesini anlamamış insanlardır, bu yanlış düşünceyi etraflarına yaymaktadırlar. Linux'un seçilmesinde ana kriter parasız oluşu olması değildir. Windows sunucularına göre daha kararlı yapıda olması ve işletim seviyesinin temellinde olan parametrelerin Adminlerin yönetiminde olmasıdır. Herkes linux kurabilir veya kullanabilir ama bunu enterprise seviyesinde ve kullanıcısı binlerce kişi olan sistemlerde bedavalılıkla açıklamak bu projeye yapılmış bir haksızlıktır. Kaldı ki linux sistemler için ihtiyaç duyulan yönetici sayısı bedavalılık kavramı yüzünden azalmamaktadır. Konunun daha temel taraflarının da işin içine girmesi Adminlerin gerçek manada admin olmasını şart koşmaktadır. Bu özellikler üretim ortamlarında daha çok ön plana çıkmaktadır. Özgür yazılım kullanan linux sistemlerde bu insan gücünün de hesaba katılması sonucunda aslında linux'ün aslında hiçte bedava olmadığı gerçeği ayan beyan görülmektedir. Linux ile ilgilenenler hiç bir zaman bedava lafını ağzına almaması gerekiyor. Bedava lafında saklı kalan gizli ve sistemler için en büyük masraf olan insan gücü hiç bir zaman unutulmamalıdır. Atalarımız ne demiş bedava etin suyu kara olur. Linux bedava değil ki suyu kara olsun:)
Bizim mail sisteminde mailler maildir formatında tutuluyordu. Disk sıkıntısı cektiğimiz icin aktif olmayan hesaplardaki mailleri silmemiz gerekiyordu. Ama bu işlemi yaparken bu kullanıcılardan herhangi biri daha sonra ortaya çıkıp nerede benim maillerim derse diye TSM üstünde silinecek maillerin archive inin alınmasını da sağlamak gerekti. İlk önce TSM üstünde bu node'un kullandıgı class set ayarlamalarını bir sene yapıp maillerin archiveden silinmemesini sagladıktan sonra artık aix üstünde çalışan scripti hazırlamak kaldı. Tsm tarafı ayrı bir derya. Bu işlemi yaparken TSM in basarıya ulaştıgından da emin olmak ve bunun kontrolunu yapmak gerekiyordu. Aşağıda 6000000 civarında dosyanın taşınıp, tape e cıkmasını saglayan script var.
0>uyarilmamasigerekenler.dat
0>backupalinipsilinenler.dat
0>silinenler.dat
0>onemlilog
echo "27 temmuz 2007 de yapılan calismanin loglari" >>silinenler.dat
for i in $(cat anadata1)
do
du -m -s /mail/vmail/$i >bufferdu
cat bufferdu
tam=$(cat bufferdu awk {'print $1'} cut -d. -f1)
if [[ tam -lt 200 ]]
then
echo " $i " >>uyarilmamasigerekenler.dat
else
find /mail/vmail/$i -type f grep -E "email2email1email3email4mail1_rsctmail2_rsct" >silmeli.dat
find /mail/vmail/$i -type f grep -E "email2email1email3email4mail1_rsctmail2_rsct" cpio -pd /mail/kota
dsmc archive "/mail/kota/mail/vmail/$i/*" -subdir=yes -deletefiles
OUT=$?
if [ $OUT -eq 0 ];
then
cat silmeli.datwhile read silinecek;do
echo "${silinecek}" >>silinenler.dat
x="${silinecek}"
rm "$x"
done
else
echo "Fatal oldum laaannn" >>onemlilog
date >>onemlilog
exit 0
fi
fi
done
Monday, July 16, 2007
Postfix Dovecot kurulumu:
Eğer bir işyerim olsaydı ve yirmi kişiden daha fazla çalışanım olsaydı illaki bir eposta sisteminin şirket çalışanları için kurulmasını isterdim. Neden yirmi? Aklıma makul sayı olarak o geldi çünkü. Peki neden yahoo veya gmail değil? Sebep basit, körün değneği elinde olmalı. Emailler kimseye emanet edilemeyecek kadar önemli ve mahrem olabilir. Kurulumda tamamen open source ürünler kullanılacak, bu sayede Microsoft'a para verilmeyecek. Bu dokumanda anlatılacak kurulum daha çok beni ilgilendiren bir kurulum olacak ama eğer bir email sistemi kuracaksanız pek tabiki sizin de işinize yarayabilir. Sistemde MTA oalrak postfix, imap sunucu olarak dovecot kullanılacak. Kullanıcı bilgileri ise LDAP tan çekilecek. Bu yapı ile bir veya daha fazla domaine hizmet edilebilecek. Kullanıcılar belirlenen kota dahilinde mail alabilecek. Email sunucunun döndüğü hata mesajlarına Türkce açıklamalar eklenip kullanıcın illaki ingilizce bilmesi gerekmeyecek. postfix'in main.conf'u ile oynayarak dış networke smtp relay'i de açabileceksiniz. Webmail olarak Squirrelmail kullanılacak. Web sunucu olarak Apache kullanılacak. Tabiki php li olacak apache. İşletim sistemi olarak IBM AIX 5.3 kullanılacak. Aix her zaman kastırır open source ta, open source ürünlerin rpm ini IBM'in sitesinden bulmanız her zaman zor olmuştur. Ya çok eski oluyor yada hic olmuyor. Zaten rpm kullanarak bu işleri herkes yapar:)Bunu binary ürünler kullanarak aşacağız yada kendi rpm'inizi oluşturabilirsiniz ama bu konu dışı. Dokuman sonucu hazırlanmış kurulum test edildi onaylandı. Gonul rahatlığı ile kurabilirsiniz:P Her koyun kendi bacagından asılır:) Bu dokumanı beraber hazırladığım Serhat Akçabayırlı arkadaşıma teşekkür ederim. IBM AIX üstüne email sunucu kurulumunu aşağıdaki linkten indirebilirsiniz:
http://funkypunkydrunky.googlepages.com/mail_server_kurulum_14.05.07.pdf
Thursday, July 12, 2007
Avusturalya'da tutulmuş irice.
Türkiyede tutulmuş balık.
İnternet hayat kurtarır mı? Bugün değişik bir balık tuttuk. Kurbağa balığı “lagocephalus sceleratus” veya balon balığı olarak adlandırılan bir balık. Bizimkiler her nekadar yedik medik deseler de ben ilk defa gördüğüm bu balıktan kıllandım ve bu en az iki kiloluk balığı internetten araştırınca http://www.hurriyet.com.tr/saglik/6842126.asp?top=1 linkindeki haberi buldum. Sonra balıkçı forumlarından da araştırınca zehiri ısıyla beraber bozulmayan bir balık oldugunu ogrendim. Japonlar bu balığın fugu adı verilen türünü yiyorlarmış ve sertfikalı özel aşcılar yapıyormuş. Çok tehlikeli atıkları oldugundan bu balığın atıkları özel kaplarda saklanıyormuş. Açıktan çöpe gönderilmiyormuş. Benim anladığım iç organlarını özellikle karacigeri tarafını ödünü patlatmadan cıkartıp iç organlarını zedelemeden temizlenirse zehir ete sirayet etmiyor olabilir. Ama bunu denemek yürek ister. Bu balığı tutunca kurtulmaya bakın derim yada japonyaya gidip nasıl hazırlantıgını temizlendiğini öğrenin bana da mail atın. Unutmadan damn you global warming
Gönderen
funkypunkydrunky
zaman:
4:53 AM
0
yorum
Etiketler: balon balığı, kurbağa balığı, lagocephalus sceleratus
Wednesday, June 27, 2007
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
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.
Wednesday, June 06, 2007
Tuesday, May 22, 2007
Mail sisteminde yaptığımız köklü değişiklikten sonra stresli geçen günler bitti. Hedefi tam 12 den vurduk. Mail sunucudaki aktif 50000 hesap artık tamamen dovecot kullanıyor. Önceden de dovecot kullansa dahi postfix yerine dovecot'un lda sını kullanması dovecotun gercek manada kullanıyor olmamızı sagladı. Bu sayede quota plugininin çalışmasını sagladık. Gelişime çok açık olan bu imap sunucusunun geleceği çok parlak. Binlerce mailin bulunduğu hesapları çok hızlı bir şekilde kullanıcıya sunuyor. Postfix ve dovecot tadından yenmez oluyor. Herkese öneririm.
Tuesday, March 13, 2007
Portal sayfasında baska bir sunucudan alınan bir sayfa vardı.SSL üstünden alması gerekiyordu. Apache 2'nin defaultunu kullanınca sayfa açılırken hata veriyordu. Bu hatanın sebebi ise klasik trusted degil uyarısı ve gidelecek sunucuyla sayfanın aynı sunucuda olmadıgı uyarısı. Sertifkaya bakınca da localhost.localdomain gozukuyordu. Self signed bir sertifika kullansamda duzelmeyecekti çünkü çalıştıgım kurumda bir sertifika otoritesi olan kök ca var ve clientlara bu kök ca gpo olarak explorerlara trusted olarak basılıyor.Domaindeki bilgisayarlar bu sayede kurum içindeki ssl baglantılarda domainde oldukları sürece explorer işte ben tanımıyorum bu sertifika kimdenmiş diye zırıltı etmiyor. Bunu sağlamak için apache'nin private keyinden elde edecegim .csr yani sertifika imza isteği ile microsoft kök ca'ya başvurup sertifikamı imzalatmam gerekiyordu. İlk önce bir private key ürettirdim.
openssl genrsa -out server.key 1024
Bu komut sonucunda bazı sorular soruyor sertifkada olması gereken bilgilerle alakalı olarak.
Bundanda csr üretmek için
openssl req -new -key server.key -out "server.csr"
komutunu verdim. Sonra bu microsoftun web arayuzunden sertifka requestinde bulunup yesyeni imzalı sertifkamı aldım. Base64 tte olarak encode edileni kullandım. Microsoftun verdiği .cer uzantılı dosyayı .crt uzantılı hale getirip ssl.crt directorysine kopyaladım. Aynı seyi server.key icin de yaptım tabiki ssl.key directorysine kopyaladım. Sonrada apache'yi restart artık kurumun kök ca'si tarafından imzalanmış sertifkamla mutlu mesut yaşadım.
Monday, October 02, 2006
Aşağıdaki script ile dosyada değişiklik varsa diğer üç servera bu dosyaları basıyorum. Ondan önce ssh ayarlamalarını yaptım serverlar arasında. Direkt shelle düşüyorlar. Sonrası zaten kolay. Server ayaktaysa bu dosyaları kopyalıyor. Bİr de networkte duplicate paket durumunda da çalışması için ekleme yaptım.
***************************
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
*/10 * * * * /var/www/dansguardian/sc.sh >> /tmp/sc.log
*****************************
Yukarıdaki satirlarida crontab -e ile crontab dosyasına koyduktan sonra bir server ile üç serverın kontrolünü saglıyoruz. Bu sayede her 10 dakikada bir belirttiğim dosyalara bakıyor ve bunları karşılaştırıyor herhangi birisinde bir degişiklik varsa diğer sunucularada aynısı basıyor.
#!/bin/bash
diff /usr/local/etc/dansguardian/lists/filtergroupslist /var/www/dansguardian/yenifiltergroup>delidolu.log
diff /usr/local/etc/dansguardian/lists/ayar/bakanlik_yasaklilar /var/www/dansguardian/yenibakanlik>>delidolu.log
diff /usr/local/etc/dansguardian/lists/exceptionsitelist /var/www/dansguardian/yeniexceptionsite>>delidolu.log
dosyaad=$(date +%T.%N.log)
degis=delidolu.log
if test -s $degis
then
for (( i = 10 ; i <= 14; i=i+2 ))
do
server="10.200.246.$i"
erisim=$(ping $server -w 3| awk {'print$6'} |cut -d% -f1,3|tail -2|head -1)
echo $erisim
#erisim=$(ping $server -w 3| grep error)
echo $deneme
if [[ "$erisim" = 0 || $erisim = '+1' ]]
then
cat /usr/local/etc/dansguardian/lists/filtergroupslist > /var/log/dans/filter$dosyaad.
cat /usr/local/etc/dansguardian/lists/ayar/bakanlik_yasaklilar >/var/log/dans/bakanlik$dosyaad
cat /usr/local/etc/dansguardian/lists/exceptionsitelist >/var/log/dans/exceptionsite$dosyaad
cp /var/www/dansguardian/yenifiltergroup /usr/local/etc/dansguardian/lists/filtergroupslist
cp /var/www/dansguardian/yenibakanlik /usr/local/etc/dansguardian/lists/ayar/bakanlik_yasaklilar
cp /var/www/dansguardian/yeniexceptionsite /usr/local/etc/dansguardian/lists/exceptionsitelist
echo $server
scp /usr/local/etc/dansguardian/lists/filtergroupslist root@$server:/usr/local/etc/dansguardian/lists/filtergroupslist
scp /usr/local/etc/dansguardian/lists/ayar/bakanlik_yasaklilar root@$server:/usr/local/etc/dansguardian/lists/ayar/bakanlik_yasaklilar
scp /usr/local/etc/dansguardian/lists/exceptionsitelist root@$server:/usr/local/etc/dansguardian/lists/exceptionsitelist
ssh -T root@$server <
then
echo "Dansguardian calisiyordu durdurulacak ve tekrardan baslatilacak"
/etc/init.d/dansguardian restart
fi
End-Of-Session
else
echo "servera ulasilamiyor"
exit
fi
done
/etc/init.d/dansguardian restart
0>delidolu.log
else
echo "dosyada degisiklik yok"
fi
Monday, September 11, 2006
Sigarayı bıraktım. Üç gündür içmiyorum. İyi oldu. Rahat bir nefes aldım. Canım arada istiyor ama ciddi manada nefret ediyorum sigaradan şu sıralar. Bugün haberlerde okudum. Akciğer kanseri bilmem ne kafasına silah sıkıp intihar etmiş. Her yer sigaranın haberleriyle dolu. Pislik birşey. Biraz hastayım şu sıralar. Burnum falan akıyor. Artık kış geliyor. Bundan sonra buraya yazacağım. Aslında kendime bir kredi kartı alsam ve dışarıdan hosting alsam. Bunun için gideceksin bankaya kart için başvuracaksın bir de üstüne hosting yapanın keyfine kalmış özellikleri kullanarak siteni yöneteceksin. Bana ters bu iş. En iyisi ben bir bilgisayar alayım eve evden bu işleri yöneteyim. Kendi serverımda yakar mıyım asarmıyım bu bana kalsın. ADSL de asimetrik olunca yavaş olur ama benim olur sonuçta. Başka türlü içime sinmez işin açığı.
Cisco eğitimi bitti sayılır son haftadayız. Bu eğitimden sonra AIX başlayacak. Dört gözle bekliyorum. Master'da başlayacak. Herşey bir anda başlayacak işin açığı. NE kadar çok başlamak demişim:) Şu sıralar maille uğraşıyorum. 200 hesaplı bir aliasa mail atıyorum ve 7 dakika lık geçikme görüyorum. Sorunun neden kaynaklandığına dair hiç bir fikrim yok. Ldap'tan çektiği bilgileri çekiyorum ve sorun olmuyor saniyesinde ekrana getiriyor. Bu iş için bugün 250 tane hesap oluşturdum ve tek bir alias altında topladım. Aynı sonuçları yine gözlemledim. Bir tcpdump aldım acaba ldap la ben farketmeden arka planda çok mu yavaş konusuyor diye ama vaktim olmadı bakmaya daha. Bir de dansguardianın arayüzü bitti. Ali bu konuda çok iş yaptı. Eğitimden falan bakamadım fazla. Ldap kısmını falan verdim. Php'nin çoğunu o yazdı. Sadece benim arka planda kopyalamayı yapacak shell scriptine kaldı. Bitti sayılır. Problem yok. Yakında kopyalarım buraya. Arka planda bir tane master olarak seçtiğim bir sunucu üstündeki dosyaların değişip değişmediğini her yarım saatte bir kontrol ediyoor ve diğer üç server ayaktaysa sırasıyla kopyalıyor arayüzün değiştirdiği dosyaları.Authenticationı ldap üstünden yapıyoruz. Ali de benimsedi ldap'ı yerel local makinalarda authentication olayı kalmadı. Bundan sonra hep ldap. Üstünde çalıştığı networking stok arayüzü içinde ldap authenticationı kullandı. Yetkilendirmede kimsede set edilmeyen bir attribute ı set ederek yapıyoruz. Hızlı ve güvenilir. Yeni webmail problemli. Canım sıkılıyor. Sanki php bug gibi geldi. İşte sinir eden de bu. Cookie problemi düşman başına.
Tuesday, July 18, 2006
Mysql kurduktan sonra localhost üzerinden değil de baska bir server üzerinden bu database'e ulaşırken hata veriyor. Yetkin yok falan diyor. O serverin ip adressini aşağıdaki komutta yazdıktan ve userın şifresini girdikten sonra tüm öncelikleri o servera vererekten bağlantı izni veriyorum. İllaki root olacak diye bir şart da yok tabiki.
GRANT ALL PRIVILEGES ON *.* TO root@10.6.239.214 IDENTIFIED BY 'password';
bir de pasword set etmek için ***set password = password("yournewpassword");***
Sunday, July 16, 2006
Her ölümlü gibi daemonlarda ölüyor. Aslında daha çok adminlerin kill edip başlatmayı unutmaları sonucunda biraz mazaret olsun diye söyledikleri "ölmüş abi" lafını ekarte eden amele script. Crona koymak lazım.
#!/bin/bash
if test -f /var/run/squid.pid
then
squid_pid=$(cat /var/run/squid.pid)
fi
if test -n "$squid_pid"
then
echo "squid calisiyor"
else
echo "squid calismiyor!!!"
date >>/home/servis/daemonlog
echo "squid başlatildi" >>/home/servis/daemonlog
/etc/init.d/squid restart
fi
if test -f /usr/local/var/run/dansguardian.pid
then
dansguardian_pid=$(cat /usr/local/var/run/dansguardian.pid)
fi
if test -n "$dansguardian_pid"
then
echo "dansguardian calisiyor"
else
echo "dansguardian calismiyor!!!"
date >>/home/servis/daemonlog
echo "dansguardian başlatildi" >>/home/servis/daemonlog
/etc/init.d/dansguardian restart
fi
Wednesday, May 24, 2006
portal.osym.gov.tr'ye squid arkasından erişim problemliydi. Daha doğrusu squidin gönderdiği isteklerde olan X-Forwarded-For:unknown headeri osym'nin serverinin cevap olarak browserı yonlendirdiği sayfa portal.osym.gov.tr olduğu için loopa sokuyordu. Bu yüzden devamlı browser aynı sayfayı getirmeye çalışıyor ve connectionı ayakta tutup aptalca kısır döngünün içine giriyordu. Bu yüzden squid'in isteklerinde bu X-Forwarded-For'u kaldırmam gerekiyordu. Bu yüzden squid.conf'a şunu ekledim:
header_access X-Forwarded-For deny all
Bu şekilde bu headerdan kurtuldum ve sayfa doğru düzgün çalışmaya başladı. Bu satırı ekleyenlerin dikkat etmesi gereken eğer squid'leri bir load balancera falan gidiyorsa ve bu load balancer da bu X-Forward-For headerini kullnaıp clientları stick yapıyorsa load balancer işlevselliğini yitirir.
Tuesday, May 16, 2006
Aşağıdaki script ps -efl komutundaki memsize kısmını cekiyor ve o sütunu topluyor. İşe yaramaz birşey ama toplama yapmak için uygun:) Tek sayılı ve çift sayılı girdilerde problem yaratıyor. Aşağıdaki hangisine göre unuttum. Ama eğer problem çıkarırsa count=0 ı count=1 yapın düzelir. Uğraşamam yaa zaten birşeye yaramıyor script ama yararsa harbi haberim olsun:)
#!/bin/bash
ps -efl |awk '{print $10}' >memsize.log
ilksatir=$(cat memsize.log|wc -l)
tail -$(expr $ilksatir - 1) memsize.log>memo.log
t=$(cat memo.log|wc -l)
a=1
for i in $(cat /home/servis/memo.log)
do
z[$a]=${i}
b=$a
c=$(expr $b + 1)
a=$c
done
for ((count=0 ; count <= t ; count++))
do
toplam=$(expr ${z[$count]} + ${z[$(expr $count + 1)]})
count=$(expr $count + 1)
toplamson=$(expr $toplamson + $toplam)
done
echo "$toplamson"
Friday, May 12, 2006
Eğer courier dan dovecota gecerken küçük bir ayrıntı olan mailbox isimlendirmesini doğru yapmazsanız iki günümüzü alan bu script dizisini çalıştırmanız gerekebilir. Bu işlem o kadar çok stressli ki düşmanımın başına gelmesini istemem. Loglar'ı bile 100 megabyte civarında tuttu. Tabiki burdaki scriptler çalıştığım yere uygun scriptler uyarlaması size kalmış.
MAIL TASIMA PROSEDURU
0.) YEDEK ALINACAK DISK UZERINE .. MAILLER UZERINDEKI SERVISLER DURDURULACAK ..
1.) /vmail/vmail klasoru bizi ilgilendirmiyor. İcabında silinecek
2.) test userlari yapacagimiz scripte katilmayacak
3.) Oncelik sirasina gore Giden kutusu , Silinenler , Taslaklar scriptleri calistirilmali.
Tum scriptler 2 asamali olacak ve screen ile calistirilacak;
En once;
find ./ -depth -print > data.dat -- Bu komutla kullanacagimiz scriptler icin bize lazim olan dosya
yapsini iceren bir text database dosyasi olusturcagiz. (2 saat suruyor..)
Fuzuli dosyalari silmek icin;
cat data.dat | grep -E “courierimapsubscribed | courierimapuiddb” > remove_courier.dat
----SCRIPT --- remove_courier.dat
#!/bin/bash
cat remove_courier.dat |while read line; do echo "${line}"
for i in "${line}"
do
rm -f "$i"
echo $i >> remove_edilen_courier.log
done
done
---------------------------------
chmod 777 remove_courier.sh
Giden Kutusu İcin;
ASAMA 1
.INBOX.Giden Kutusu ve .Giden Kutusu olan kullancilarda .Giden Kutusunun icindeki cur,new ve tmp klasorlerinin
icerisindeki maillerin yeni formattaki .INBOX.Giden Kutusu icerisindeki cur,new ve tmp altina kopyalanmasi.
cat data.dat | grep -v "tk100" |grep "Giden Kutusu" | grep -v "INBOX" |grep "rsct" | sort | uniq > cp_giden.dat
---COPY SCRIPT---cpgiden.sh----
#!/bin/bash
cat cp_giden.dat |while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|cut -d/ -f1-3|sed -e 's/\.Giden Kutusu/\.INBOX.Giden Kutusu/')
if test -d "$w"
then
cp "$i" "$(echo $i|cut -d/ -f1-4|sed -e 's/\.Giden/\.INBOX.Giden/')"
echo "$i" >>giden_kopyalanan.log
else
echo "hedef klasor olmadiginden move ile tasinmali"
echo "$i" >>giden_kopyalanmayan.log
fi
done
done
--------------------------------
chmod 777 cpgiden.sh
ASAMA2
Eskiden .Giden Kutusu olupta yeni mail server formatinda .INBOX.Giden Kutusu olmayanlarin
asagidaki script ile eski klasorun move edilerek yeni formata donusturulmesi.
cat data.dat | grep -v "tk100" | grep "Giden Kutusu"| grep -v "INBOX" | cut -d/ -f1-3 | sort |uniq > mv_giden.dat
---- MOVE SCRIPT---mvgiden.sh----
#!/bin/bash
cat mv_giden.dat|while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|sed -e 's/\.Giden Kutusu/\.INBOX.Giden*/')
if test -d $w
then
echo "Inbox klasoru olusturulmus tasima yapilamiyor."
echo "$w" >>giden_tasinmayan.log
else
mv "$i" "$(echo $i|sed -e 's/\.Giden Kutusu/\.INBOX.Giden Kutusu\//')"
echo ".Giden Kutusu move ediliyor."
echo "$i" >>giden_tasinan.log
fi
done
done
-------------------------
chmod 777 mvgiden.sh
Silinenler Klasoru İcin;
ASAMA1
.INBOX.Silinenler ve .Silinenler klasoru olan kullancilarda .Silinenler klasoru icindeki cur,new ve tmp klasorlerinin
icerisindeki maillerin yeni formattaki .INBOX.Silinenler icerisindeki cur,new ve tmp altina kopyalanmasi.
cat data.dat | grep -v "tk100" |grep "Silinenler" | grep -v "INBOX" |grep "rsct" | sort | uniq > cp_silinenler.dat
---COPY SCRIPT---cpsilinenler.sh----
#!/bin/bash
cat cp_silinenler.dat |while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|cut -d/ -f1-3|sed -e 's/\.Silinenler/\.INBOX.Silinenler/')
if test -d "$w"
then
cp "$i" "$(echo $i|cut -d/ -f1-4|sed -e 's/\.Silinenler/\.INBOX.Silinenler/')"
echo "$i" >>silinenler_kopyalanan.log
else
echo "hedef klasor olmadiginden move ile tasinmali"
echo "$i" >>silinenler_kopyalanmayan.log
fi
done
done
--------------------------------
chmod 777 cpsilinenler.sh
ASAMA2
Eskiden .Silinenler klasoru olupta yeni mail server formatinda .INBOX.Silinenler klasoru olmayanlarin
asagidaki script ile eski klasorun move edilerek yeni formata donusturulmesi.
cat data.dat | grep -v "tk100" | grep "Silinenler"| grep -v "INBOX" | cut -d/ -f1-3 | sort |uniq > mv_silinenler.dat
---- MOVE SCRIPT---mvsilinenler.sh----
#!/bin/bash
cat mv_silinenler.dat|while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|sed -e 's/\.Silinenler/\.INBOX.Silinenler/')
if test -d $w
then
echo "Silinenler klasoru olusturulmus tasima yapilamiyor."
echo "$w" >>silinenler_tasinmayan.log
else
mv "$i" "$(echo $i|sed -e 's/\.Silinenler/\.INBOX.Silinenler\//')"
echo ".Silinenler Klasoru move ediliyor."
echo "$i" >>silinenler_tasinan.log
fi
done
done
-------------------------
chmod 777 mvsilinenler.sh
Taslaklar Klasoru İcin;
Asama 1
.INBOX.Taslaklar ve .Taslaklar klasoru olan kullancilarda .Taslaklar klasoru icindeki cur,new ve tmp klasorlerinin icerisindeki maillerin yeni formattaki .INBOX.Taslaklar icerisindeki cur,new ve tmp altina kopyalanmasi.
cat data.dat | grep -v "tk100" |grep "Taslaklar" | grep -v "INBOX" |grep "rsct" | sort | uniq > cp_taslaklar.dat
---COPY SCRIPT---cptaslaklar.sh----
#!/bin/bash
cat cp_taslaklar.dat |while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|cut -d/ -f1-3|sed -e 's/\.Taslaklar/\.INBOX.Taslaklar/')
if test -d "$w"
then
cp "$i" "$(echo $i|cut -d/ -f1-4|sed -e 's/\.Taslaklar/\.INBOX.Taslaklar/')"
echo "$i" >>taslaklar_kopyalanan.log
else
echo "hedef klasor olmadiginden move ile tasinmali"
echo "$i" >>taslaklar_kopyalanmayan.log
fi
done
done
--------------------------------
chmod 777 cptaslaklar.sh
Asama 2
Eskiden .Taslaklar klasoru olupta yeni mail server formatinda .INBOX.Taslaklar klasoru olmayanlarin
asagidaki script ile eski klasorun move edilerek yeni formata donusturulmesi.
cat data.dat | grep -v "tk100" | grep "Taslaklar"| grep -v "INBOX" | cut -d/ -f1-3 | sort |uniq > mv_taslaklar.dat
---- MOVE SCRIPT---mvtaslaklar.sh----
#!/bin/bash
cat mv_taslaklar.dat|while read line; do echo "${line}"
for i in "${line}"
do
w=$(echo $i|sed -e 's/\.Taslaklar/\.INBOX.Taslaklar/')
if test -d $w
then
echo "Taslaklar klasoru olusturulmus tasima yapilamiyor."
echo "$w" >>taslaklar_tasinmayan.log
else
mv "$i" "$(echo $i|sed -e 's/\.Taslaklar/\.INBOX.Taslaklar\//')"
echo ".Taslaklar Klasoru move ediliyor."
echo "$i" >>taslaklar_tasinan.log
fi
done
done
-------------------------
chmod 777 mvtaslaklar.sh
5.)Kisisel klasorlerin tasinmasi icinse once prefixinde . isareti olup .INBOX olmayanlari grepleyerek kisilerin sahsi klasorleri bulunacak ve onune .INBOX prefixi eklenecek. Kisisel klasorlerin webmail uzeriden goruntulenebilmesi icinse, mailboxlarda onunde .INBOX prefixi olan klasorlerin
listesi olusturulup subscription dosyasina yazdiriilacak. Bu islemleri yapacak script asagida;
Yontem:
cat data.dat |grep -vE "INBOX|.Silinenler|.Taslaklar|.Giden|.Trash|cur|new|tmp|dovecot|courier|subscriptions|maildirfolder"|cut -d/ -f2-3|grep / > ozel.dat
----SCRIPT --- ozel.sh
#!/bin/bash
cat ozel.dat |while read line; do echo "${line}"
for i in "${line}"
do
mv "$i" "$(echo $i |sed -e 's/\./\.INBOX./')"
echo $i >> ozel_tasinan.log
echo ""$(echo $i |cut -d/ -f2-3|sed -e 's/\./INBOX./')"" >> "$(echo $i |cut -d/ -f1| sed -e 's/$/\/subscriptions/g' )"
done
done
---------------------------------
chmod 777 ozel.sh
4.) Geride kalan eski directorylerin ( .Giden Kutusu, .Silinenler, .Taslaklar ve kisiye ozel klasorler ) silinmesi icin asagidaki scripti kullanacagiz.
cat data.dat |grep -v ".INBOX"|grep -E ".Silinenler|.Taslaklar|.Giden Kutusu" | cut -d/ -f1-3 >remove.dat
----SCRIPT --- remove.dat
#!/bin/bash
cat remove.dat |while read line; do echo "${line}"
for i in "${line}"
do
rm -rf "$i"
echo $i >> remove_edilen.log
done
done
---------------------------------
chmod 777 remove.sh
5.) tum dosya haklari vmail.vmaile cekilecek
7) Mail serverlarin servisleri tetiklenip son kontroller yapilacak.
8) Hersey duzgun ise FIREWALL acilacak...
Monday, May 08, 2006
Proxy üstünden çıkışlarda java uygulamalarında şifre sorması başka problemlere yol açtı. Kullanıcılarımız şifre ekranından şifrelerini girmeyi beceremiyor. Bu yüzden squid.conf'a aşağıdaki satırları ekledim. Yeni rulelarla artık bir problem kalmadı.
acl javascript rep_mime_type -i ^application/x-javascript$
acl dosyauzantisi url_regex \.css$ \.js$ \.jar$ \.class$ \.gif$ \.jpg$
http_access allow dosyauzantisi
http_access allow javascript
Mesela javayla bir foto üstünde efekt yaptınız. Proxy yine şifre sorar. Bunun sebebi java'nın etkilediği dosyalarında şifre ekranı çıkarmasıdır. Bu yüzden java nın kendi dosyalarını dahil etmenize rağmen şifre sormaya devam ediyorsa java ekranından hangi dosyada yüklemeyi durdurup şifre sorduğuna bakın. Onu da ekleyin şifre gelmesin.
Wednesday, March 29, 2006
Squid java kullanan sitelerde problem çıkarıyordu. Yani java ile bağlanmak istiyorduk java uygulaması çalışmıyordu. Bu sorunun kaynağı bizim ntlm auth kullanmamız olduğunu anladım. Squid.conf'a basic auth u da eklediğim zaman problem kalmıyor. Bu bağlantıda ntlm auth çalışmadığı için java uygulamasını kullanamıyorduk. Ntlm ile auth yapamıyor ve Basicle auth yapıp java uygulamasını çalıştırıyor.
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 30
auth_param basic realm Server Proxy
auth_param basic credentialsttl 2 hours
Bunun dışında squid benim local ip'mi web isteklerinde headerlara koyuyordu. Clientların ne kadar az bilgisi giderse o kadar güvende olurlar. Bir manada information leak olarak tabir edilen bilgi sızması durumuydu.
squid.conf'ta "forwarded_for off" yaparak bunu engelledim.
Alınan E-posta iletilerinin kaynağını araştırma:
Haberleşme teknolojilerinden e-posta hayatımızın vazgeçilmez bir parçası olmuştur. Herkesin bildiği üzere yakın zamanda ortaya çıkmış bir haberleşme teknolojisidir. İlk olarak kullanımına 1970’ler de başlanan e-posta bildiğimiz manada ilk çalışma prensiplerini yani protokolüne ; 1982’ de yayınlanan RFC821 ve RFC822 ile kavuşmuştur. RFC821 SMTP (simple mail transport protokol, basit mail iletim protokolü) hakkında olup bu kurallar dizisi yeni RFC’lerle yenilenmekte ve gelişmektedir. İlk olarak ortaya çıkış tarihinin 1980lerin başı olduğunu düşündüğümüzde o zamanın ihtiyaçlarını karşıladığını kolayca anlayabiliriz.
E-postanın kısa tarihçesinden sonra kullanımı konusuna odaklanacak olursak kullanıcılar için vazgeçilmez olan e-posta hizmeti ne kadar güvenlidir? Günlük hayatımızda aldığımız kararları ve davranışlarımızı etkileme gücü olan e-postalar konusunda ne biliyoruz? Herhangi bir kullanıcının istediği mail adresini kullanıp size mail atabileceğini veya sizin mail adresinizi kullanıp e-posta gönderebileceğinin farkında mısınız? Protokolün doğası gereği bu engellenememekte ama maillerin kaynakları tespit edilebilmektedir. Her kurumun ve şirketin mail sistemi basit olabildiği gibi karmaşık bir yapıda da olabilir. Dışarıdaki bir kullanıcının iç sistemi bilmesine imkan yoktur. Ama siyah bir kutu olarak düşünürsek mail sistemini, bazı etkilere belli tepkiler vermek zorundadır. Bu yazıda e-posta adresini sorgularken bir sonuç olarak mail sistemini de sorgulayacağız.
E-postalarda kullanıcıların okuduğu body (gövde) haricinde header (başlık) kısmı vardır. E-postayı gönderen kişi ve alan kişi arasında e-postanın takip ettiği yolu bu header kısmından anlayabiliriz. Başlık kısmı normalde gözükmez. Eğer aldığınız e-postayı posta dosyası olarak kaydedip bir yazı editörü ile görüntülerseniz başlık kısmını görebilirsiniz veya işin daha kolayı Outlook Express kullanıyorsanız, maili açıp dosya menusundan özellikler menusuna seçip ayrıntılar sekmesine tıklarsanız mailin başlık kısmını görüntülersiniz. Mesela E-posta gönderen adres fusunx@basbakanlik.gov.tr olsun. Bu mesaj gerçekten başbakanlik.gov.tr’ den mi gelmiştir? İlk olarak hemen mail’in başlık kısmına bakmamız gerekir.
Return-Path:
Delivered-To: halilkeles"güzela"xxxxx.gov.tr
Received: (qmail 4440246 invoked from network); 24 Mar 2006 12:33:05 -0000
Received: from unknown (HELO virusgw.xxxx.gov.tr) ([10.200.200.xxx])
(envelope-sender
by webmail.xxxx.gov.tr (qmail-ldap-1.0233) with SMTP
for
Received: from (212.15.17.66) by virusgw.xxxx.gov.tr via smtp id 59f4_c3ed70b2_bb34_11da_8c64_0002b3c81b
Fri, 24 Mar 2006 14:50:26 +0200
From: "fusunx"
To:
Subject: Fw: Funny :)
Görüldüğü gibi maili xxxxx Bakanlığının mail sunucusuna gönderen ip numarası 212.15.17.66. Bu ip’nin adres çözümlemesi yapmamız için nslookup komutu kullanacağız. Windows XP kullanıcıları komut satırından bu komutu verebilirler.
debian:/var/log# nslookup
> 212.15.17.66
Server: 10.6.82.2
Address: 10.6.82.2#53
Non-authoritative answer:
66.17.15.212.in-addr.arpa name = host-212-15-17-66.boruxxxtelekom.com.tr
Bu ip’nin DNS kaydı gördüğünüz gibi başbakanlık.gov.tr ile alakası yok. Bundan emin olmak için basbakanlik.gov.tr’nin e-posta sunucusunun adres çözümlemesini yapalım.
debian:/var/log# nslookup
> basbakanlik.gov.tr (ip çözümlemesini yapıyoruz ama bizim ulaşmamız gereken mail sunucu adresleri)
Server: 10.6.82.2
Address: 10.6.82.2#53
Non-authoritative answer:
Name: basbakanlik.gov.tr
Address: 172.16.1.5
Name: basbakanlik.gov.tr
Address: 172.16.1.10
> set q=mx (Mail sunucuların çözümlemesini yapmamız için MX sorgusu yapılmalı bu yüzden sorgu tipimizi değiştiriyoruz.)
> basbakanlik.gov.tr
Server: 10.6.82.2
Address: 10.6.82.2#53
Non-authoritative answer:
basbakanlik.gov.tr mail exchanger = 10 erdek.basbakanlik.gov.tr. (başbakanlık.gov.tr uzantılı maillerin çıkacağı mail sunucusu)
E-postanın başlığında hiçbir şekilde erdek.basbakalik.gov.tr geçmemektedir.
Peki doğrulama yapmamız için bu yeterli midir? Çoğu zaman yeterli olmasına rağmen yeterli olmayabilir. Belki kullanıcılar dışarı mail atarken başka bir sunucu kullanıyorlardır veya aynı sunucunun bir başka ismi var olabilir. Şimdi bunu anlamak için kullanımda olamayacak bir mail adresine mail atalım. Örnek olarak asasasdsds@basbakanlik.gov.tr adresine boş bir mail atalim. Gelen cevabın başlığına bakıp inceleyelim. Bu şekilde mail atmamızın sebebi e-posta sunucusundan mail almak ve o sistemden alınacak e-postalarda başlığa girecek sistem bileşenlerini bulmaktır.
Delivered-To: halilkeles"güzela"xxxx.gov.tr
Received: (qmail 6176988 invoked from network); 27 Mar 2006 09:48:02 -0000
Received: from unknown (HELO virusgw.xxxx.gov.tr) ([10.200.200.100])
(envelope-sender <>)
by webmail.xxxx.gov.tr (qmail-ldap-1.03) with SMTP
for
Received: from (195.140.196.2) by virusgw.xxxx.gov.tr (xxxx Bakalığına ait server) via smtp
id 5060_42781de2_bd79_11da_92bc_0002b3c81b42;
Mon, 27 Mar 2006 13:05:48 +0300
Received: from ([172.16.1.5]) by pamukkale; Mon, 27 Mar 2006 12:54:35 +0300 (EEST)
From: postmaster@basbakanlik.gov.tr
To: halilkeles"güzela"xxxx.gov.tr
Message-ID: 011tbPCwl00000aca@erdek.basbakanlik.gov.tr (fusunx@basbakanlik.gov.tr ‘de göremediğimiz erdek.basbakanlik.gov.tr sunucusu headere girmiş.)
Subject: Delivery Status Notification (Failure)
Kalın harfle yazılmış ip bizim çıkış noktamız olacaktır. Bu ip’i kime aittir? Başbakanlık’tan çıkarken mailin başlığına düşen son ip budur. Bu ip’den sonra xxxx Bakanlığı’nın sistemine girmiştir bu mail.
http://www.ripe.net/whois sitesinden bu ip’yi sorgulayabiliriz. basbakanlik.gov.tr den gelen maillerin çıkış ip’si bu ip olmalıdır. Sorgu sonucunda kısaca şu karşılıkları alıyoruz.
inetnum: 195.140.196.0 - 195.140.199.255
netname: TC-BBA-NET
descr: T.C.BASBAKANLIK NET - TURKISH PRIME MINISTRY IT NETWORK
descr: This network is serving as the communications media among
descr: the Prime Ministry,State Ministries and some state
descr: institutions and as a means for accessing to Internet.
descr: Ankara-Turkey.
country: TR
Görüldüğü üzere 195.140.196.2 ip’si e-postada geçmiyor. Artık kesin bir şekilde bu mailin basbakanlik.gov.tr’ den gelmediğini söyleyebiliriz.
Eğer elimizde başlığına bakabileceğimiz güvenilir, basbakanlik.gov.tr’den gönderilmiş olan e-posta varsa analizimiz çok kısalacaktır.
basbakanlik.gov.tr uzantılı e-posta adresi olan gerçek bir kullanıcının gönderdiği e-posta başlığını inceleyelim.
Return-Path:
Delivered-To: xxx@xxxx.gov.tr
Received: (qmail 5914680 invoked from network); 24 Mar 2006 13:13:18 -0000
Received: from unknown (HELO virusgw.xxxx.gov.tr) ([10.200.200.100])
(envelope-sender
by webmail.xxxx.gov.tr (qmail-ldap-1.xxx) with SMTP
for
Received: from (195.140.196.2) by virusgw.xxxx.gov.tr via smtp
id 1faf_2c1a06b4_bb3a_11da_8e85_0002b3c81b42;
Fri, 24 Mar 2006 15:29:08 +0200
Received: from ([172.16.1.5]) by pamukkale; Fri, 24 Mar 2006 15:18:58 +0200 (EET)
Received: from dtopcuoglu ([10.1.6x.xxx]) by erdek.basbakanlik.gov.tr with Microsoft SMTPSVC(5.0.2195.6713);
Fri, 24 Mar 2006 15:14:26 +0200
Message-ID: <004a01c64f45$972993e0$ca45010a@xxx>
From: =?iso-8859-1?Q?xxxxxx?=
Bu e-postanın yolunu takip edelim.
10.1.6x.xxx ipli bilgisayardan Erdek.basbakalık.gov.tr e-posta sunucusuna bağlanılmış, e-posta 172.16.1.5 ipli bir ağ bileşeninden pamukkale sunucusuna ulaştırılmıştır. Sonra çıkış ip’si olarak 195.140.196.2 kullanıp xxxx Bakanlığı’na ulaşmıştır. fusunx@basbakanlik.gov.tr e-postasının başlığında bu şekilde bir yol yoktu. Görüldüğü gibi elimizdeki e-posta başlıklarını kullanıp komutlar kullanmadan e-postanın sahte bir e-posta olduğunu anladık.
Bizim burada yaptığımız aslında iki türlü analizdir. Birinci yöntem elimizde Başbakanliktan gelmiş bir e-posta olmadan göndereni meçhul e-postanın nerden geldiğini anlamak, ikincisi ise elimizde başbakanlıktan gönderilmiş e-posta vardır ve biz bu e-postanın başlığı ile elimizdeki e-postayı karşılaştırıyoruz. Sonuçta toparlayacak olursak varacağımız sonuç araştırdığımız e-postanın başbakanlığın e-posta sunucusundan gelmediğidir. Peki bu e-posta niye gönderilmiştir? Günümüzde yaygın olarak görülen ve geniş bant teknolojisinin yaygınlaşmasıyla daha kolay ve hızlı yayılan solucanlardan bir tanesi yol açmıştır. Bu tip programlar yerleştikleri bilgisayardan elde ettikleri adreslere e-posta göndermekte ve bu sayede daha çok bilgisayara bulaşmaya çalışmaktadır. Ülkemizde kişisel bilgisayar güvenliği tam olarak anlaşılmadığı için bu tip virüsler çokça görülmektedir. Bir olasılık da fusunx@basbakanlik.gov.tr adresinden insanlara sanki gerçek fusunx kullanıcısı gibi ulaşıp onları kandırmaktır. Bu yüzden bilinçli kullanıcıların aldıkları e-postalara göre davranışlarını ve düşüncelerini şekillendireceklerse e-postaların kaynaklarını sorgulamalarında fayda vardır ve e-postaların illaki görünen adresten gönderilmiş olmayacağının bilincinde olunmalıdır.
Investigation of the source of the received e-mail:
This paper is about the insecure nature of the e-mails. With using some basic commands, trying to show the people how they can understand the senders of the e-mails and from which servers they were originated.
Halil KELEŞ
Thursday, March 16, 2006
This post is one of my post in dansguardian mail list.
Now i will tell how you will receive of the denied
site from linux to your predefined mail address.
I find a script for sending mail. Thanks these guys:)
We will use this script and assign a job to crontab
file and
you will receive denied site when you want. But i dont advice you receiving big mail from the server. But you wonder how it is done, so i am telling.
STEP1
Firstly copy the mime_mail script below and save it in
/bin .
#!/usr/bin/perl -w
#
# simple program to send a text message with an
attachment
#
# William Julien
###
#
# Create a new option to choose message type (text |
html)
# 08/27/04 Daniel Bauermann
###
use strict; # turn on the strict pragma
use Getopt::Std; # use standard getopt to parse
options
$/ = undef; # turn on slurp mode
#
# scope local variables
#
my ($date, # the current date
$sendmail, # the sendmail command
$document, # the document text
%options, # program options
$filename, # a file to send
$file, # the content of a file
@filelist, # list files to send
$tolist, # list of comma separated
email addresses
$today, # today's date
$usage, # program usage
$man, # program man page
$subject, # email subject
$extent, # file extension
%mime_type, # list of supported
application context mime types
$mime_type, # current mime application
content type
$typemessage, # define type message (new
option)
$headertypemessage, # content type message (new
option)
);
#
# variable initializations
#
$man = <
mime_mail
DISCRIPTION
This program is a command line mailer that sends a
text file
description and one or more files in mime
attachments. On success,
mime_mail will work silently.
SYNOPSIS
mime_mail -h | -d document.txt -s "mail subject"
-u "user1 [,user2 ...]" -f "file1
[,file2 ...]" -t [text|html]
OPTIONS
-h
Displays a man page.
-d document.txt
Sends "document.txt" in the mail message body.
The file must
be a normal text file. If a "-" is provided as
an argument,
the input will be taken from stdin. If no "-d"
argument is
supplied, the attachment will be sent with the
message
"Please see the attached.".
-s "mail subject"
Sets the mail subject. The mail subject must
be quoted if the
subject contains any spaces.
-u user1,user2 ...
A comma separated list of email addresses or
aliases. Quotes
are required if the list contains any spaces.
-f file1,file2 ...
A comma separaed list of files to attach.
Quotes are required
if the list contains any spaces. The files can
be of any type.
The recognised application content types are
".doc", ".html",
,"htm",".xls", ".csv", ".pdf", ".rtf", and
".mdb".
-t [text|html]
Message type
William Julien
425-865-5511
MAN
$usage = <
Usage:
mime_mail -h | -d document.txt -s "mail subject"
-u "user1 [,user2 ...]" -f "file1 [,file2
...]" -t [text|html]
USAGE
$sendmail = "/usr/lib/sendmail";
if ( ! -f $sendmail ) {
die "Sorry -- cannot locate sendmail at
$sendmail.\nYou must edit $0\n";
}
$today = scalar(localtime());
%mime_type = ("doc" => "application/msword",
"txt" => "text/plain",
"htm" => "text/html",
"html" => "text/html",
"xls" => "application/vnd.ms-excel",
"csv" => "application/octet-stream",
"pdf" => "application/acrobat",
"rtf" => "application/rtf",
"mdb" => "application/vnd.ms-access",
);
#
# process program options
#
getopts('d:s:u:f:h:t', \%options) or die "$usage\n";
if ( defined $options{"h"} ) {
print "$man\n";
exit;
}
if ( defined $options{"f"} ) {
@filelist = split /\,/,$options{"f"};
foreach $file (@filelist) {
if (! -f $file) {
die "$0: cannot open $file\n";
}
}
} else {
die "$usage\n";
}
if ( defined $options{"d"} ) {
$document = $options{"d"};
if ( $document eq "-" ) {
$document =
} else {
if ( -f $document ) {
open F, "$document";
$document =
close F;
} else {
die "$0 error: cannot open $document\n";
}
}
} else {
$document = "Please see the attached.\n";
}
if ( defined $options{"s"} ) {
$subject = $options{"s"};
} else {
die "$usage\nError: No Subject\n";
}
if ( defined $options{"u"} ) {
$tolist = $options{"u"};
} else {
die "$usage\n$0 error: no subject specified\n";
}
#
# New option
#
if ( defined $options{"t"} ) {
$typemessage = $options{"t"};
} else {
$typemessage = "text";
}
if ( $typemessage eq "text" ) {
$headertypemessage = "Content-Type: text/plain;
charset=us-ascii\nContent-Transfer-Encoding: 7bit";
} else {
$headertypemessage = "Content-Type: text/html;\n
charset=\"iso-8859-1\"\nContent-Transfer-Encoding:
quoted-printable";
}
#
# End new option
#
open MAIL, "|$sendmail -t";
print MAIL <
Subject: $subject
Date: $today
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="ThisRandomString"
This mail was formatted with mime_mail (wmj)
--ThisRandomString
$headertypemessage
$document
HEADER
foreach $filename (@filelist) {
$extent = $filename =~ /\.(\w+)$/ ? "\L$1" :
undef;
$mime_type = "application/octet-stream";
if ( defined $extent ) {
if ( defined $mime_type{"$extent"} ) {
$mime_type = $mime_type{"$extent"};
} else {
$mime_type = "application/octet-stream";
}
}
open F,"$filename";
$file =
close F;
$file = encode_base64($file);
print MAIL <
Content-Type: $mime_type; name="$filename"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$filename"
$file
FILE
}
print MAIL "--ThisRandomString--\n";
#
# send the mail
#
close MAIL;
#
# fin
###
sub encode_base64
{
use integer;
my $res = "";
my $eol = $_[1];
$eol = "\n" unless defined $eol;
pos($_[0]) = 0; # ensure
start at the beginning
while ($_[0] =~ /(.{1,45})/gs) {
$res .= substr(pack('u', $1), 1);
chop($res);
}
$res =~ tr|` -_|AA-Za-z0-9+/|; # `#
help emacs
# fix padding at the end
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if
$padding;
# break encoded string into lines of no more than
76 characters each
if (length $eol) {
$res =~ s/(.{1,76})/$1$eol/g;
}
return $res;
}
and save it to /bin
dont forget to use chmod
"chmod 777 mime_mail"
Now it is time for writing the script for the schecule
job.
STEP2
vi mailme
filename=$(date '+%H_%d_%m_%g') # you get the name for
the accesslog after you grep the denied site you
should move your #accesslog to a new filename in order
not to grep the same denied sites .
echo $filename #your new log name format is
hour_day_mouth_year
grep -nr 'DENIED'
/where/is/your/dansguardian/access.log
>/var/log/denied #you grep the denied site and put
them in this #file /var/log/denied
cp /where/is/your/dansguardian/access.log
/where/is/your/dansguardian/$filename #grepped logs move to new file $filename
0>/where/is/your/dansguardian/access.log #you clean the content of your access.log #and by doing that you will not grep again and again the same denied sites
mime_mail -s "deniedsite" -u yourmail@yourdomain -f
/var/log/denied
##now save this script to /bin
chmod 777 mailme
STEP 3
you will edit the crontab file by using "crontab -e"
For example you want receive this mail from your
system at 21:00 clock everyday
"minute" "hour day of month" "month" "day of week"
0 21 * * * mailme
save and exit
now you will start receiving mail from your linux at
21:00 o clock everyday. I hope it will help you
:)Before doing this dont forget the backup your logs.