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 ...