Kullanıcıları ve süreçleri kontrol etme

Sistem üzerinde tam denetim sağlamak özellikle güvenlik açısından çok önemlidir.Çünkü herhangi bir saldırı sadece dışardan değil , içerden de gelebilir ve ya kullanıcı sistem üzerinde zararlı bir program çalıştırabilir.İşte bu nokta da kullanıcıları ve süreçleri  kontrol altında tutmak gerekir.

GNU/Linux üzerinde "acct" (GNU Accounting Utilities ) adlı araçla kullanıcı ve süreçleri izleyebiliriz.İlk olarak eğer sistem üzerinde "acct" kurulu değil ise kurulumunu yapalım.

# yum install psacct ( CentOS için )
Diğer bazı dağıtımlarda "psacct" yerine "acct" yazarak kurabilirsiniz.Örneğin ;
# emerge acct   (Gentoo için)
# yum install acct ( Suse için )
Kurulum yaptıktan sonra "/var" dizini altında "account" adlı bir klasör ve bu klasörün içinde "pacct" adlı dosya oluşturması gerekir.Eğer bu klasör ve dosyayı oluşturmamışsa elle oluşturalım.
# mkdir /var/account
# touch /var/account/pacct
# chmod 660 /var/account/pacct
Süreç kayıtlarını aktif hale getirelim.
# accton /var/account/pacct
"acct" uygulamasını başlangıça ekleyelim ve çalıştıralım.( CentOS )
# chkconfig psacct on
# service psacct start
Artık "acct" uygulaması ile gelen bazı yararlı komutları inceleyelim."ac" komutu ile başlayalım."ac" komutu kullanıcının sistem üzerinde ne kadar süredir bağlı kaldığını gösterir.
 # ac
 total      537.71
Yukarda görüldüğü gibi "ac" komutu hiç bir parametre almadan sadece komutu veren kullanıcının ne kadar süre sistemde olduğunu gösteriyor.Eğer sistem üzerinde tüm kullanıcıların ne kadar süre sistem üzerinde olduklarını görmek için ise "-p"(people)  parametresi kullanıyoruz.
# ac -p
 ares                           537.95
 zeus                           100.00
 total      637.95
İkinci yararlı komutumuz ise "lastcomm" . "lastcomm" komutu ile hangi komutu kim,ne zaman,nerede verildiği hakkında bilgi verir.
# lastcomm
grep                   root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sed                    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sed                    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
grep                   root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sed                    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sed                    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
grep                   root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sh                F    root     pts/0      0.00 secs Fri Jan 21 06:56
sed                    root     pts/0      0.00 secs Fri Jan 21 06:56
"lastcomm" komutu parametresiz sistem üzerinde verilen tüm komutları listeler.Eğer belli bir kullanıcının verdiği komutları görmek istersek "lastcomm" komutundan sonra "kullanıcı adı"nı yazıyoruz.
# lastcomm ares
bash                   ares pts/1      0.02 secs Fri Jan 21 03:46
clear                  ares pts/1      0.00 secs Fri Jan 21 04:43
bash              F    ares pts/1      0.00 secs Fri Jan 21 04:43
bash              F    ares pts/1      0.00 secs Fri Jan 21 04:43
bash                   ares pts/0      0.04 secs Thu Jan 20 19:39
clear                  ares pts/0      0.00 secs Fri Jan 21 04:43
ssh                    ares pts/1      0.03 secs Fri Jan 21 03:46
firefox              X ares        1860.00 secs Thu Jan 20 16:24
plugin-containe        ares        454.73 secs Thu Jan 20 16:24
task1                X ares          0.35 secs Fri Jan 21 04:35
gnome-panel       F    ares          0.00 secs Fri Jan 21 04:35
xauth            S     ares pts/0      0.00 secs Fri Jan 21 04:31
whoami                 ares pts/0      0.00 secs Fri Jan 21 04:31
uname                  ares pts/0      0.00 secs Fri Jan 21 04:31
uname                  ares pts/0      0.00 secs Fri Jan 21 04:31
Diğer bir komut ise "sa" . "sa" komutu ile kayıt altına komutları ve bu komutların kaç defa çalıştırıldığını gösterir.
# sa
8014       0.16re       0.00cp         0avio      4475k   mv
 5495       0.01re       0.00cp         0avio      2052k   dirname
 5484       0.78re       0.00cp         0avio      5707k   libtoolize
 4377       0.18re       0.00cp         0avio      2071k   stty
 3621       0.02re       0.00cp         0avio      3445k   touch
 3258       0.09re       0.00cp         0avio      2326k   tr
 3214       0.14re       0.00cp         0avio      2319k   mkdir
 3055       0.01re       0.00cp         0avio      3365k   true
 2711       7.00re       0.00cp         0avio      2251k   collect2
 2687       0.13re       0.00cp         0avio      2658k   head
 2557       0.01re       0.00cp         0avio      2034k   expr
 2118       0.28re       0.00cp         0avio      2752k   sort
 1868       0.00re       0.00cp         0avio      2183k   uname
 1860       0.08re       0.00cp         0avio      5617k   autoconf-2.65
 1610       0.09re       0.00cp         0avio     17421k   python2.6
 1466       0.02re       0.00cp         0avio      1894k   ln
 1320       0.00re       0.00cp         0avio      3721k   chgrp
 1225       0.00re       0.00cp         0avio      5547k   shtool
"acct" ile gelen diğer bazı komutlar ise ;

last =Sisteme en son giriş yapan kullanıcılar listeler.

dump-acct = Kayıt dosyasını okunabilir  şekilde ekrana yazdırır.

"acct" ve komutları hakkında daha fazla bilgi için man sayfalarına ve şuraya bakabilirsiniz.

Qmail-Toaster kaldırmak için script

Qmail-Toaster kurulumu için hazırlanmış olan scriptler işimizi kolaylaştırıyordu.Kaldırmak içinde yine bir script işimizi kolaylaşıtırıyor.Qmail-Toaster mail listesinde  bunun için hazırlanmış bir script ile karşılaştım .İhtiyacımız olduğunda kullanabiliriz.

NOT: Script içinde "MYSQLPW" için vpopmail veritabanının parolasını girip,düzenlenmeyi unutmayın!

Scripti dosya halinde indirmek için tıklayın .

#!/bin/sh

CentOS 5

Remove Qmail-Toaster

Removes all the qmailtoaster rpms except zlib. Deletes all the needed users.

Deletes the Database. Deletes ALL the files and directories left behind. THIS

WILL WIPE THE SLATE CLEAN. YOU WERE WARNED. No Guarantee it will work for you.

Modify as you see fit. Pass improvements back to below email.

Set mysql password

MYSQLPW=your pasword here

Remove rpms in order of deps.

echo echo "Removing ALL Toaster RPMs in order of deps, except zlib" rpm -e simscan-toaster rpm -e clamav-toaster rpm -e spamassassin-toaster rpm -e squirrelmail-toaster rpm -e vqadmin-toaster rpm -e isoqlog-toaster rpm -e maildrop-toaster-devel rpm -e maildrop-toaster rpm -e qmailmrtg-toaster rpm -e qmailadmin-toaster rpm -e ezmlm-cgi-toaster rpm -e ezmlm-toaster rpm -e control-panel-toaster rpm -e autorespond-toaster rpm -e courier-imap-toaster rpm -e qmail-pop3d-toaster rpm -e qmail-toaster rpm -e vpopmail-toaster rpm -e ucspi-tcp-toaster rpm -e daemontools-toaster rpm -e send-emails-toaster

Drop vpopmail database.

echo echo "Dropping vpopmail database" mysqladmin -f -uroot -p$MYSQLPW drop vpopmail

Delete directories and files.

echo echo "Removing all directories and files associated with Qmail-Toaster" rm -f /etc/freshclam.conf.rpmsave rm -f /etc/tcprules.d/tcp.smtp.rpmsave rm -Rf /etc/ezmlm rm -Rf /etc/isoqlog rm -Rf /etc/log.d/scripts/services/vpopmail rm -Rf /etc/log.d/scripts/services/courier rm -Rf /etc/log.d/scripts/services/clamav rm -Rf /etc/log.d/scripts/services/qmail rm -f /usr/src/redhat/RPMS/i386/toaster.rpm rm -f /usr/src/redhat/RPMS/noarch/toaster.rpm rm -Rf /usr/share/toaster rm -Rf /usr/share/clamav rm -Rf /usr/src/qtms-install rm -Rf /usr/src/qtms rm -Rf /usr/share/doc/isoqlog rm -Rf /usr/share/courier rm -Rf /var/qmail rm -Rf /var/log/clamav rm -Rf /var/log/qmail rm -Rf /home/vpopmail echo echo "All done."

exit

Sunucu kimliği maskeleme

Sunucu ve uygulamalar hakkında saldırganlara bilgi vermek güvenlik zaafiyeti yaratabilir.Saldırganlara bu kolaylığı vermemek için bilgileri saklamamız gerekir.Özellikle web sunucusu hakkında dışarıya bilgi vermek hem sunucu tarafında hemde uygulama tarafında zaafiyet yaratır.Dünyanın popüler ve özgür web sunucusu "Apache" de sunucu imzasını(ServerSignature) ve web server bilgilerini (ServerTokens) konfigurasyon dosyasında değerlerini değiştirerek gizleyebiliriz.

Apache'nin sunucumuzun işletim sistemini,kendisini ve kurulu olan modülleri göstermemesi için "/etc/httpd/conf/httpd.conf" dosyası içinde;

ServerSignature Off ServerTokens Prod

değerlerini atayarak ayarlayabiliyoruz.Fakat sadece bunları yaparak sunucumuzun ne olduğunu saklayamıyoruz.Örnek olarak "netcraft" kolaylıkla web sunucumuzun "Apache" olduğunu   söylecektir.Eğer test etmek istiyorsanız netcraft.com adresine girerek ya da kısaca " http://toolbar.netcraft.com/site_report?url=site_adiniz.com " şeklinde sorgulatarak öğrenebiliriz.

Netcraft'tan  :

Yukarda görüldüğü gibi sunucu kimliğimizin "Apache" olduğu ortada.Başka bir şekilde " nmap " ile tarayarak da test edelim.("Nmap nedir?" diyorsanız buradan )Sisteminizde "nmap" mevcut değilse paket yöneticisi yardımı ile kurun.

# yum install nmap
Eğer grafik arabirimi ile kullanmak istiyorsanız "zenmap" i kurabilirsiniz."zenmap"i de kurmak için;
# yum install zenmap
Sistemimize "nmap" kuruldu ise sunucunuzun ip  adresini ya da adını yazarak taratın.Eğer sunucuyu maskelememişsek nmap Apache'nin parmak izini(fingerprint) tanıyacaktır ve size 80. portta Apache sunucusunun çalıştığını söylecektir.

Zenmap'ten :

Demek ki Apache'deki "ServerSignature Off " ve "ServerTokens Prod" değerleri sunucu bilgisini gizleyemiyor sadece kısıtlama yapabiliyor.Şimdi sunucu bilgilerimizi tamamen saklayalım.Bu maskeleme işlemini Apache'nin "mod_security" ile yapacağız.Eğer "mod_security" modülü yüklü değilse yükleyelim.CentOS üzerine bu modülü yüklemek için "EPEL" deposunu eklemiş olmanız gerekiyor.(" Epel deposu eklemek için yardım ")Paket yöneticisi ile hemen yükleyelim;

# yum install mod_security
Modülü kurduktan sonra ilk önce "mod_security" kuralları aktif edelim."modsecurity_crs_10_config.conf" dosyasına "SecRuleEngine On" satırını ekleyelim.
# vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf
+  SecRuleEngine On
Şu an "mod_security" modülümüz hazır.Artık Apache'nin kimliğini maskeleyelim.Bunun için biraz önce " SecRuleEngine On " satırını eklediğimiz "modsecurity_crs_10_config.conf" dosyasına "SecServerSignature " satırını eklemeliyiz."SecServerSignature " değeri için istediğiniz ismi girebilirsiniz,hatta farklı aldatmaca sunucu kimlikleri de kullanabilirsiniz.Örnek olarak :
+ SecServerSignature  " Ulak Web Server"
Yukardaki satırı ekledikten sonra Apache'deki "ServerTokens" değerini "Major" olarak değiştirin.
# vi /etc/httpd/conf/httpd.conf
" ServerTokens Major "
Bu değişikliği de yaptıysanız "Apache"yi yeniden başlatalım.
# service httpd restart
Web sunucumuzun kimliği dışarıya karşı maskelendi.Artık testler yaparak kontrol edebiliriz.

EPEL ve RPMforge depolarını ekleyin

CentOS resmi depoları kısıtlı ve aradığımız bazı paket ve ya uygulamaları bu depolarda bulamayabiliriz.Fakat EPEL ve RPMforge depoları ile neredeyse ihtiyacımız olan birçok paket ve uygulamaları kapsar nitelikte.Sizde EPEL ve RPMforge depolarından herhangi birini ya da ikisini de  ekleyerek deponuzu genişletebilirsin.

"RPMforge " deposunu ekleyelim:

  • İlk olarak kendi sürüm ve mimarimize uygun paketi indirelim:

CentOS 6 :

i686 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

x86_64 : http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

CentOS 5 :

i686 : http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

x86_64 : http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

  • Kendimizi uygun olan paketi indirdikten sonra deponun anahtarlarını içe aktaralım .

#   rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

  • Anahtar listesini aktardığımıza göre indirdiğimiz "rpm"  paketini kontrol edelim.

# rpm -K rpmforge-release-0.5.2-2.el.rf..rpm (kendi mimarinize ve sürümünüze uygun indirdiğiniz paket)

  • Doğruluğu teyit edildiğine göre artık paketi yükleyip,depomuzu ekleyelim.

# rpm -i rpmforge-release-0.5.2-2.el.rf..rpm

EPEL deposunu ekleyelim:

  • EPEL deposu içinde ilk olarak kendi mimarimize ve sürmümüze uygun olan paketi indirelim;

CentOS 6 (Beta aşamasında ) :

i386 : http://download.fedora.redhat.com/pub/epel/beta/6/i386/epel-release-6-5.noarch.rpm

x86_64 : http://download.fedora.redhat.com/pub/epel/beta/6/x86_64/epel-release-6-5.noarch.rpm

CentOS 5 :

i386 : http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

x86_64 : http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

  • Kendi mimarimize ve sürümümüze uygun paketi indirdikten sonra depomuzu kuralım.

# rpm -i epel-release--.noarch.rpm

* Ya da hiçbir paket indirmeden doğrudan paketi kurup,depoyu ekleyebiliriz.

rpm -ivh http://download.fedora.redhat.com/pub/epel///epel-release--.noarch.rpm

Depolarımızı sisteme ekledik fakat bu depolarda sistemde yüklü olan taban ya da diğer paketlerin,uygulamaların farklı sürümleri mevcut olabilir.Sistem kararlılığını riske atmamak için bu depoların önceliğini değiştirelim ya da sadece ihtiyacımız olduğu zaman kullanalım.

1.İhtiyaç halinde depolar:

  • Eklediğimiz depoları ihtiyaç halinde ,istediğimiz zaman kullanmak için öntanımlı olarak "geçersiz" bırakalım.Depoları geçersiz bırakmak için depo konfigurasyon dosyalarındaki "enabled=1" ifadesini "enabled=0" olarak değiştirelim.

# vi /etc/yum.repos.d/rpm.forge.repo

# vi /etc/yum.repos.d/epel.repo

Yukardaki dosyaları bir editör ile açtıktan sonra depoları "enabled=1" yaparak geçersiz kılalım.Ya da diğer bir yolla :

# sed -i “s/enabled=1/enabled=0/” /etc/yum.repos.d/epel.repo

# sed -i “s/enabled=1/enabled=0/” /etc/yum.repos.d/rpm.forge.repo

Şeklinde yaparak da değeri değiştirebilirsiniz.Depoların geçersiz olup olmadığını kontrol edelim.

# yum repolist all

Bu komutla eklediğimiz depoların karşısında geçersiz olduğunu gösteren kırmızı ile "disabled" yazısını göreceksiniz.Artık depolara ihtiyacımız olduğunda  "yum" komutundan sonra "--enablerepo=epel" ya da "--enablerepo=rpmforge" şeklinde yazarak kullanabiliriz.Örnek :

# yum --enablerepo=epel install mod_security

2.Depoların önceliğini değiştirelim:

  • Yukarda dediğim gibi eklediğimiz bu depoların herhangi bir kararsızlığa mahal vermemesi için depolar için öncelik ayarı yapabiliriz.Depolara öncelik ayarı yapmak için "yum-priorities" paketini kuralım.

# yum install yum-priorities

  • Paketini kurduktan sonra ekli olan tüm depoları geçerli yapabiliriz.Depoları geçerli hale getirmek için "enable=0" değerini "enable=1" yapın.Artık depolara öncelik verelim.Depolara öncelik atamak için "priority=DEĞER" şeklinde bir öncelik tanımlayabiliriz.Mesela CentOS'un kendi depolarına "priority=1" değerini atalım.Diğer EPEL ve RPMforge depolarına "priority=2" değerini atayalım.Depolara değer atamak için "priority" değerlerini depo konfigurasyon dosyalarına her depo alt satırına ekleyelim.Örnek:

# vi /etc/yum.repos.d/epel.repo

[epel] name=Extra Packages for Enterprise Linux 5 - $basearch

baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch

mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL priority=2

QMail-Toaster DKIM kurulumu

QMail-Toaster Mail sunucunuz üzerinde mailleri DKIM(DomainKeys Identified Mail) ile imzalamaya kısaca değineceğim.DKIM ile imzalamak mail sunucunuzdan çıkan her mailin gerçekten sizin sunucunuzdan çıktığını kanıtlamak için kullanılır.Özellikle bazı büyük mail sağlayıcıları yahoo,gmail bunu kullanmaktadır.

Qmail-Toaster üzerine DKIM'i kurmaya başalamadan önce eğer Centos(ya da RHEL,FEDORA) üzerine "rpmforge" deposunu eklemediyseniz hemen ekleyelim."RpmForge" ek deposunu eklemek için kendi dağıtım ve sürümünüze uygun rpmforge "rpm" paketini "http://dag.wieers.com/rpm/packages/rpmforge-release/" adresinden indirelim ve indirdiğimiz paketi kuralım.

$ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm (Centos 5 64 bit için)
# rpm -i rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
"RpmForge"  paketini kurduktan sonra paket depolarını güncelleyin.
# yum update
Böylece depomuza "rpmforge" ek deposunu ekledik.Şimdi "DKIM" kurulumuna geçebiliriz.İlk QMail-Toaster'ın DKIM scriptlerini sisteme indirelim.

$ wget http://qmailtoaster.com/dkim.tgz

$ tar zxvf dkim.tgz
$ cd  dkim
"dkim" paketini sisteme indirip,açtıktan sonra kurulum adımlarına devam edelim.Eksik perl paketlerini sisteme kuralım;(bazı paketler Centos dağıtım depolarında bulunmadığı için "rpmforge" ek depolarını kurmuştuk.Özellikle "perl-Mail-DKIM" paketi ve bağımlılıkları dağıtım deposunda bulunmuyor.)
# yum install perl-XML-Simple perl-Mail-DKIM perl-XML-Parser
Eksik paketlerimizde kurulduysa bu adımda başarı ile tamamlandı.Artık "DKIM"i "QMail"e adapte edelim.Bunun için ise control dosyalarının olduğu bölüme "dkim" adlı bir dizin oluşturup içine "dkim" imzamızı oluşturalım.Aşağıdaki adımları sırayla takip edin;
# mkdir /var/qmail/control/dkim
# cp signconf.xml /var/qmail/control/dkim/
# chown -R qmailr:qmail /var/qmail/control/dkim/
# dknewkey /var/qmail/control/dkim/global.key > /var/qmail/control/dkim/public.txt
# perl -pi -e 's/global.key/dkim1/' /var/qmail/control/dkim/public.txt
# qmailctl stop
Bu adımlardan sonra imzamızı oluşturduk ve en sonunda "qmail"i durdurduk,şimdi eski "qmail-remote" dosyasını "dkim" paketi ile gelen "qmail-remote" dosyası değiştirip izinleri ayarlayalım.
# mv /var/qmail/bin/qmail-remote /var/qmail/bin/qmail-remote.orig
# mv qmail-remote /var/qmail/bin
# chmod 777 /var/qmail/bin/qmail-remote
# chown root:qmail /var/qmail/bin/qmail-remote
# qmailctl start
Buraya kadar hiçbir hata ile karşılaşmadıysanız "DKIM" başarı ile kuruldu ve artık geriye sadece dns'imize oluşan TXT kaydını eklemek kaldı.
$ cat /var/qmail/control/dkim/public.txt
Yukardaki komuttan sonra çıkan TXT kaydını DNS Zone dosyanızda yayınlayın.Tüm adımlar bu kadar.Artık mailleriniz "DKIM" ile imzalanacak.

How to setup DKIM with qmail-toaster