03 Aralık 2007

swatch logrotate'den sonra log dosyasını izlemezse...

Bir süredir log dosyalarını izlemek için  swatch kullanıyorum. swatch'ın bir sonraki gün log dosyalarını izlemediğini fark ettim. Sebebini araştırdığımda logrotate'den sonra eski log dosyasını izlediğini ve yeni dosyayı izlemediğini gördüm. Yani syslog dosyası gece syslog.0 oluyor ve swatch syslog.0'ı izlemeye devam ediyor. Bu sorunu çözmek için logrotate'den sonra swatch'ı restart etmek yetecekti ama nasıl?

swatch'ın start, restart, stop edilebilmesi için bir script yazmak gerekiyordu. Kolları sıvayıp önce şöyle bir script yazdım (/etc/init.d/swatchd dosyasına) :

#!/bin/sh

#               Debian Gnu/Linux Shell Script
#
# swatchd  : swatch'in baslatilmasi, durdurulmasi veya tekrar baslatilmasi
#                  icin script.
#
# Aciklama: logrotate'den sonra swatch log dosyalarini dinlemediginden,
#                  logrotate'den sonra swatch'in restart edilmesi gerekiyor.
#                  /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna
#                  /etc/init.d/swatch restart > /dev/null satiri eklenirse, sysklogd restart olduktan hemen sonra
#                  swatch da restart olacaktir.
#
# Version:    1.0  03-12-2007  aytekinaygun@gmail.com


ps ax | grep swatch > /tmp/swatch.pid
PID=`cat /tmp/swatch.pid | grep swatchrc | awk '{print $1;}'`


 case "$1" in

  start|"")
        if [ "$PID" = "" ]; then
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch baslatildi..."
        else
                echo "swatch zaten calisiyor..."
        fi
        ;;


   stop)
        if [ "$PID" = "" ]; then
                echo "swatch zaten calismiyor..."
        else
                kill -9 $PID
                echo "swatch durduruldu..."
        fi
        ;;


restart)
        if [ "$PID" = "" ]; then
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch calismiyordu ve baslatildi..."
        else
                kill -9 $PID
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch tekrar baslatildi..."
        fi
        ;;


      *)
        echo "Kullanim parametreleri : /etc/init.d/swatchd {start|stop|restart}"
        ;;

esac

exit 0

Sonra da /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna;

  /etc/init.d/swatch restart > /dev/null

satırını ekledim. Böylece gece sysklogd restart olduktan hemen sonra swatch'da restart oluyor ve istediğim log dosyalarının izlenmesine devam ediliyor.

15 Kasım 2007

Thunderbird konu başlığına göre dizilim yapmasın

Bir süredir sıkıntısını çektiğim bir konu... Thunderbird'de e-postaları dizilim (thread) şeklinde gösterip, okuyorum. Özellikle linux listelerindeki iletileri birbirine karıştırmadan, konularına göre takip edebilmek için iyi oluyor. Fakat localde kullandığımız e-posta trafiğinde bu özellik başımın belası oldu. Kullanıcıların konu başlığı seçme kısırlığının da etkisi ile her postaya "yardım", "sorun", vs. gibi standart başlıklıklar vermeleri veya konusuz bırakmaları -ki o zaman konu başlığı "(konusuz)" şeklinde oluyor- ile postalar birbirine girmeye başladı. Thunderbird message-ID dışında aynı konu başlıklarını da aynı dizilimlerde tutuyor. Önceleri önemsemedim ama zamanla posta trafiği ve aynı konu başlıklarının kullanımı arttıkça bu işe bir dur demenin zamanı geldi. Biraz araştırma yaptıktan sonra şu linki buldum. Profil dizinimin altına user.js adında bir dosya oluşturup içine de şunları ekledim:

# Only thread by reference headers, ignore subject
user_pref("mail.strict_threading", true);

ve kayıt ettim... Thunderbird'ü tekrar çalıştırdığımda kabuslarım sona erdi.

16 Ekim 2007

Disklerin dolduğunu haber veren script

Bu aralar, kurduğum linux proxy-firwall sistemleri izlemeyi daha kolay hale getirmeye çalışıyorum. Log analiz programları ile haşır-neşirim son zamanlarda. swatch programı ilgimi çekmeye başladı. Program, log dosyalarında belirlediğiniz herhangi bir ifade geçerse isterseniz size e-posta atıyor, isterseniz komut/komutlar çalıştırıp bir iş yaptırılabiliyor. Yani mesela auth.log dosyasında herhangi bir satırda "illegal user" ifadesi geçerse bana e-posta gönder diyorsunuz; swatch, log dosyasını dinlemeye başlıyor ve sisteminize yapılan ssh bağlantı denemesi(saldırısı) olduğunda size e-posta atıyor. Durumdan anında haberdar oluyorsunuz. Senaryolar çoğaltılabilir tabi.... Şu günlükte de uygulama konusunda güzel bilgiler var. Yazanın eline sağlık.

Henüz denemeler yapıp yazılımı test ediyorum. Bu denemelerimde disk dolduğu zaman bana e-posta atmasını sağlayamadım. Fazla da uğraşmadım ve kendi işimi kendim görmeye karar verdim. Hemen şöyle bir script yazdım:


#!/bin/sh

if
    df -h | egrep "90%|91%|92%|93%|94%|95%|96%|97%|98%|99%|100%"

then

    df -h > disk.txt
    echo " " >> disk.txt
    echo " " >> disk.txt
    du -sh /var/* >> disk.txt
    mail -s "[Proxy-Hastane] Disk Doluyor!" tirtil@zabazingo.com < disk.txt
    rm disk.txt

fi


Görüldüğü gibi basit bir 'eğer' kalıbı ile işimi hallettim.

Önce disk bölümlerinin doluluk oranına bakıp bu çıktıda %90 ve üzeri bir ifade var mı ona bakıyoruz. Eğer bu ifade var ise disk bölümlerinin doluluk oranlarının bilgisi ile /var dizininde bulunan dosya ve dizinlerin boyutlarını disk.txt dosyasına yazıp, bu dosyayı e-posta ile gönderiyoruz. Hepsi bu...

Bu scripti crontab'a ekleyip günde bir kez çalıştırmak yeter sanırım.

15 Ekim 2007

Konsoldan e-posta göndermek

Kurduğumuz sistemlerde neler olup bittiğini izlemek için yada belirli aralıklarla yaptırdığımız bir işin (örneğin yedekleme) sağlıklı bir şekilde yapıldığından emin olmak için birtakım çıktıları e-posta ile takip ederiz. Konsoldan e-posta atmak için;

# mail kullanıcı@alanadı.com -s "Konu Başlığı" < /var/log/dosya.log

komutunu kullanmak yeterlidir. Bu komut ile dosya.log dosyası kullanıcı@alanadı.com'a gönderilir. Fakat bu komutu kullanmak için önce bir MTA ayarı yapmak gerekir. Ben Debian'da ön tanımlı olarak gelen exim4'ü kullanıyorum. Eğer kurulu değil ise:

 # apt-get install exim4

ile kurulumu yapıyoruz. Kullandığım gmail hesabım için ayarları şöyle yapıyorum:

 # dpkg-reconfigure exim4-config


Yapılandırmayı küçük dosyalara bölmek ister misiniz? hayır
Posta yapılandırma türü? Posta gönderme akıllı-makine ile; posta alma SMTP/fetchmail ile
Sistemin posta adı?  localhost.localdomain
Kendisinden gelen SMTP bağlantılarının dinleneceği IP adresleri: 127.0.0.1
Kendisinden posta kabul edilecek diğer adresler: localhost.localdomain
Postaları anahtarlanacak makineler: (boş)
Akıllı-makinenin (smarthost) IP adresi veya makine adı: smtp.gmail.com::587
Dışarı giden postada yerel posta adı gizlensin mi? Hayır
DNS sorgulamaları asgari düzeyde tutulsun mu (İsteğe-bağlı-Bağlantı)? Hayır
Yerel epostalar için dağıtım yöntemi:  /var/mail/ "mbox" biçemi

Ayarları kayıt ediyoruz. Yapılan bu ayarlar /etc/exim4/update-exim4.conf.conf dosyasına yazılır. Bu dosyanın içeriği şöyle birşey oluyor.

 # nano /etc/exim4/update-exim4.conf.conf

dc_eximconfig_configtype='smarthost'
dc_other_hostnames='localhost.localdomain'
dc_local_interfaces='127.0.0.1'
dc_readhost='debian'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.gmail.com::587'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'


aytekin kullanıcısının gönderdiği postalarda zabazingo@gmail.com adresinin görünmesini istiyorum. Bunun için /etc/email-addresses dosyası şöyle düzenliyoruz.
 # nano /etc/email-addresses

 aytekin: zabazingo@gmail.com

Son olarak kullanıdğımız e-posta adresinin kullanıcı ve şifre bilgilerini girmemiz gerekiyor.
 # nano /etc/exim4/passwd.client

 *:zabazingo:şifre

Ayarlar tamamlandı. Şimdi de exim4'ü yeniden başlatıyoruz.
 # /etc/init.d/exim4 restart

08 Ekim 2007

Dinamik IP'ye hostname atama (dyndns.org güzelliği)

dyndns.org sitesinin çok güzel bir hizmeti var. Dinamik IP'lere hostname tanımlayabiliyorsunuz. 5 tane hostname tanımı ücretsiz yapılabiliyor. Böylece statik IP gerektiren durumlarda gerçekten ilaç gibi geliyor. Evdeki bilgisayarıma ssh ile bağlanmak istediğimde ssh evdeki_bilgisayar.dyndns.org komutu ile direk bağlanıyorum. Kullandığım modemde dyndns.org özelliği var ve gerekli ayarları yaptıktan sonra her IP değiştiğinde modem dyndns.org'da oluşturduğum host bilgisini değiştiriyor. Eğer modemde böyle bir özellik yok ise o zaman bu görevi Linux'a bırakacağız.

Belli aralıklarla IP'yi güncellemek için ubunturehberi.com'da anlatılanları uyguladım. Komut satırından komutu verdiğimde herşey normal ama cron'dan komut çalışmıyor. Betik path'de olmadığı için sorun oluyor. Bende şöyle yaptım. dyndns_update.sh betiğini /usr/sbin/'in altına taşıdım. Betik içinde de değişiklik yapmak gerekiyor. ipcheck komutu olan satırlarda da /usr/sbin/ipcheck .... şeklinde yol tanımladım. Sonuç olarak betiğin son hali şöyle:

#!/bin/sh

USERNAME=kullanıcı
PASSWORD=şifre
HOSTNAME=xxxxxx.dyndns.org

cd /root/
if [ -f /root/ipcheck.dat ]; then
/usr/sbin/ipcheck -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
else
/usr/sbin/ipcheck --makedat -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
fi

crontab'a da şöyle ekliyoruz:

# crontab -e
her saat başı çalışması için eklenecek satır:

00 * * * * /usr/sbin/dyndns_update.sh

05 Ekim 2007

/home'u ayrı bölüme/diskte taşımak

Bu aralar SME Server ile yerel bir e-posta sunucusu kurmaya niyetlendim. Fakat gel gör ki sistemde 2 disk olmasına rağmen hiç bana bişi sormadan tek diske tüm kurulumları yapıp işini bitiriyor. Bu kurulumun ayrıntılarını yazarım sonra. Kurduktan sonra /home'u 2.diske taşıdım.

Şöyleki:

Önce dizin oluşturup 2.diski buraya bağlıyoruz.

# mkdir /yenihome
# mount -t ext3 /dev/sdb1 /yenihome

/home 'da bulunan tüm dosyaları /yenihome 'a taşıyoruz.

# cd /home
# find . -depth -print0 | cpio --null --sparse -pvd /yenihome/

/home'un yerini değiştiriyoruz.

# umount /yenihome
# mv /home /eskihome
# mv /yenihome /home

...ve bağlıyoruz.

# mount -t ext3 /dev/sdb1 /home

Tabi bu bağlama işini fstab'a da ekliyoruz:

/dev/sdb1 /home ext3 usrquota,grpquota 1 1

Kaynak : http://eventualis.org/home-dizinini-tasimak/

Artık yazmam lazım gelir...

Bu günlüğü açalı uzun zaman oldu. Bir heyecanla açmıştım ama tek tük
yazılardan sonra kaldı öyle. Sildim o yazılarıda zaten. Şimdi tekrar
bişiler karalayım dedim Linux hakkında. Tırmalayıp duruyorum akşama
kadar şu ekranın önünde. Deneyimlerimi paylaşayım dedim bende işte. Öle
işte be ...