Sinan Uzunoglu Kişisel Blog sayfası
Ocak, 2009 için arşivler
Mysql Destekli Pure-FTPD Kurulumu
29 Oca
| Bilindiği gibi Pure-FTPD olukça güvenli bir yapı sağlayan güzel bir FTP sunucusudur. Pure-FTPD ile sistem kullanıcılarından farklı olarak sanal kullanıcılar oluşturabilir ve oluşturduğunuz bu sanal kullanıcıları mysql üzerinde tutabilirsiniz. |
Pure-FTPD’nin sunduğu bu güzel özellik sayesinde, ftp kullanıcılarınıza ait hesapları, gerçek sistem kullanıcılarınızdan ayırmış oluyorsunuz. Her ne kadar bu özellik belli başlı diğer FTP sunucularında da bulunuyor olsa da, Pure-FTPD’nin default olarak gelen daha bir çok güzel özelliği bulunuyor. Bu nedenle Pure-FTPD kullanmanızı öneririm.
Bu makalede FreeBSD 7.0 üzerine mysql destekli pure-ftpd kurulumu ile ilgili notları bulabilirsiniz.
Kurulumu yapabilmek için öncelikli olarak MySQL Server kurulu olmalı. Eğer kurulu değilse önce bu işi halledin. FreeBSD’de kurulumları genel olarak port ağacından yapıyorum.
Not: Eğer ports ağacı sisteminizde kurulu değilse portsnap ile yükleyebilirsiniz.
Port ağacından aşağıdaki gibi MySQL kurulumu yapın.
Not: Sisteminizde hali hazırda kurulu ise bu adımı atlayın.
# cd /usr/ports/databases/mysql50-server/ # make install clean
Herhangi ek bir özellik şeçmenize gerek yok.
MySQL server ilk kurulduğunda root şifreleri boş olarak gelir. Bu nedenle bir root şifresi tanımlamak gerekiyor. Aşağıdaki adımları uygulayarak bu işlemi yapın.
# mysql -u root mysql> use mysql; mysql> update user set password=PASSWORD("Root_Sifresi") where User='root'; mysql> flush privileges; mysql> quit;
Mysql server hazır ise, Pure-FTPD kurulumuna geçebiliriz. Bu iş için de port ağacından yararlanıyoruz. Aşağıdaki adımlarla kurulumu yapın.
Not: make install dediğiniz zaman gelen options ekranından MySQL’i seçin.
# cd /usr/ports/ftp/pure-ftpd/ # make install clean
Pureftpd pearl’e ihtiyaç duyduğu için sisteminizde yüklü olmaması halinde bu paket de kurulacaktır. Bu nedenle kurulumun tamamlanması biraz zaman alabilir.
pure-ftpd’nin örnek konfigürasyon dosyaları ön tanımlı olarak /usr/local/etc dizini altında ve start stop scripti /usr/local/etc/rc.d altında pure-ftpd ismi ile durmaktadır. Biz pure-ftpd’yi mysql destekli kullanacağımızdan dolayı /usr/local/etc dizini altında ki iki dosyadan yararlanacağız. Ancak şimdilik mysql tarafındaki ayarları yapacağız.
Önce, mysql’de pureftpd için oluşturulacak database’e erişim için kullanılacak bir hesap açıyoruz.
Mysql’e bağlanın:
# mysql -u root -p
Enter password:
mysql>
Şimdi de aşağıdaki insert satırını kullanarak -kırmızı ile işaretli kullanıcı ve şifre alanlarını düzenlemeyi unutmayın- kullanıcıyı oluşturun ve Flush Privileges yapın.
mysql> INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv,
Update_priv,Delete_priv, Create_priv, Drop_priv,Reload_priv, Shutdown_priv,
Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv)
VALUES('localhost','kullaniciadi',PASSWORD('sifre'),'Y','Y','Y','Y','N','N','N',
'N','N','N','N','N','N','N');
mysql> FLUSH PRIVILEGES;
Şimdi de database’i oluşturuyoruz:
Not: Örnek komutta db’yi pureftpd ismi ile açıyoruz. Siz farklı bir isim verebilirsiniz.
mysql> CREATE DATABASE pureftpd;
Ardından tabloyu create edin:
mysql> USE pureftpd;
mysql> CREATE TABLE `users` (
`User` varchar(16) NOT NULL default '',
`Password` varchar(32) binary NOT NULL default '',
`Uid` int(11) NOT NULL default '14',
`Gid` int(11) NOT NULL default '5',
`Dir` varchar(128) NOT NULL default '',
`QuotaFiles` int(10) NOT NULL default '500',
`QuotaSize` int(10) NOT NULL default '30',
`ULBandwidth` int(10) NOT NULL default '80',
`DLBandwidth` int(10) NOT NULL default '80',
`Ipaddress` varchar(15) NOT NULL default '*',
`Comment` tinytext,
`Status` enum('0','1') NOT NULL default '1',
`ULRatio` smallint(5) NOT NULL default '1',
`DLRatio` smallint(5) NOT NULL default '1',
PRIMARY KEY (`User`),
UNIQUE KEY `User` (`User`)
) TYPE=MyISAM;
Gördüğünüz gibi, pureftpd’nin kullanıcılara uygulayacağı bandwidth, quota vs. gibi ayarlar da mysql tablosunda tutuluyor. Kullanıcı eklerken bu sınırlamalara değineceğim. Database ve tablo oluşturulduğuna göre pure-ftpd konfigürasyonunu tamamlayabiliriz.
Aşağıdaki şekilde örnek dosyaların birer kopyasını alarak ana conf dosyalarını oluşturun.
# cd /usr/local/etc
# cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
# cp pure-ftpd.conf.sample pure-ftpd.conf
Bu dosyaları editlemeden önce, pure-ftpd’nin açılışlarda otomatik olarak başlaması için /etc/rc.conf dosyasına aşağıdaki komutla pure-ftpd enable satırını girin. Ancak pureftpd’yi henüz başlatmayacağız.
# echo pureftpd_enable='"YES"' >> /etc/rc.conf
Şimdi, pureftpd’nin ftp kullanıcıları için kullanacağı sistem hesabını ve grubunu ekleyelim.
pw groupadd ftpgroups pw useradd ftpusers -g ftpgroups -d /nonexistent -s /usr/sbin/nologin
Gördüğünüz gibi sisteme login yetkisi olmayan bir kullanıcı ve bir grup ekledik. Pureftpd bu kullanıcının yetkilerini, sanal ftp kullanıcıları için kullanacak. Yani tek bir sistem hesabı ile birden çok sanal kullanıcı oluşturabileceğiz. Biraz sonra sanal bir kullanıcı açarken bu sistem hesabının UID ve GID değerlerini pureftpd’ye bildireceğiz.
Şimdi de pureftpd conf dosyalarındaki işlemleri yapalım.
Önce pureftpd-mysql.conf dosyasındaki yapılandırma işlemlerini halledelim.
Aşağıdaki gibi ilgili dizine gidin ve biraz önce örnek dosyadan kopyalayarak oluşturduğumuz dosyanın içeriğini boşaltın. (Satırların açıklamalar için sample.cfg dosyasını kullanabileceğimiz için bunun bir sakıncası yok.)
# cd /usr/local/etc/ # > pureftpd-mysql.conf
Elimizdeki boş cfg. dosyası editleyerek içerisine aşağıdaki satırları paste edin ve kaydedin.
Not: Kırmızı ile işaretli bölümleri kendi belirlediğiniz db adı, kullanıcı ve şifre ile değiştirmeyi unutmayın.
MYSQLServer 127.0.0.1 MYSQLSocket /tmp/mysql.sock MYSQLUser kullaniciadi MYSQLPassword sifre MYSQLDatabase pureftpd MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetUID SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetGID SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetDir SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
Görüldüğü gibi pureftpd bu dosyadaki select sorgularından yararlanarak kullanıcılara ait tüm bilgileri çekiyor.
Şimdi de ana conf dosyası olan pure-ftpd.conf dosyasındaki ayarları yapalım.
Tekrardan dosyanın içeriğini boşaltacağız.
# cd /usr/local/etc/ # > pure-ftpd.conf
Ve boş olan bu dosyayı editleyerek aşağıdaki satırları ekleyin ve kaydedin.
ChrootEveryone yes BrokenClientsCompatibility no MaxClientsNumber 50 Daemonize yes MaxClientsPerIP 8 VerboseLog no DisplayDotFiles yes AnonymousOnly no NoAnonymous yes SyslogFacility ftp DontResolve yes MaxIdleTime 15 MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf LimitRecursion 2000 8 AnonymousCanCreateDirs no MaxLoad 4 AntiWarez yes Umask 027:027 MinUID 100 AllowUserFXP no AllowAnonymousFXP no ProhibitDotFilesWrite no ProhibitDotFilesRead no AutoRename no AnonymousCantUpload yes NoChmod yes CreateHomeDir yes MaxDiskUsage 99 CustomerProof yes
Bu satırların açıklamalarına aynı dizindeki pure-ftpd.conf.sample dosyasından bakabilirsiniz, ancak önemli olan bir ikisi ile ilgili açıklamaları vermek istiyorum.
ChrootEveryone Burada yes diyoruz ve kullanıcıları home dizinlerine hapsediyoruz. Bildiğiniz gibi tüm sanal kullanıcılar için bir adet gerçek sistem hesabı kullanılıyor. Bu nedenle kullanıcıları chroot yapmazsanız, herkes herkesin dizinlerini okuyabilir ve yazabilir.
AnonymousOnly Buraya no diyoruz ve sunucunun anonim bir ftp sunucusu olmadığını belirtiyoruz.
NoAnonymous Anonim isteklere izin vermiyoruz. Kimlik doğrulaması şart.
MySQLConfigFile Mysql’e bağlanmak ve select ile bilgi çekmek için kullanılan conf dosyasının yeri.
Umask Upload edilen dosya ya da dizinler için verilecek umask değeri. Bizim örneğimizde umask değeri 027:027 veriliyor. Yani 777 – 027 = 750. Owner’a full yetki, gruba okuma ve listing. Bu konuyla ilgili küçük bir örnek vermek gerekirse. FTP sunucunuzun bir web sunucusu ile birlikte çalıştığını ve webmaster’ın ftp üzerinden dosyalara erişmesi gerektiğini düşünelim. Bu dizin için owner’i ftp kullanıcıları için açtığınız sistem hesabı ve grup olarak da apache’nin grubunu belirlerseniz ilgili ftp kullanıcısı bu dizine yazıp çizebilirken apache sadece okuyabilir ve list çekebilir.
NoChmod No diyerek kullanıcılara permission değiştirme yetkisi vermiyoruz.
CreateHomeDir Bu bölümde yes derseniz, sistemde home dizini bulunmayan bir kullanıcı login olduğu zaman mysql’den çekilen path’e göre ilgili dizin oluşturulur. No demeniz durumunda açtığınız ftp hesaplarının home dizinlerinin sistemde bulunması gerekir.
Önemlilerinden bir kaç özellik bu şekildeydi. Ancak sample dosyasını okumanızı ve diğer özellikler hakkında bilgi almanızı öneririm.
Konfigürasyon işleri de bittiğine göre pureftpd’yi start edebiliriz.
# /usr/local/etc/rc.d/pure-ftpd start
Son olarak da test edebilmek için bir kullanıcı açalım ve bu kullanıcı ile bir bağlantı denemesi yapalım. Kullanıcıları pureftpd database’indeki users isimli tabloya ekleyerek açıyoruz.
Komut satırından bir kullanıcı ekleyelim.
Önce mysql’e bağlanıyoruz:
# mysql -u root -p
Enter password:
mysql> use pureftpd;
Sonra da aşağıdaki gibi bir insert satırını kırmızı alanları kendimize göre düzenledikten sonra giriyoruz.
INSERT INTO pureftpd.users VALUES ('deneme',MD5('sifre'),1007, 1007, '/kullanici/icin/home/dizini', 0, 0, 0, 0, '*', 'Deneme Kullanicisi', '1', 0, 0);
Not: Kullanici adi ve sifre’den sonra gelen 1007 ibareleri sistemde actigimiz ftpusers/ftpgroups kullanici ve gruplarının UID/GID değerleridir. Dolayısı ile siz buraya kendi sisteminizdeki UID ve GID değerlerini girmelisiniz. Ilgili UID ve GID bilgilerine ulaşmak için aşağıdaki komutları kullanabilirsiniz.
UID için komut ve çıktısı:
# more /etc/paswd |grep ftpusers ftpusers:*:1007:1007:User &:/nonexistent:/usr/sbin/nologin
GID için komut ve çıktısı:
# more /etc/group |grep ftpgroups ftpgroups:*:1007:
UID ve GID değerlerini bildirmezseniz permisson sorunları yaşamanız muhtemeldir. Bu UID ve GID pureftpd tarafından kullanıcı dizinlerinde kullanılmaktadır.
Bunun dışında, yukarıdaki mysql insert cümlesi ile herhangi bir sınırlama getirilmemiş bir kullanıcı açtık; ancak bantgenişliği kullanımı ya da quota ile ilgili sınırlamalar getirmek istiyorsanız. users isimli tablonun yapısını inceleyebilirsiniz.
Ben kullanıcıyı direk mysql komut satırından açtım ancak siz bu iş için webmin ya da sqlyoq gibi bir management yazılımı kullanabilirsiniz.
Ayrıca pureftpd kullanıcılarını yönetmek üzere yazılmış User Manager for Pureftpd isimli bir php uygulaması da bulunuyor. Bunu da kullanmak isteyebilirsiniz. İlgili konu ile alakalı döküman hemen aşağıdaki kaynaklar bölümünde verilmiştir.
Hepsi bu kadar.
Kendi kullanıcınızı açtıysanız, test edebilirsiniz. Herhangi bir sorun ile karşılaşmadıysanız başarılı bir ftp bağlantısı kurmanız gerekir.
Kaynaklar:
http://www.pureftpd.org/project/pure-ftpd
http://machiel.generaal.net/index.php?subject=pureftpd&language=eng
IPFIREWALL ve Snort_Inline ile IPS – Part 1: IPFW Kurulumu
29 Oca
| Bir kaç gündür IPFW ve Snort_Inline ile oluşan open source bir IPS sistemini devreye almak için uğraşıyordum. Bu iki bölümlük yazıda kurulumun nasıl yapıldığı ve konfigurasyonlarla ilgili notları paylaşacağım. Siz de networkünüzde IPS olarak IPFW/Snort_Inline ikilisinden yararlanmak isterseniz belki bu döküman işinize yarayabilir.Zira binlerce dolar ödeyip karşılığında alacağınız bir hardware IPS yerine hiç bir ücret ödemeden bir IPS sistemine sahip olmak cazip bir seçenek olabilir. Kaldıki Snort’un sektörde artık bir standart haline gelmiş olması kafanızdaki şüpheleri ortadan kaldırabilir
Önce IPFIREWALL. |
IPFIREWALL NEDİR ?
Namı diğer IPFW, FreeBSD tarafından geliştirilen hem Stateless hem de Statefull firewall mimarisini üzerinde barındıran güzel bir ip tabanlı firewall yazılımıdır. Ayrıca, traffic shaping, transparent forwarding ile NAT ve PATgibi özellikler sağlar. Bu özellikler ile ilgili detayli bilgiyi, dökümanın “ipfw komutları” bölümünde bulabilirsiniz. Öncelikle nasıl kurulduğuna değineceğim.
NASIL KURULUR ?
Aslında IPFW, FreeBSD ile birlikte loadable module olarak geldiği için NAT uygulaması kullanmak istemeniz haricinde ekstradan herhangi bir kuruluma ihtiyaç duymazsınız. Açılışta firewall’un devreye girmesi için rc.conf dosyasına aşağıdaki satırı girmeniz yeterlidir.
firewall_enable="YES" |
Ancak NAT kullanmak istemeniz durumunda (ki snort_inline için gerekmektedir.) kernelinize options IPDIVERT satırını eklemeniz ve yeniden derlemeniz gerekmektedir. Kernelinizi yeniden nasıl derleyebileceğiniz ile ilgili bilgiye, daha önce yazmış olduğum Custom Kernel dökümanından ulaşabilirsiniz.
NAT dışında gerekli olmasa da bilgi olması açısından IPFW’nin kernel opsiyonları şu şekilde.
KERNEL OPTIONS:
options IPFIREWALL
Firewall’un enable edilmesi için.
options IPFIREWALL_VERBOSE
Firewall’un üzerinden geçen trafiği loglamak için kullanılır. Kurallarınızın nasıl işlediğini /var/log/security isimli log dosyasından takip edebilirsiniz.
options IPFIREWALL_VERBOSE_LIMIT=200
Bir kurala ait işlemin kaç kez loglanacağını belirler. Bu örnekte 200 satır. Herhangi bir kuralla ilgili olarak loglanan bir işlem 200 kere tekrarlandığı zaman, loglama işlemi o kural için durdurulur. Loglama işlemine kısıtlama getirerek servera binen işlemci yükünü hafifletebilirsiniz. Ayrıca birinin firewall’unuza devamli paket göndermesi ve bunların hepsini loglamanız durumunda oluşacak syslog flooading (DoS) saldırısının da önüne geçmiş olabilirsiniz.
options IPFIREWALL_DEFAULT_TO_ACCEPT
Bu opsiyon default olarak gelen ve giden herşeyin kabul edilmesini sağlar. Bu opsiyon aktifleştirilmezse firewall’unuz closed modda çalışacaktır. Yani herşey deny edilecektir. Bu durumda izin vermek istediğiniz bağlantılar için rulelar oluşturmanız gerekir.
NOT: Eğer firewall ile ilgili işlemleri SSH bağlantısı ile uzaktan yapıyorsanız, bu seçeneği aktif etmemeniz ya da kendiniz için SSH bağlantısına izin veren bir rule tanımlamamanız durumunda bindiğiniz dalı kesmiş olursunuz. Bir console bağlantısına sahip olmanız yararınızadır Ya da kerneli yeniden derlemeden önce rc.conf dosyanıza firewall_type=”open” satırını ekleyip gelen giden herşeye izin verebilirsiniz. Firewall_Type ile ilgili rc.conf seçeneklerini bir sonraki bölümde bulabilirsiniz.
options IPV6FIREWALL
options IPV6FIREWALL_VERBOSE
options IPV6FIREWALL_VERBOSE_LIMIT
options IPV6FIREWALL_DEFAULT_TO_ACCEPT
IP Version6 için gerekli opsiyonlar. Gördüğünüz gibi IPv4 opsiyonları ile aynı.
options IPDIVERT
NAT (Network Address Translation) yapabilmek için gerekli opsiyon. Ayrıca, Snort_Inline gibi Divert soketinden paketleri alıp inceleyen yazılımlara yönlendirme yapmak için de gerekiyor. Bu özellik default olarak gelmemekte, devreye almak için bu kernel parametresini girip kerneli yeniden derlemeniz gerekmektedir.
options DUMMYNET
Trafik shaping yapmak için. Banwith limitlemesi ya da queue düzenlemesine olanak sağlar.
RC.CONF SEÇENEKLERİ:
firewall_enable=”YES”
Açılışta firewall’u devreye alır.
firewall_type=”open”
Firewall’un hangi tipte çalışacağını belirler. Seçenekler ve ne iş yaptılkları şöyle:
open : Gelen giden herşeye izin ver.
client : Sadece bu makineyi koru.
simple : T0üm ip networkünü koru.
closed : Loopback interfacei hariç gelen giden herşeyi yasakla.
filename : firewall rulelarini içeren dosya.
Kurallarınızı firewall’a uygulamanız için iki yol bulunmaktadır. Birincisi rc.conf dosyasında
firewall_type="filename"
parametresi ile belirttiğimiz rule dosyamıza yazacağımız rulların açılışta devreye alınmasını sağlamak.
Mesela, /etc dizini altında ipfw.rules isimli bir dosya oluşturalım ve içerisine aşağıdaki “gelen giden herşeye izin ver” anlamındaki firewall rulelarını yazalım.
add any in all add any out all |
Sonra /etc/rc.conf dosyamıza firewall_type=”/etc/ipfw.rules” satırını ekleyip kaydedelim. Bu durumda serverı restart ettiğiniz zaman açılışta firewall devreye alınacak ve type satırında yazan pathteki dosyada bulunan rulelar sisteme eklenecektir. Bu şekilde herhangi bir command-line komutu kullanmadan rulelarınızı devreye alabilirsiniz.
Bir diğer yöntem ise bir shell script oluşturup ruleları sisteme eklemektir:
Gene /etc altında ipfw.rules isimli bir dosya oluşturup içerisine aşağıdaki satırları girelim.
#!/bin/sh ipfw -q flush ipfw add block in all ipfw add block out all |
Daha sonra /etc/rc.conf dosyasına firewall_script=”/etc/ipfw.rules” yazalım.
Şimdiki yöntemde rc.conf dosyasında firewall’a ruleları içeren script dosyasının yerini söyleyip restart ettiğiniz zaman, açılışta firewall devreye alındıktan sonra bu script dosyası çalıştırılacak ve rulelar sisteme eklenecektir. Bu yöntemin güzel bir özelliği rule scriptinde herhangi bir değişiklik yaptıktan sonra sistemi restart etmenize gerek kalmaksızın script dosyasını çalıştırmak suretiyle değişiklikleri devreye almanıza izin vermesidir. Rule Script’ konusunda detaya “Ipfw komutları” bölümünde yer vereceğim.
firewall_logging=”YES”
Firewall üzerinden geçen trafiği loglamak için. Bu noktada dikkat etmek gereken bir şey var. Normalde bu satırı eklediğiniz zaman net.inet.ip.fw.verbose isimli sysctl variable’ı 1 olarak set ediliyor ve devreye alınıyor.Ancak log limiting için herhangi bir rc.conf ayarı yok. Eğer kernelinizi options IPFIREWALL_VERBOSE_LIMIT=200 satırı ile yeniden derlemediyseniz, bu ayarı /etc/sysctl.conf dosyanızda manuel olarak girmeniz gerekiyor.
net.inet.ip.fw.verbose_limit=5 |
Not: Benim kurulumunda, kernel’i log limit seçeneği ile yeniden derlemiş olmama rağmen logginde sorun çıkmıştı. Bu nedenle sysctl.conf dosyasına net.inet.ip.fw.verbose=1 satırını manuel olarak ekledim. Ayrıca limit işlemi için de script dosyası içerisinde “logamount” isimli ipfw komutunu kullanıyorum. Bu komutla ilgili bilgi “ipfw komutları” kısmında bulunuyor.
gateway_enable=”YES”
Bu parametre, FreeBSD’yi gateway olarak kullanmak ve ethernet kartları arasında geçiş sağlamak için gereklidir. Bir firewall kurduğumuza ve muhtemelen networkümüzün çıkış kapısı olarak kullanacağımıza göre bu FreeBSD’yi gateway olarak kullanmanız gerekecektir.
tcp_drop_synfin=”YES”
SYN+FIN içeren TCP paketlerini drop eder. Bu özelliğin nmap ile işletim sisteminizin algılanmaması gibi işlevleri vardır.
ÇALIŞMA PRENSİBİ
IPFW’yi devreye aldıktan sonra, sıra networkümüze ve güvenlik politikamıza göre kurallar oluşturmaktan ibaret geliyor. Ancak önce ipfw’nin mantığından ve söz diziminden bahsedelim. Öncelikle yazının başında adı geçen statless ve stateful firewall kavramlarına değinmekte yarar var. Zira bu her iki firewall kavramını IPFW’de uygulamanız mümkün.
Sateless Firewall:
Stateles (durum kontrolsüz) firewall, kuralların statik olarak tanımlandığı temel paket filtreleme yöntemidir. Ancak eski ve çeşitli alanlar haricinde pek güven vermeyen bir yöntemdir. Zira ilk nesil paket filtreleme teknolojisi olan bu yöntem, IP ve transport layer’da çalışan ve gelen paketlerin sadece header bilgilerinden hareketle karar veren bir yapı olduğu için oldukça basit olarak çalışır. Data akışını kontrol etmeksizin gelen ya da giden paketlerin kaynak ipsini, ulaşmak istediği port ve protokolünü inceler. Eğer üzerinde bağlantı isteğine uyan bir kural varsa , kuralın aksiyon bölümünden hareketle paketi geçirir ya da keser. Bağlantının akışını takip etmediğinden dolayı, firewall’dan daha önceden geçerek kurulmuş bir bağlantının abuse edilmesi suretiyle sisteme saldırıda bulunulmasının önüne geçemez.
Eski olmasına ve güven vermemesine rağmen çeşitli ortamlarda halen kullanmak mümkündür. Örneğin iki farklı lokasyonunuz olması durumunda lokasyonlar arası trafik için stateless kurallar kullanabilirsiniz. Zira kendi kendinize saldırmak gibi bir durum söz konusu olmaz heralde.
Stateful Firewall:
Stateful inspection (durum kontrolü) olarak da anılan Stateful (dinamik filtreleme) yapısı, stateless yapısından ayrı olarak bağlantı oturumlarını da gözeterek kuralları bu doğrultuda uygulayan bir yöntemdir ve dinamik kurallar oluşturarak işlem yapabilen mimarilerdir. Bu yapıya ait örnekleri söz dizimi ve komutlar kısmında bulabilirsiniz.
Stateful ve Stateless kavramlarına kısaca değindikten sonra, firewall’un çalışma prensibine geçelim.
Her bir rule için bir kural numarasına ihtiyaç vardır ve ipfw 65535 adet kural tanımlamasına izin vermektedir. Firewall tipini closed olarak tanımladıysanız. 65535 nolu kural “deny ip from any to any“ olacak ve gelen giden herşeyi yasaklayacaktır. Firewall mantığında gelen paketler kural numaralarına göre yukarıdan aşağıya doğru adım adım incelenir, paket birinci kural ile eşleşmiyorsa ikinci kurala ikinci ile eşleşmiyorsa üçüncü, dördüncü vs. şeklinde incelenir. Eğer hiçbir kural ile eşleşmeyen bir paket varsa o zaman 65535 no’lu kural devreye girer ve paket bu kurala göre muamele görür. Eğer kernelinizi IPFIREWALL_DEFAULT_TO_ACCEPT opsiyonu ile yeniden derlediyseniz 65535. kural herşeyi geçir manasına gelen “allow ip from any to any” olacaktır.
Bence bir firewall uygulamasında izlenmesi gereken yöntem. Firewall’u closed modda çalıştırmak ve daha sonrasında izin vermek istediğimiz bağlantı çeşitleri için kurallar oluşturmaktır. Ancak henuz bu konuda pek tecrübeli değilseniz başlangıç için firewall’unuzu open modda çalıştırmak ve yasaklamak istediğiniz bağlantılar için kurallar oluşturarak denemeler yapmak iyi bir fikirdir. Konuyu özümsedikten sonra firewall’unuzu closed moda alıp kurallarınızı yeniden oluşturabilirsiniz.
SÖZ DİZİMİ VE KOMUTLAR:
Temel olarak ipfw söz dizimi şu şekildedir.
Komut Kural_Numarası Aksiyon Loglama Seçenek
İşte bu söz dizimine uygun stateles bir ipfw kuralı.
#ipfw add 00010 allow log all from any to any |
Bu komutu command-line’dan girdiğiniz zaman firewall’a gelen ve giden tüm paketler için izin ver manasına gelen bir rule tanımlamış olursunuz.
Söz dizimine ait açıklamalar şöyle;
Komut: Örnekte kural eklemek için ipfw add, silmek için ipfw delete.
Kural_Numarası: Her bir kuralın bir numarası olması gerektiğini söylemiştik. 1 ile 65534 (65535 default kural için kullanılır) arasında olabilir. Eşleştirme işlemi kural numaralarına göre yukarıdan aşağıya doğru yapıldığından sıralamaya dikkat etmeniz gerekmektedir.
Aksiyon:
Bir çok aksiyon seçeneği bulunmaktadır.
allow : Paketin geçmesine izin verir. Allow yerine aynı anlama gelen “accept”, “pass” ya da “permit” kelimelerini de kullanabilirsiniz.
deny : Paketin geçnesine izin vermez. Ilgili paket silinir. deny yerine aynı anlama gelen “drop” kelimesini de kullanabilirsiniz.
check-state : Stateful kurallar aracılığı ile oluşturulmuş dinamik rulların kontrol edilmesini sağlar. Paker dinamik kurallar ile eşleşmezse bir sonraki kuraldan arama devam eder.
count : Kuralla eşleşen paketleri saymak için kullanılır. Arama işlemi sonraki kuraldan devam eder.
divert (port): Divert soketi kullanan herhangi bir yazılıma port yönlendirmesi yapmak için kullanılır. Eşleşen paketler kuralda belirtilen porta yönlendirilir. Bu özelliği snort_inline için kullanacağız. Yazının başında bahsettiğim gibi bu özellikten yararlanmak için kernelinize options IPDIVERT satırını ekleyip yeniden derlemeniz gerekmektedir.
fwd (ipaddr[port]): Paketi herhangi bir porta ya da ip adresine yönlendirir. Bu sayede belirlediğiniz tarzdaki bağlantılar için routing işlemi yapabilir birden çok gateway kullanabilirsiniz. Ayrıca mesela hedefi 80 olan istekleri port forwarding ile proxy serverınızın portuna yönlendirebilir ve transparent proxy uygulaması yapabilirsiniz.
nat (numara): Network address translation için kullanılır.
pipe (numara): Bantgenişliğini düzenlemek için kullanılır. Bu sayede limitleme işlemi yapabilirsiniz.
queue (numara): Paket kuyruklarını düzenlemek için kullanılır.
skipto (numara): Paketin diğer kurallarla eşleştirilmeden verilen numaradan başlayarak incelenmesini sağlar.
reset : Eşleşen paketin reddedilmesini sağlar ve karşı tarafa TCP reset (RST) uyarısı gönderir.
tee (port): Eşleşen paketin bir kopyasını divert kullanan bir yazılıma ait porta gönderir. Arama bir sonraki kuraldan devam eder.
Log : İlgili kurala ait işlemlerin loglanmasını sağlar. log logamount (numara) derseniz ilgilil kuralın kaç satır boyunca loglanacağını belirtmiş olursunuz.
Seçenek : Bu kısımda protokol’ü, (tcp/udp/icmp), kaynağı, hedefi, port numarasını, geliş ya da gidişi, hangi interface üzerinden geçtiğini, TCP bağlantı requesti olması durumunda SYN flag ile başlaması gerektiğini ve ilgili kural için dinamik kural oluşturulup oluşturulmayacağını belirleyebilirsiniz.
Temel olarak söz dizimi ile ilgili bilgiler hemen hemen bu kadar. Daha fazlası için ipfw(8) man dosyasını okuyabilirsiniz.
IPFW’nin durumu ile ilgili bilgi almak için komutlar ise şu şekilde:
ipfw list : Kuralları listeler.
ipfw -d list : Dinamikler de birlikte olmak üzere tüm kuralları listeler.
ipfw -d -e list : Expire olmuş dinamik kuralları listeler.
ipfw show : Kuralları, sayaçlarla birlikte listeler.
ipfw zero : Sayaçları resetler.
ipfw resetlog : Log sayaçlarını resetler. (kernelinize, options IPFIREWALL_VERBOSE_LIMIT=200 satırını eklediyseniz ya da logamount ile loglanacak kurallar için satır sınırlaması yaptığınız zaman bu komut oldukça işinize yarayacaktır.)
Söz dizimi ve temel komutlar bu şekildeydi.
Şimdiki aşamada örnek olması açısından kendi kurduğum IPFW konfigurasyonu ve açıklamalarına değinmek istiyorum.
Öncelikle Firewall için kurduğum FreeBSD’nin kerneli’ni aşağıdaki parametrelerle yeniden derledim. Kernel derlemek adetimdir
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=200 options IPFIREWALL_FORWARD options IPDIVERT options DUMMYNET options IPSTEALTH |
Serverın gateway olarak kullanılması ve açılışta firewall’un devreye girerel kuralların sisteme tanımlanması için /etc/rc.conf dosyasına aşağıdaki satırları ekledim.
gateway_enable="YES" firewall_enable="YES" firewall_script="/etc/ipfw.rules" firewall_logging="YES" tcp_drop_synfin="YES" |
/etc/ipfw.rules isimli bir script dosyası yaratarak içerisine kurallar ile ilgili tanımlamaları girdim.
Script dosyasının örnek içeriği şu şekilde.
# FW Listesini sil.. ipfw -q -f flush # Prefixler lanif="fxp0" wanif="fxp1" lan="192.168.0.0/24" cmd="ipfw -q add" log="log logamount 200" #KURALLAR $cmd 00010 allow all from any to any via lo0 $cmd 00020 allow all from $dmz to $lan $cmd 00030 allow all from $lan to $dmz $cmd 00040 check-state $cmd 00050 allow tcp from 192.168.0.199 to me 22 setup keep-state |
Şimdi açıklamalar.
Bu yapıda FreeBSD restart olduğu zaman rc.conf dosyasında belirtilmiş olan script dosyası çalıştırılıyor ve kural tanımlamaları otomatik olarak yapılıyor. Yazının başında kurallar için izlenebilecek iki yöntem olduğunu bahsetmiştim ve ikinci yöntem olan script ile kural tanımlamanın daha iyi bir yol olduğunu, çünkü kural tanımlamalarında yapılan değişikliklerden sonra sistemi reboot etmeye gerek kalmadığını söylemiştim.
Herhangi bir ayar değişikliği yapmanız durumunda, yeni ayarlar için script dosyasını çalıştırmanız yeterlidir.
sh /etc/ipfw.rules |
Yukarıdaki örnek script dosyasının içeriğine dair açıklamalar ise şöyle;
ipfw -q -f flush
Daha önceden eklenmiş kuralları siler.
Prefixler:
Script dosyasına bir kural eklerken işin tembelliğine kaçmak için güzel bir yol. Örnekte gördüğünüz gibi kendi network kartlarınızı ve ip networklerinizi prefix olarak ekleyebilirsiniz. Ayrıca ipfw -q add ve log logamount komutunu da ekleyip, kural tanımlamasında $lan vs. gibi bu prefixleri kullanabilirsiniz.
$cmd 00010 allow all from any to any via lo0
Bu kural ile Firewall’un loopback interfaceindeki işlemlerin hepsine izin vermiş oluyoruz.
$cmd 00020 allow all from $dmz to $lan
$cmd 00030 allow all from $lan to $dmz
DMZ’ten LAN’a, LAN’dan DMZ’te gidiş geliş full erişim sağlayan stateless kural.
$cmd 00040 check-state
Daha önceden oluşturulmuş dinamik rulların kontrol edilmesini sağlayan tanımlama. (Stateful)
$cmd 00050 allow tcp from $lan to me 22 setup keep-state
LAN’dan gelip Firewall’un 22.(SSH) portuna erişmek isteyen paketler için izin veren stateful kural.
Bu örnek script dosyası ile firewall’a SSH ve LAN DMZ arası trafik için izin verdik. Firewall closed olarak çalıştığı için geri kalan herşer yasaklı durumda. Gördüğünüz gibi yukarıdaki 00040 ve 00050 numaralı kurallar stateful. Bu kurallarda geçen stateful firewalling için kullanılan kelimelerin anlamlarına bakarak bu mimari konusunda daha iyi fikir sahibi olabiliriz.
keep-state :
0005o numaralı kuralda geçen keep-state ibaresi bu kural ile eşleşen paketler için birer dinamik kural oluşturulmasını söylüyorlar. Yani siz LAN’dan firewall’un 22. portuna doğru bir bağlantı açarsanız şu şekilde bir kural oluşturulur.
00050 158 18403 (300s) STATE tcp 192.168.0.254 7313 <-> 192.168.0.1 22
SSH bağlantısı kurdunuz ve dinamik rule oluşturuldu. Artık sizin ip’niz ve source portunuz ile serverin 22. portu arasında tcp trafiğine izin veren bir kural oluşmuş bulunuyor. Kuralın lifetime’ı süresince -ki birazdan lifetime konusunda değineceğim.- ilgili kural sistemde tanınımlı olarak bulunacaktır. 00040 numaralı kural, daha önceden oluşturulan dinamik kuralları check et manasına geldiği için bu tcp bağlantısında giden gelen paketler, dinamik kural ile eşleşecek ve izin verilecektir.
Oluşturulan her dinamik kuralın bir lifetime’ı bulunmaktadır ve süresi biten kurallar sistemden silinir. Lifetime’lar ise paket içeriklerine göre sysctl variable’larıyla belirlenir. Default olarak tanımlanmış bu variableları görmek için aşağıdaki komutu kullanabilirsiniz.
# sysctl -a | grep 'dyn.*lifetime' |
Default değerler şöyledir.
net.inet.ip.fw.dyn_short_lifetime: 5 net.inet.ip.fw.dyn_udp_lifetime: 10 net.inet.ip.fw.dyn_rst_lifetime: 1 net.inet.ip.fw.dyn_fin_lifetime: 1 net.inet.ip.fw.dyn_syn_lifetime: 20 net.inet.ip.fw.dyn_ack_lifetime: 300 |
Yukarıdaki dinamik rule örneğinde lifetime olarak belirlenen (300s), açılan oturum için gerçekleştirilen three-way handshake işleminin son adımı olan, client tarafından servera gönderilen ACK paketinden kaynaklanmaktadır. Yani client olarak siz servera bir ACK paketi gönderdiniz ve oturumu açmış oldunuz. Bu durumda firewall sizin bağlantınız için ömrü 300 s olan bir dinamik rule oluşturdu. Söz konusu olan işlem SYN paketi içeren bir bağlantı isteğine ait olsaydı kuralın lifetime’ı 20 saniye olacaktı. Çıktıda gördüğünüz gibi UDP bağlantılar için 10 saniye süre belirlenmiş durumda. short_lifetime değeri ise ICMP paketleri için kullanılıyor.
setup :
Yukarıda, three-way handshake işleminden bahsettim, setup’in tam olarak ne işlevi olduğunu idrak etmek için bu handshake olayına da değinmek gerekiyor. Normalde bir yerden bir yere bir tcp bağlantısı kurmak istediğiniz zaman gerçekleşen adımlar şöyle:
1 – Client bligisayar, bağlantı kurma isteğini belirtmek için bir SYN (Synchronization) paketi gönderir.
2 – Server SYN paketini aldığını belirtmek üzere cliente bir ACK (Acknowledge) paketi ve bir SYN paketi gönderir. (ACK+SYN)
3 – Son adım olarak client, servera bir ACK paketi gönderir ve oturum başlatılmış olur.
Dolayısı ile bu three-way handshaking işlemi bir oturum açmak üzere izlenmesi gereken bir durumdur. Aksi data transferi için bir oturum açılamaz. İşte stateful bir mimari, yukarıda bu konu ile ilgili kısa bilgi verdiğim bölümde de söylediğim gibi bu oturum durumlarını inceleyerek usulsüz bir durum oluşması durumunda gelen paketi otomatik olarak engelleyebilir. Setup ibaresi bu durumu göz eder ve mesela eğer bir SYN/ACK paketi bir oturumun devamı olmaması durumunda engellenmesini sağlar. Ya da bağlantı isteğinin nereden başlatılması gerektiğini belirleyebilir ve aksi durumlarda engellenmesini sağlayabilir. Bu ifade TCP flaglarının kullanımından da anlaşıldığı üzere sadece tcp bağlantılar için oluşturulan kurallar da kullanılmaktadır.
check-state, keep-state ve setup ifadeleri kullanılarak oluşturulmuş güzel bir örnek var. Bu örnek üzerenden ifadelerin çalışma prensibini inceleyelim.
$cmd 01000 check-state $cmd 02000 allow tcp from any to any 22 in setup keep-state |
Firewall closed modda çalışıyor ve bu iki kural tanımlanmış durumda. Bu senaryoya göre, firewall’a hedef portu 22 olan bir paket ulaştığı zaman oluşacak işlem adımları şu şekilde.
1 – 172.16.0.1 ip adresli bir bilgisayarın 1234 numaralı portundan, firewall’un arkasında bulunan 192.168.0.1 ip’li bir serverın 22. portuna erişmek üzere legal bir bağlantı isteği (SYN) içeren bir paket geliyor.
2 – 01000 numaralı kural, dinamik ruleları check eden kural olduğundan dolayı kaynağı 172.16.0.1:1234 ve hedefi 192.168.0.1:22 olan hanhangi bir dinamik rule olup olmadığını kontrol ediyor ve daha önce böyle bir bağlantı kurulmamış olduğundan bulamıyor.
3 – Dinamik bir rule bulunamamasından dolayı arama işlemi 02000 numaralı kuraldan devam ediyor. Paket bu kuralda kontrol ediliyor ve eşleşme sağlanıyor. Ayrıca kuralın söz diziminde “keep-state” ifadesi kullanıldığı için bu bağlantı için 20 saniye lifetime’ı olan dinamik bir kural oluşturuluyor. (daha önce bahsettiğim gibi SYN paketleri için default sysclt variable’i 20 saniyedir.)
4 – Şimdiki aşamada, Server, cliente onay niteliğindeki bir ACK paketini gönderiyor.(Ayrıca bir de SYN paketi gönderiyor.)
5 - Normal şartlarda client, serverdan gelen SYN paketini aldığını belirten bir ACK paketi gönderiyor. Bu paket firewall’a ulaştığı zaman tekrar arama işlemi yapılıyor 01000 numaralı kural dinamik ruleları check ediyor ve paket daha önce oluşturulan ve lifetime’ı bitmemiş dinamik rule ile eşleşiyor ve paket firewall üzerinden geçiriliyor. Bu durumda da oturum başlatılmış oluyor.
6 – Eğer 5. adımda client tarafından gönderilen ACK paketi spoof edilmiş olsaydı ve firewall stateless olarak çalışsaydı, spoof edilen paketin geçişine izin verilecekti.
7 – Ama 5. adımda gönderilen ACK paketi spoof edilerek gönderildi ve firewall stateful kurallarımız var. Bu durumda ilgili paket firewall’a geldiğinde 01000 numaralı kural, dinamik ruleları kontrol edecek, ancak herhangi eşleşen bir kayıt bulamayacak. Zira spoof edilmiş paketlerin hedef ip ve portu aynı olmasına rağmen kaynak ip ve portu atakta bulunan kişiler tarafından değiştirilir. Bu durumda 01000 ile eşleşmeyen paket için arama bir sonraki kuraldan devam edecektir.
8 – 02000 numaralı kurala gelen paket, içerisinde SYN flagi içermediğinden dolayı bu kural ile de eşleşmeyecektir. (Zira bu kuralda setup ifadesini kullandık ama bu paketin içeriğinde SYN değil ACK paketi var ve kaynak ip ve portu elimizdeki dinamik ruleda belirtilen kaynak ip ve port numarası ile uyuşmuyor.) Haliyle arama işlemi bir sonraki kuraldan devam edecek.
9 – Firewall closed olduğu ve 65535 numaralı son kuralımız herşeyi yasaklıyor olduğundan dolayı spoof edilen paket bu kurala takılacak ve sistemden geçirilmeyecektir.
Böylece, stateful mimari kullanan iki adet rule ile bir spoof atağı kesmiş olduk. Ancak elbette IPFW ile DoS atakları kesme konusunda belli bir oranda başarı sağlayabilrisiniz. Zira çok yüklü miktarda istek geldiği zaman başetmek de o oranda zorlaşacaktır ki DoS atakların temeli, çok hızlı ve fazla sayıda istekte bulunarak karşı tarafın kaynaklarını tüketmekten ibarettir. Ayrıca her türlü DoS atağı kesmek de pek mümkün değildir.
established :
Son olarak, yukarıdaki örnekte geçmeyen ancak stateful mimarisinde kullanılan “established” ifadesine de değinmek istiyorum. Daha önceden kurulmuş olan bir oturuma ait paketlere default izin vermek için kullanılan established ifadesininin geçtiği kuralın söz dizimi şöyledir.
$cmd 00500 allow tcp from any to any established |
Bu kural daha önceden kurulmuş bağlantılara ait paketlerin geçişine izin veren genel geçer bir durum olduğundan dolayı, hedef ve kaynak any olarak kullanılmaktadır. Ancak bir önceki spoof edilmiş paket ile ilgili anlatılan örnekte, eğer bu kuralı da kullanmış olsaydık, spoof edilmiş ilgili paket SYN içermemesine rağman, zaten kurulmuş bir bağlantıya ait olduğu gerekçesi ile 00500 tarafından sistemden geçirilecekti.
Stateful ve Stateles firewalling konusuna değindikten sonra, biraz da IPFW’nin trafik limitleme ve kullanım kolaylığı sağlayarak çok işe yarayan table kullanımıyla ilgili örneklere yer vermek istiyorum.
Pipe :
Mesela, kullanıcılarınızdan bazıları tüm interneti download etmek için yanıp tutuşuyor ve internete çıkmak için kullandığınız hatlarda hep bir satürasyon durumu yaşıyorsunuz. Bu durumda bazı kullanıcılar, servisler vs. için bandwidth limitleme ihtiyacı hissedebilirsiniz. Bu işlem için firewallunuza pipe ifadesi içeren rulelar girmeniz ve istediğiniz tipteki trafik için limitleme yapmanız gerekecektir. İşte bir torrent yazılımının kullandığı portlar için uygulanan bir limitleme işlemine ait kurallar.
$cmd pipe 1 tcp from $lan to any 43871 $cmd pipe 2 udp from any to $lan 20228 ipfw pipe 1 config bw 1024Kbit/s ipfw pipe 2 config bw 512Kbit/s |
1. satır lokal networkten, bir torrent yazılımının download için kullandığı 43871 numaralı porta doğru olan tarfik için bir pipe tanımlamasından ibaret.
2. satır ise, aynı torrent yazılımının upload için default olarak kullandığı 20228 numaralı port için pipe işlemi.
3. satırda, torrent download için 1Mbit sınırlama getiriliyor.
4. satır ise torrent upload için 512Kbit sınırlama getiren tanımlama.
Table :
Kaynak adresi ya da hedef adresi birden cok ip’den olusan kurallar girmeye ihtiyacınız olabilir. Normalde bu işi subneting ile yapmak mümkün. Ama bir server farmınız olduğunu ve bu farmdaki serverların bazıları için uygulanacak ortak bir kural girmeniz gerektiğini ancak ilgili serverlara ait ip adreslerinin ardaşık ve subneting ile ifade edilemeyecek adresler olduğunu düşünelim. Bu durumda her bir server için bir kural tanımlamak mi gerekiyor ? IPFW’nin table özelliğini kullanırsanız hayır.
Aynı şey birden çok ip networkü tanımlamak için de geçerlidir.
İşte şöyle.:
ipfw table <tablo_numarası> add <Ip adresi ya da (ip network/subnet)>
Eklemek istediğiniz ip adresi ya da networkleri bu komut ile bir tabloya atayabilirsiniz. Sonra ipfw’ye
ipfw add 00500 allow all from “table(0)” to any keep-state
gibi bir kural girip 0 numaralı tablo içerisinde bulunan tüm ipler için tek kural ile tanımlama yapabilirsiniz. Sisteme 0 ile 127 aralığında ancak 128 adet tablo ekleyebilirsiniz. Tablo kullanımı ile ilgili diğer temel kurallar ise şöyle;
Tablodaki kayıtları görmek için:
ipfw table <tablo_no> list
Tablodan bir kayıt silmek için:
ipfw table <tablo_no> delete <ip adresi ya da (ip network/subnet)>
Herhangi bir tabloyu sıfırlamak.
ipfw table <tablo_no> flush
Tablo kullanımı ile ilgili dikkat edilmesi gereken bir şey var. Tablolarınızı ilgili komutları vererek oluşturup, table ifadesi içeren kurallarınızı yazdınız. Herşer serverı ilk reboot edişinize kadar güzel çalışacaktır. Ancak reboottan sonra tablo kayıtları uçacağı için yazdığınız kurallar bir şey ifade etmeyecektir.
Bu durumu aşmanın yolu ise, açılış sırasında (firewall kurallarının eklenmesi gibi) tabloların da sisteme eklenmesini sağlamaktır. Ben bu iş için gene bir script dosyası kullanıyorum.
/etc/ altında ipfw.tablolar isimli bir dosya açın ve tablo tanımlarınızı girin; mesela şöyle.
| #Oncelikle tabloları sifirla. ipfw table 0 flush #Heryere erisenler |
Bu dosya gördüğünüz gibi önce eski tabloların içeriğini siliyor; sonra ekleme işlemlerini yapıyor.
Daha sonra, sistem açılışında çalışığ, fw kurallarını otomatik olarak tanımlamak için rc.conf dosyana yazdığımız ipfw.rules dosyasının içerisine (kural satırlarından önce) /etc/ipfw.tablolar satırını girin. Bu şekilde, sistem açılırken ipfw.rules dosyası çalışacak ve ipfw.tablolar scriptini çalıştırarak tabloları oluşturacak ve kuralları devreye alacaktır.
Not: Eğer table kullanımında, ilk önce tabloları flush etmezseniz ya da daha script içerisinde ayni ifade iki kere geçerse, bu nedenle hata alır ve sorun yaşarsınız. bu konuya dikkat etmeniz iyi olur
IPFW ile ilgili kurulum notları, açıklamalar ve örnekler bu kadar. Bu yazının ikinci bölümünde IPFW kullanarak divert ile snort_inline kurulumu ve konfigurasyonuna ait notları paylaşacağım.
Bkz: http://blog.cagriersen.net/2008/07/snort_inline-kurulumu/
Kaynaklar:
http://www.freebsd.org/doc/en/books/handbook/firewalls-ipfw.html
http://en.wikipedia.org/wiki/Ipfw
http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO
http://www.enderunix.org/docs/ipfwbook/
http://www.enderunix.org/docs/ipfw/
Linux’larda SSH Key Saldırısı
29 Oca
Bilindiği gibi, *nix tabanlı işletim sistemlerine güvenli bir şekilde uzaktan erişmek için kullanılan SSH (Secure Shell), telnet ve rlogin gibi alternatiflerin tersine, bağlantı sırasında her türlü veri trafiğini şifreleyerek güvenliği had safhaya çıkarıyor. Bu nedenle de hemen her sistem yöneticisi remote erişim için SSH’ı tercih ediyor.
Bir SSH bağlantısını, bağlanılmak istenen sisteme direk olarak kullanıcı adı ve şifre göndermek sureti ile gerçekleştirebildiğimiz gibi bağlantıyı SSH Key-Based Authentication isimli yöntemle kullanıcı adı ve şifreye gerek kalmaksızın sağlayabiliyoruz. Yönetiminden sorumlu olduğunuz birden çok *nix tabanlı serverınız olması durumunda Key-Based kimlik doğrulama yöntemi elbette işleri epey kolaylaştırıyor.
Bu yöntemde, uzaktaki sisteme bağlantıda bulunacağınız bilgisayarda public ve private key diye tabir edilen iki adet anahtar dosyası oluşturuyorsunuz, Public Key uzaktan erişim sağlanacak hedef bilgisayarda tutuluyor ve Private Key de, key’i oluşturduğunuz bilgisayarda kalıyor. Kullanıcı private key’ini kullanarak bağlantı isteğinde bulunduğu zaman hedef bilgisayar gelen isteği elindeki public key ile karşılaştırıp doğruluyor bağlantıyı gerçekleştiriyor. Bağlantı sırasında bilmeniz gereken tek şey keyleri oluşturma sırasında belirlenen Passphrase denilen private key şifresi oluyor. Hatta isterseniz Passphrase dahi kullanmayabilirsiniz. Bu uygulamayı *nix tabanlı sistemlerinizde yaptığınız zaman uzaktan erişim işlemlerinde herserverin kullanıcı adı ve şifresini teker teker girmenize gerek kalmıyor.
Ancak, elbette bu uygulama tahmin edebileceğiniz gibi bazı güvenlik açıklarına neden olabiliyor; bu yazının ana konusu da aslında bu.
Key-Based Authentication kullanışlı olmasına rağmen aynı zamanda sistem güvenliğinizin yumuşak karnı da olabilecek bir potansiyele sahiptir. Zira client bilgisayarda bulunan bir private key başkalarının eline geçerse aynen sizin gibi o kişiler de sistemlerinize kullanıcı adı ve şifre olmaksızın bağlanabileceklerdir.
Bunun yanı sıra aslında bu bu yazıyı yazmamın ana nedeni yukarıdaki yumuşak karın mevzusundan çok, US-CERT tarafından 26 Ağustos’ta açıklanan, Linux Tabanlı işletim sistemleri için, key-based erişim uygulamasında keşfedilen bir saldırı yöntemi.
http://www.us-cert.gov/current/index.html#ssh_key_based_attacks adresinde yayınlanan rapora göre, Linux tabanlı sistemlerde SSH Key-Based authentication kullanılması durumunda ortaya çıkabilecek yeni bir saldırı şekli tespit edilmiş. Buna göre saldırı şekli, ilk olarak SSH keyleri çalarak sisteme login olunup, sonrasında lokal kerneldeki zayıflıklardan yararlanılarak root erişiminin sağlanmasıymış. Root olarak sisteme erişildikten sonra ise sisteme “phalanx2″ isimli bir rootkit kurulduğu söyleniyor.
Raporda, Phalanx2′nin amacının sistematik olarak, -key-based auth. konfigurasyonları nedeni ile- güvenilir olarak algılanan diğer sistemlerin SSH keylerini çalmak ve atakta bulunan kişiye göndermekten ibaret olduğu açıklandı. Böylece attacker bu keylerle, ilgili tüm sistemlere erişimde bulunmayı deneyerek sonuca ulaşmaya çalışıyormuş.
Sisteminizde bu rootkitin yüklü olup olmadığını anlamak için aşağıdaki adımlar işinize yarayabilir.
- rootkit /etc/khubd.p2/ dizininde bulunabiliyormuş. Ancak ls komutu ile bu dizini görmek mümkün değil; bu nedenle cd komutu ile dizinin içerisine girmek gerektiği söyleniyor.
- /dev/shm/ dizini altında atakla ilgili dosyaların bulunabileceği belirtiliyor.
- Ayrıca sistemde çalışan gizli bir proses olup olmadığının araştırılması,
- /etc’nin alt dizinlerini count ederek adet bilgisini “ls /etc” çıktısında belirtilen rakamla tutup tutmadığının kontrol edilmesi öneriliyor.
Hal böyle olunca bu ataktan etkilenmemek için, Key’lere muhakkak Passphrase tanımlamak, Tcp erişimlerini gözden geçirmek, sisem patchlerini düzenli geçmek gibi önlemler almak gerekiyor. Hatta belki de key-based authentication yöntemini rafa kaldırmak en iyisi gibi görünüyor.
QmailToaster Kurulumu
29 Oca
| Qmail, oldukça kararlı çalışmasından ve modüler yapısı sayesinde sunduğu esneklik sebebiyle çok uzun zamandan beri kullandığım ve önerdiğim bir MTA’dır. Fakat, Qmail’e eklenti olarak geliştirilmiş bir sürü modül bulunduğundan dolayı, tam teşekküllü bir mail sunucusu kurmak istediğinizde bahsi geçen bu modülleri de bilmeniz ve ihtiyacınıza göre kurulumlarını yapmanız gerekiyor. Bu nedenle normal şartlarda kaynak koddan derlenerek kurulan qmail ve ilgili modüller için az da olsa öncesinden bir tecrübe edinmiş olmanız gerekiyor. |
Belki henüz qmail ile ilgili olarak bu tarz tecrübeleri edinmemiş fakat gerekli olan tüm modüllerle birlikte bir qmail sunucusu kurmak ve de bunu bir sürü derleme işlemi ile uğraşmadan hızlıca yapabilmek istiyorsunuzdur, işte qmail toaster tam bu noktada yardımımıza koşuyor.
Aslında, bu zamana kadar hiç qmail toaster kurmamıştım, ancak uzun zamandır duyduğum bir şey olduğundan dolayı bir qmail sunucusuna ilk ihtiyacım olduğu an bir qmail toaster kurulumu yaptım. İşte bu yazıda, CentOS 5.2 üzerinde yapılan bir qmail toaster kurulumuna ait notları bulabilirsiniz.
Qmail Toaster, derleme işleri ile uğraşmaya gerek kalmaksızın tam teşekküllü bir qmail e-posta sunucusu kurabilmeyi amaçlayan bir oluşum. Gerçekten de gerekli tüm paketlerin indirilmesi, indirilen kaynak kodlarını rpm’e dönüştürülmesi ve sisteme kurulmasını sağlayan scriptler vasıtası ile qmail kurulumunu ciddi anlamda kolaylaştırıyor. Hal böyle olunca sunucunun yönetimi ve update vs. gibi işlemleri de epey kolaylaşıyor.
Bu dökümanda, kurulum ve konfigurasyon ile ilgili ayarların neler olduğunu bulabilirsiniz. Anlatılacak işlemlere ait index aşağıdaki gibidir.
Gereksinimler bölümünde geçmeden önce, qmail toster ile sisteme yüklenecek olan önemli rpm paketlerine ve ne iş yaptıklarına bir bakmak iyi olur;
| qmail | Qmail’in ana paketi. |
| ucspi-tcp | UNIX Client-Server program arayüzü. |
| daemontools | Servis yönetim araçları. Loglamalar ve servis kontrolu için kullanılır. |
| vpopmail | Birden fazla domain için sanal domain desteği sağlar. |
| vqadmin | Web tabanlı vpopmail yönetim konsolu. |
| qmailadmin | Web tabanlı domain yönetim konsolu. (Tek bir domainin yönetimi) |
| spamassassin | Perl tabanlı Spam Filtresi |
| clamav | Anti Virüs yazılımı |
| simscan | Clamav, Spamassasin ile birlikte çalışabilen içerik filtreleyici. |
| maildrop | Maillerin içeriğini tarayarak içerik filtrelemesi yapar. |
| qmailmrtg | E-Posta trafiğinin grafiksel verilerini sunar. |
| isoqlog | E-posta trafiğinin istatistiksel verilerini sunar. |
| ezmlm | Mail list yöneticisi |
| courier-imap | Imap Sunucusu |
| courier-authlib | Couriter otorizasyon kütüphanesi. |
| autorespond | Otomatik cevaplama fasilitesi. (Out of office) |
| squirrelmail | Php tabanlı Webmail uygulaması |
| control-panel-toaster | Qmail Toaster yönetim paketi. |
Sisteme nelerin yükleneceğine göz attıktan sonra, kurulum adımlarına başlayabiliriz.
Qmail Toster’ı yükleyebilmek için öncesinde gerekli paketlerin sisteminizde kurulu olduğuna emin olmanız ve eksik olan paketleri sisteminize kurmanız gerekiyor. Gereksinim bölümünde nelerin kurulu olması gerektiği ve kurulumları anlatılmaktadır.
GEREKSİNİMLER
Eğer yeni bir CentOS kurulumu yaparak işe başlayacaksanız, kurulum adımlarından biri olan yazılım paketlerinin seçilmesi kısmında aşağıdaki grupları seçin. Eğer hali hazırda bir CentOS üzerinde qmail kurulumu yapacaksanız yüklü paketlerin kontrolu ve eksiklerin yum ile kurulumlarını anlatan bir sonraki başlığa geçebilirsiniz.
Yeni CentOS kurulumunda
Software Packages adımında aşağıdaki paket gruplarını seçin.
"Server Configuration Tools" "Web Server"(Optional Packages kısmından "php-mysql" paketini de seçin.) "DNS Name Server"(Networkünüzde bir dns server bulunuyorsa kurmanıza gerek yok.) "FTP Server" "MySQL Database" (Optional Packages kısmından "mysql-bench" paketini de seçin.) "Development Tools" (Optional Packages kısmından "expect" paketini de seçin.) "Administration Tools" "System Tools" (Optional Packages butonuna tıklayıp "mrtg" paketini de seçin.) |
CentOS daha önceden kurulmuş ise
Daha önceden kurmuş olduğunuz bir CentOS üzerinde yukarıda bahsi geçen paketlerin kurulu olup olmadığını kontrol edin:
[root@cntvm ~]# yum grouplist |
Yukarıdaki komutun çıktısında Installed Groups bölümünde gerekli olan grupların kurulu olduğuna emin olun. Bendeki çıktı aşağıdaki gibi.
Not1: Benim zaten bir DNS sunucum olduğundan dolayı DNS Server grubunu bu makine üzerine kurmadım. Dolayısı ile listede DNS Server grubu görünmüyor.
Not2: Gerekli grupların dışında görünen diper gruplar ise default kurulumda gelmektedir.
Installed Groups: MySQL Database System Tools Legacy Network Server Dialup Networking Support FTP Server Network Servers Legacy Software Development Legacy Software Support Web Server Windows File Server Mail Server Server Configuration Tools Administration Tools |
Paket gruplarından eksik olanlar varsa aşağıdaki örnek komutta görüldüğü gibi kurun.
yum -y groupinstall "MySQL Database" |
Eksik grupları kurduktan sonra, gruba dahil olan ama grubun kurulumu sırasında opsiyonel olduklarından dolayı default olarak kurulmayan diğer paketleri kurun.
[root@cntvm ~]# yum install php-mysql mysql-bench expect mrtg |
Paket kurulumları bittikten sonraki adım, CentOS’un Security Level ve SELinux özelliklerini devre dışı bırakmaktır. Bunun için sisteme setup komutunu verin ve açılan ekranda Firewall Configuration‘ı seçin. Bu kısımda, Security Level ve SELinux’u disabled konumunu getirin.
Gereksinimler ile ilgili bölüm bu kadar.
HAZIRLIK
Şimdiki aşama, paketlerin download edilmesi ve sistemin kuruluma hazır hale getirilmesi için gerekli scriptlerin çalıştırılmasından ibaret.
Sisteme root olarak bağlanın ve paketlerin download edileceği dizini oluşturun.
[root@cntvm ~]# mkdir -p /usr/src/qtms-install |
Şimdi bu dizine geçelim ve ilgili scriptleri download edip kurmaya başlayalım.
[root@cntvm ~]# cd /usr/src/qtms-install |
cnt50-deps.sh
İlk olarak cnt50-deps.sh isimli scriptin çalıştırılması gerekiyor.
Bu script öncelikli olarak sistem kurulumunda default olarak yüklenen sendmail’i uninstall ediyor. Daha sonrasında ise kurulum için gerekli diğer paketlerin kurulumunu yapıyor.
Aşağıdaki gibi download edebilir ve çalıştırabilirsiniz.
Not: Kurulumu yaptığım CentOS 32bit olarak çalıştığı için ilgili scriptler 32bit CentOS için yazılmışlardır. Eğer siz 64bit kullanıyorsanız, ilgili dosyaların 64bit versiyonlarını http://www.qmailtoaster.org/centos/cnt5064/ adresinden indirmeniz gerekiyor.
[root@cntvm]# wget http://www.qmailtoaster.com/centos/cnt50/cnt50-deps.sh
[root@cntvm]# sh cnt50-deps.sh
|
cnt50-perl.sh
İkinci olarak cnt50-perl.sh isimli scripti indirip çalıştırmak gerekiyor. Spamassassin için gerekli olan perl modüllerinin sisteme yüklenmesini sağlıyor. Aşağıdaki şekilde download edip çalıştırabilirsiniz.
Not: Scripti çalıştırdığınız zaman manuel kurulum yapıp yapmak istemediğinizi soran bir promt ile karşılaşacaksınız. Buna NO diyin. Ayrıca, sistem kurulum ile ilgili olarak bir kaç soru daha soracak, kısaca enter’a basarak, default kurulumu seçin.
[root@cntvm]# wget http://www.qmailtoaster.com/centos/cnt50/cnt50-perl.sh
[root@cntvm]# sh cnt50-perl.sh
|
cnt50-svcs.sh & firewall.sh
Şimdiki aşama, iki farklı script indirip çalıştırarak hazırlığı tamamlamaktan ibaret. Ancak iki scriptte de gerekli değişiklikleri yapmak gerekiyor. Önce download edin.
[root@cntvm]# wget http://www.qmailtoaster.com/centos/cnt50/cnt50-svcs.sh [root@cntvm]# wget http://www.qmailtoaster.com/centos/cnt50/firewall.sh |
İlk script olan cnt50-svcs.sh, temel olarak gereksiz servisleri durdurup gereklileri start ediyor, inittab ve php.ini dosyasını düzenliyor, mysql’in root şifresini set ediyor, (ki ilk kurulumda root şifresi boş olarak gelir) sonrasında qmail’in sanal domain uygulamasını gerçekleştiren vpopmail add-on’u için vpopmail isimli bir database oluşturup gerekli düzenlemeleri yapıyor; firewall.sh ise iptables’a gerekli kuralları giriyor.
Dosyaları download ettiğinize göre editlemeye başlayabilirsiniz.
Öncelikle, cnt50-svcs.sh dosyasını açın burada yapılması gereken iki değişiklik bulunuyor.
Birincisi dosyanın # Set mysql password kısmında bulunan, Mysql Serverın root passwordunun belirleneceği alanı düzenlemek.
Dosya içerisinde aşağıdaki bölümü bulun ve MYSQL_ROOT_PASSWORD ibaresini silerek yerine mysql’iniz için belirleyeceğiniz root şifresini girin.
MYSQLPW=YOUR_MYSQL_ROOT_PASSWORD
İkinici aşama ise, vpopmail için oluşturulacak database’e erişecek olan kullanıcıya ait passwordu belirlemek.
Dosya içerisinde aşağıdaki satırı bulun.
echo “GRANT ALL PRIVILEGES ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY ‘SsEeCcRrEeTt’” | mysql -uroot -p$MYSQLPW
Normalde, bir sonraki adım olan firewall kurallarında mysql’e dışarıdan erişim kapatılacak ancak siz gene de vpopmail db’sine erişecek kullanıcıya ait şifreyi öntanımlı olarak bırakmak istemeyebilirsiniz. Bu nedenle yukarıdaki satırda geçen SsEeCcRrEeTt ibaresini belirlediğiniz şifre ile değiştirin.
Not: Eğer, default passwordu değiştirirseniz, kurulum bittikten sonra, /home/vpopmail/etc/ altında bulunan vpopmail.mysql isimli dosyaya da belirlediğiniz passwordü girmeniz gerekir. Aksi taktirde vpopmail database’e login olamaz.
cnt50-svcs.sh dosyasındaki düzenlemeler bundan ibaret.
Şimdi firewall.sh dosyasını editleyip #Set your IP addres bölümünü bulun ve YOUR_IP_ADDRESS kısmına kendi ip adresinizi yazın. Burda, firewall kurallarının sisteme uygulanması ile ilgili olarak dikkat edilmesi gereken bir konu var. Eğer bulunduğunuz ip networkü 192.168.0.0 ya da 10.0.0.0 gibi iç networkler için ayrılmış olan ip networklerinden biriyse firewall.sh scriptinin çalıştırılmasından sonra sunucu ile bağlantınız kesilebilir. Bu nedenle, firewall.sh dosyasının içerisindeki “## Drop outside packets with local addresses – anti-spoofing measure” satırının altında bulunan kurallardan, kendi ip networkünüzü işaret eden satırı silmeniz gerekiyor.
Örnek olması açısından 192.168.0.0/16 networkü için ilgili satır şu şekilde:
iptables -A INPUT -s 192.168.0.0/16 -i ! lo -j DROP
Not: Halihazırda bir firewall’unuz varsa, o durumda Qmail Sunucusunun üzerinde iptables çalıştırmanıza gerek olmayabilir. Bu durumda cnt50-svcs.sh dosyasının son satırındaki sh firewall.sh satırını silere firewall kurallarının sisteme eklenmesini engelleyebilirsiniz.
cnt50-svcs.sh scritpini aşağıdaki gibi çalıştırdığınız zaman bahsettiğim işlemler gerçekleşecektir. Bu script son işlem adımı olarak firewall ile ilgili scripti de çalıştırdığı için sizin ayrıca firewall.sh dosyasını çalıştırmanıza gerek yoktur.
[root@cntvm]# sh cnt50-svcs.sh |
Tüm scriptleri download edip çalıştırdıktan sonra sistemde yüklü tüm paketleri update edin.
[root@cntvm]# yum -y update |
Update işlemi bittikten sonra sistemi restart etmek gerekiyor.
[root@cntvm]# reboot |
Sistem yeniden başlatıldıktan sonra qmail toaster’in kurulumuna geçebilirsiniz.
KURULUM
Kurulum işlemi de yine scriptler vasıtası ile gerekli paketlerin download edilmesi ve rpm’e dönüştürülerek sisteme kurulmasından ibarettir.
Hazırlık sırasında oluşturduğumuz kurulum dizinine geçin ve gerekli olan paketleri indirecek olan current-download-script.sh dosyasını download ederek çalıştırın.
[root@cntvm ~]# cd /usr/src/qtms-install/ [root@cntvm]# wget http://www.qmailtoaster.com/info/current-download-script.sh [root@cntvm]# sh current-download-script.sh |
Yukarıdaki işlem adımlarını yaptığınız zaman gerekli olan tüm paketler sisteminize download edilmiş olacaktır. Şimdi kuruluma geçebiliriz.
Sistem indirilen paketlereden rpm dosyaları oluşturarak yükleyecek olan scriptin adı, cnt50-install.script.sh dır. Bu scripti indirin.
[root@cntvm]# wget http://www.qmailtoaster.com/centos/cnt50/cnt50-install-script.sh |
Daha sonra çalıştırın. Scripti çalıştırdığınızda adım adım kurulacak paketler görüntülenecek ve sistem sizen onay isteyecektir. Enter’a basıp ilerleyin. Bu şekilde default yanıt olan evet’i seçmiş olursunuz. Bunun dışında eğer kurulacağı söylenen paketi yüklemek istemiyorsanız s tuşuna basarak skip edebilir ve ilgili paketi atlayarak kuruluma devam edebilirsiniz. No demeniz durumunda ise kurulum sonlandırılacaktır.
[root@cntvm]# sh cnt50-install-script.sh |
Yukarıdaki komutu vererek işlem adımlarını gerçekleştirdiğiniz zaman qmail toaster ile ilgili tüm rpm paketleri sisteminize yüklenmiş olacaktır.Bu şekilde kurulumu gerçekleştirmiş olacaksınız.
Bilgi olması açısından bu scriptin ne yaptığına biraz değinmek istiyorum. Script aslen, bir önceki script vasıtası ile download edilmiş olan source rpm paketlerini sisteme yüklüyor ve bu kaynak kodları kullanarak her bir qmail bileşeni için rpm paketleri üretip sistem yüklüyor. Bu şekilde qmail sunucunuz tamamen rpm tabanlı bir kuruluma sahip oluyor. Kurulumların rpm olmasından dolayı, update, uninstall vs. gibi işlemler de çok basitleşmiş oluyor. Herhangi bir bileşene ait update paketi çıktığı zaman yapmanız gereken tek şey ilgili paketi download ederek rpm -Uvh paket-adı komutu ile update etmek oluyor. Bu anlamda oldukça zaman kazandırıcı bir durum.
Neyse, kurulumlar bittikten sonra yapılandırma ve yönetimsel konular bölümüne geçelim.
KURULUMUN TAMAMLANMASI
Kurulumların ardından sistemin restart edilmesinden sonra otomatik olarak çalıştırılması gereken servislerin durumunu kontrol edelim.
Sisteme setup komutunu vererek Text Mode Setup Utility aracını çalıştırın. Açılan grafiksel ekran da işletim sistemi ile ilgili temel işlemlerin yapılabildiği bu grafiksel ekrandan System services bölümüne geçin ve aşağıdaki servislerin seçili olduğuna emin olun.
acpid anacron atd autofs cpuspeed crond freshclam haldaemon httpd iptables kudzu messagebus mysqld network ntpd qmail smartd sshd syslog xinet irqbalance (eğer dual işlemciniz varsa) xfs (eğer x windows kullanıyorsanız) |
Not: xinetd sisteminizde yüklü olmayabilir. Xinet, courier tarafından gereksinim duyulan bir servis olduğundan dolayı ayrıca yüklemenizi tavsiye ederim. yum -y install xinetd komutu ile kurabilirsiniz.
Açılışta başlatılması gereken servislerin kontrolünü yaptıktan sonra, herşeyin yolunda gittiğinden emin olmak için sisteminizi bir kez daha restart edin.
[root@cntvm]# reboot |
Sistem açıldıktan sonra qmail servislerinin durumunu kontrol edelim. Normal şartlarda sorunsuz bir kurulumun ve restart’ın ardından qmailctl stat komutunu verdiğiniz zaman aşağıdakine benzer bir çıktı almanız gerekir.
[root@cntvm ~]# qmailctl stat authlib: up (pid 1945) 124 seconds clamd: up (pid 1926) 125 seconds imap4: up (pid 1941) 125 seconds imap4-ssl: up (pid 1938) 125 seconds pop3: up (pid 1939) 125 seconds pop3-ssl: up (pid 1942) 124 seconds send: up (pid 1937) 125 seconds smtp: up (pid 1940) 125 seconds spamd: up (pid 1920) 125 seconds submission: up (pid 1943) 124 seconds authlib/log: up (pid 1925) 125 seconds clamd/log: up (pid 1923) 125 seconds imap4/log: up (pid 1919) 125 seconds imap4-ssl/log: up (pid 1917) 125 seconds pop3/log: up (pid 1924) 125 seconds pop3-ssl/log: up (pid 1916) 125 seconds send/log: up (pid 1915) 125 seconds smtp/log: up (pid 1918) 125 seconds spamd/log: up (pid 1921) 125 seconds submission/log: up (pid 1922) 125 seconds |
Görüldüğü üzere qmail’e ait tüm servisler (up) görünüyor.
Şimdi sisteme yeni bir domain ve kullanıcı ekleyelim. Aşağıdaki adımları uygulayarak bu işlemi gerçekleştirebilirsiniz.
[root@cntvm ~]# cd ~vpopmail/bin/ [root@cntvm bin]# ./vadddomain domain-ismi.com sifre [root@cntvm bin]# ./vadduser user@domain-ismi.com sifre |
Qmail Toaster’in sunucu yönetimi ile ilgili güzel bir web tabanlı paneli bulunuyor. Bu panele erişebilmek için öncelikle php ayarlarında bir defaya mahsus küçük bir değişiklik yapmak gerekiyor. Sonra bu ayarı geri alacağız.
/etc dizini altındaki php.ini dosyasını editleyin ve register_globals değerini On yapın ve service httpd restart komutu ile apache’yi restart edin. (Bu ayar default olarak Off durumdadır.) Daha sonra bir web browser kullanarak aşağıdaki şekilde panele erişim sağlayabilirsiniz.
http://server-ip-adresi/admin-toaster/ Kullanıcı: admin Şifre: toaster |
Yönetim konsoluna bağlandıktan sonra şifrenizi değiştirin.
Bu konsolda kısaca, domain ve kullanıcı yönetimi için kullanılan vqadmin ve (tek bir domain için yönetim sağlayan) qmailadmin, log analizi yaparak e-posta trafiğinin istatistiğini tutan isoqlog ve gene log analizi yaparak e-posta trafiğini grafiksel olarak gösteren qmailmrtg sayfalarını görüntüleyebilirsiniz.
Not: Eğer isoqlog sayfasına girdiğiniz zaman hata alıyorsanız aşağıdaki komutu çalıştırarak tekrar giriş yapmanız gerekir.
[root@cntvm bin]# sh /usr/share/toaster/isoqlog/bin/cron.sh |
Bu komut /etc/isoqlog dizini altında bulunan isoqlog.domains dosyasına sisteme eklenmiş olan domainlerin adının eklenmesini sağlar ve ilgili domainler için isoqlog’un analiz yaparak aktivitenin raporlanacağı html sayfalarını oluşturur. Isoqlog’a ilk erişmeye çalıştığınız zaman almanızın muhtemel olduğu hata da bu html dosyalarının oluşturulmamış olmasından kaynaklanır.
Yeni bir domain açtığınız zaman, bu domain isminin ilgili dosyaya eklenmesi ve html dosyalarının periyodik olarak oluşturulması için aşağıdaki cron satırını sisteme ekleyebilirsiniz.
59 * * * * /usr/share/toaster/isoqlog/bin/cron.sh |
Böylece saat başı script çalıştırılacak ve domain update işlemi yapılacaktır.
Yönetim konsoluna göz attıktan ve isoqlog ile ilgili ayarları yaptıktan sonra, son olarak php.ini içerisinde On durumuna getirdiğimiz register_globals değerini Off duruma getirin ve service httpd restart komutu ile apacheyi yeniden başlatın.
Kurulum ve yapılandırma ile ilgili adımlar bu kadar.
YAPILANDIRMA
Artık, qmail ve bileşenleri ile ilgili temel ayar dosyalarına göz atabiliriz.
Qmail, bir çok yapılandırma dosyası ile gelir ve bu ayarlara ait hemen her yapılandırma dosyası /var/qmail/control dizininde bulunur. Asağıdaki tabloda Qmail’in ve qmail toaster ile kurulan bileşenlere ait yapılandırma dosyaları görülmektedir. Bu dosyaların detayları aşağıda ayrıca verilmiştir.
| badloadertypes | İstenmeyen loader type’ların burada belirlenir. |
| badmailfrom | İstenmeyen gönderici adreslerininbu dosyada belirlenir. |
| badmailto | İstenmeyen alıcı adresleri tanımlanır. |
| badmimetypes | İstenmeyen MIME Type’lar belirlenir. |
| blacklists | RBL kontrolunun yapılacağı BlackList adresleri burada tanımlanır. |
| clientcert.pem | servercert.pem dosyasına linklidir. (bkz: servercert.pem) |
| servercert.pem | TLS bağlantıları için sertifika ve private key’in bulunduğu dosya. |
| concurrencyincoming | Eş zamanlı gelen smtp bağlantı sayısının belirlendiği dosya. |
| concurrencyremote | Eş zamanlı gönderilebilecek posta adedinin belirlendiği dosya. |
| databytes | Bir e-postanın olabileceği maksimum boyut değeri. |
| defaultdelivery | Mailbox yapısının belirlendiği dosya. |
| defaultdomain | Sunucunun ön tanımlı alan adının belirlendiği dosya. |
| defaulthost | Ön tanımlı sunucu host adı. |
| dh1024.pem | TLS bağlantıları için 1024 bit’lik key |
| dh512.pem | TSL için 512 bit’lik key. |
| domainkeys/ | Domain anahtarlarının konumlandığı dizin. (Domainkey’e değinmeyeceğim.) |
| locals | Sunucuya ait local host isimlerinin tanımlandığı dosya. |
| logcount | Multilog için log rotate değeri. |
| logsize | Current isimli log dosyasının ulaşabileceği maksimum değer. |
| me | Sunucunun tam etki alan adı (FQDN) |
| queuelifetime | Maillerin kuyrukra bekleme süresi. |
| rcpthosts | Sunucunun kabul edeceği maillere ait domainlerin listelendiği dosya. |
| rsa512.pem | TLS bağlantısı için 512 bit RSA key |
| simcontrol | ClamAv, Spamassasin ve Attachment block için simscan conf dosyası. |
| simcontrol.cdb | Simscan db’si. |
| simversions.cdb | Simscan versiyon db’si |
| smtpgreeting | Sunucunun smtp bağlantıları için selamlama mesajı |
| smtproutes | Maillerin başka posta sunucusuna yönlendirilmesi için kullanılan dosya. |
| spfbehavior | Spf check level’ının belirtildiği dosya. |
| tlsclientciphers | OpenSSL client cipher stringleri |
| tlsserverciphers | OpenSSL server cipher stringleri |
| virtualdomains | Sisteme eklenen sanal domainler. |
Sunucunun özelleştirilmesi ile ilgili yapılabilecek bu control dosyalarını detayları şöyledir.
badloadertypes
Engellenmesi istenen base64 encoded Loader tipleri bu dosya içerisinde belirtebilirsiniz. Böylece, qmail-smtpd gelen maillerde istenmeyen bir loader type belirlemesi durumunda ilgili postayı reject edecektir. Ayrıca, dizinde badloadertypes.cdb isimli bir database dosyası bulunur. badloadretypes dosyasında belirtilmiş satırların bu db dosyasına işlenmiş olması gerekiyor. Dosyaya herhangi bir loader type ismi girdiğiniz zamam qmailctl cdb komutu ile bu işlemi gerçekleştirmeniz gerekir.
badmailfrom
İsminden de anlaşılacağı üzere, sunucunuza e-posta göndermesine isim vermediğiniz domainleri ya da e-posta adreslerini bu dosyaya ekleyebilirsiniz. Bu dosyaya ekli satırlar qmail-smtpd tarafından kontrol edilir ve uyan bir mail varsa reject edilir. Örneğin dosyaya @domain.com yazdığınız da, domain.com uzantılı e-mail adreslerinden sunucunuza mail atılamaz. domain adları ya da e-posta adresleri satır satır yazılmalıdır.
badmailto
Format ve çalışma mantığı bakımından badmailfrom ile aynıdır. Ancak alıcı e-posta ya da domainlerine yasaklama yapmak için kullanılır.
badmimetypes
e-posta’ların mime type’larına göre filtrelenebilmesini sağlar. İstenmeyen mime type’lar bu dosya da belirlenerek, içeriğinde bu mime tiplerinin bulunduğu maillerin qmail-smtpd tarafından reject edilmesi sağlanır. Bu şekilde attachment filtrelemesi de yapabilirsiniz. Aynı dizinde, bu dosyanın bilgilerinin tutulduğu badmimetypes.cdb isimli bir db dosyası bulunur. Dosya içerisinde yapılan ekleme çıkarmalardan sonra gene qmailctl cdb komutu ile değişikliklerin db’ye işlenmesi sağlanmalıdır.
blacklists
Smtp bağlantılarının kurulduğu ip’lerin taranacağı black listleri bu dosyada belirleyebilirsiniz. Ön tanımlı olarak dosyanın içeriği şu şekildedir; -r zen.spamhaus.org ve zen.spamhaus.org black list’i kullanılmaktadır; Birden fazla black list adresi girmek için ard arda -r blacklist1-domain -r blacklist2-domain şeklinde bir giriş yapılabilir. Dosyanın tek bir satırdan ibaret olması gerekmektedir. Doğru bir örnek aşağıdaki gibidir.
-r zen.spamhaus.org -r list.dsbl.org -r combined.njabl.org
Belli ip adreslerinden yapılan bağlantılar için RBL check işlemi yapmak istememniz durumunda, /etc/tcprules.d/tcp.smtp dosyasını editleyerek aşağıdakine benzer bir satır girebilirsiniz.
192.168.1.:allow,RELAYCLIENT="",DKSIGN="/var/qmail/control/domainkeys/%/private",RBLSMTPD=""
Yukardaki satır 192.168.1.0/24 ip networkünden kurulacak smtp bağlantıları için rblcheck işleminin yapılmamasını söylemektedir.
tcp.smtp dosyanızı editledikten sonra, değişikliklerin aktif olması için qmailctl cdb komutunu çalıştırmanız ve /etc/tcprules.d/ dizini altında bulunan tcp.smtp.cdb isimli db dosyasının güncellenmesini sağlamanız gerekmektedir.
clientcert.pem
Bu dosya, TLS bağlantılarında kullanılan SSL sertifikasını içermektedir ve aslında servercert.pem isimli dosyayı gösteren sembolik bir linktir. Kurulum sırasında otomatik olarak oluşturulmuştur.
servercert.pem
Encrypted TLS bağlantılarında client’a gönderilen SSL certifikasını içermektedir. İçerisinde hem sertifika hem de private key bulunur. Eğer bu dosya sunucuda bulunmazsa, TLS özelliği devre dışı bırakılır. Herhangi bir SSL sertifikası almanız durumunda, ilgili sertifikayı bu dosyaya ekleyebilirsiniz.
concurrencyincoming
Eş zamanlı olarak gelen maksimım smtp bağlantı adedinin belirlendiği dosyadır. Ön tanımlı olarak 100′dür. Yani sunucunuz aynı anda 100 adet smtp bağlantısına izin verir.
concurrencyremote
Eş zamanlı olarak giden maksimum smtp bağlantıları da bu dosya içerisinde belirlenmektedir. Qmail Toaster kurulumunda ön tanımlı değer 60′dır. Ancak paketin derlenmesi sırasında bu sayının maksimum 509 adede kadar çıkarılması için gerekli patch uygulanmıştır.
databytes
Bir e-postanın en fazla ne kadar büyük olabileceği bu dosyada tanımlanır. Ön tanımlı olarak 20Mbyte’tır.
defaultdelivery
Sunucunun mailbox tipini belirlemek üzere kullanılır. Genel geçer formak uzun zamandır maildir yapısı olduğundan dolayı qmail toaster da bu yapıyı kullanmaktadır. Kullanıcıların posta kutuları /home/vpopmail/domains///Maildir/ şeklinde tutulur. Kullanıcıya gelen mailler bu dizin altındaki new klasörüne konulur.
dh1024.pem
TLS bağlantıları için 1024 bitlik DH parametresi sunar.
dh512.pem
512′lik DH parametreleri
logcount
Qmail log dosyalarının maksimum kaç adet olabileceğinin belirlendiği dosyadır. Multilog bu değerden hareketle eski log dosyalarını siler. Qmail toaster bu değeri 100 olarak set etmektedir.
logsize
Bu dosyada ise log dosyalarının büyüklüklerinin maksimum değerleri belirlenmektedir. Ön tanımlı olarak yaklaşık 1Mb olarak set edilir.
queuelifetime
Qmail’in, gönderimi başarısız olan mailleri tekrar göndermeyi ne kadar süreyle deneyeceğini bu dosya içerisinden belirtebilirsiniz. Normalde bu değer 604800 saniye (bir hafta) olarak girilmiştir. Qmail Toaster bu değeri 86400 saniye (1 gün) olarak set ediyor. Eğer sunucunuz bir e-posta iletimi için uzaktaki ilgili smtp sunucusuna bağlanamazsa, maili bu değer süresince kuyruğunda tutar ve gönderimi periyodik aralıklarla tekrarlar. Süre sonunda mail gönderilememişse mailin göndericisine hata döndürerek durumu iletir.
rcpthosts
Bu dosya, sisteme eklenmiş olan tüm domainlerin bilgisini tutmaktadır. Sisteme herhangi bir domain eklendiğinde, domain ismi otomatik olarak bu dosyaya da eklenmektedir. Böylece qmail bu dosya içerisindeki domainlere gelen e-postaları kabul eder. Eğer dosyada adı geçmeyen bir domain’e ait bir adrese mail atılırsa qmail-smtpd ilgili maili reject eder. Sisteminizde açılmamış bir domaini bu dosyaya ekler ve bir mail atarsanız, qmail bu dosyadan hareketle gelen maili kabul edecek ancak üzerinde bu domaine ait herhangi bir kayıt bulunmadığından dolayı (domainin ilk MX kaydına bakarak) maili ana mail sunucuya iletecektir. Eğer ana mail sunucuya erişelemiyorsa queuelifetime süresince, 5′er dakikalik aralıklarla maili tekrar göndermeyi deneyecektir. Başarısız olursa maili gönderene bir hata mesaji yollayarak durumu bildirecektir.
rsa512.pem
TLS bağlantılar için kurulum sırasında oluşturulan 512 bit’lik bir RSA key.
simscan (simcontrol, simcontrol.cdb, simversion.cdv)
Simscan, vpopmail’i de geliştiren Inter7′nin yazdığı bir mail tarayıcı programıdır. Sunucuya bir mail geldiği zaman qmail-smtpd tarafından çalıştırılan simscan gelen dosyayı geçici bir alanda (qmail toaster ile kurulan paketlerden biri olan) ripemime isimli yazılımı kullanarak başlık, veri bölümü ve dosya eki olarak parçalara ayırarak içerik kontrolü yapar. Eğer mailin içerisinde engellenmesi belirtilen bir eklenti dosyası varsa oluşturduğu geçici dosyayı siler ve qmail-smtpd’ye maili reject edilmesini söyler. Ayrıca clamav süreci simscan’ın bir parçası olarak çalışmaktadır. Dolayısı ile simscan dizinindaki dosyalar clamav tarafından taranır ve sonuç bilgisi simscan tarafından alınır eğer mail virüs içeriyorsa qmail-smtpd’ye mailin reddedilmesini söyler. Bunun dışında, qmail toaster kurulumunda simscan spamassassin ile de birlikte çalışacak şekilde derlenmiştir. Bu nedenle gelen maillerin spamassassin tarafından yapılan analiz sonuçlarını da alarak spam olarak işaretlenmiş maillerin reddeilmesini sağlar.
Simscan ile ilgili tüm ayarlar simcontrol dosyası üzerinde yapılmaktadır. Dosyayı editlediğiniz zaman içeriğinin aşağıdaki gibi olduğunu görürsünüz.
:clam=yes,spam=yes,spam_hits=12,attach=.mp3:.src:.bat:.pif
Öntanımlı olarak oluşturulan bu dosya içeriğinde, maillerin clam ve spamassassin ile taranması, spam score’u 12 ve üstünde olan maillerin reddedilmesi belirtilmektedir. Ayrıca, engellenecek attachmentlar da burada belirtilmektedir.
Bu dosya içerisinde simscan’in farklı domain ya da kullanıcılar için nasıl davranacağını ayrı ayrı belirtebilirsiniz. Aşağıdaki örnek daha iyi kavramak için epey güzel.
postmaster@example.com:clam=yes,spam=no,attach=.txt:.com example.com:clam=no,spam=yes,attach=.mp3 :clam=yes,spam=yes,spam_hits=5
Yukarıdaki satırların mealleri şöyle;
postmaster@example.com adresine atılacak mailler için virüs taraması yapılsım, spam kontrolu yapılmasın. Ayrıca, txt ve .com uzantılı dosyaların gönderimi yasaklansın.
example.com domaini altında bulunan kullanıcılar için (postmaster hariç) virüs kontrolü yapılmasın, spam kontrolü yapılsun, .mp3 uzantılı dosyalar kabul edilmesin.
Yukarıdaki iki satırda belirtilen user ve kullanıcıya atılmamış olan diğer tüm e-mailler için virus ve spam kontrolü yapılsın, spam score’u 5 olan mailler silinsin. attachment kontrolü yapılmasın.
simcontrol dosyasını özelleştirmek için yukarıdaki örnek takip edilebilir.
Simscan’in control dosyasından hariç olarak aynı dizinde, simcontrol.cdb ve simversion.cdb isimli iki dosya daha bulunmaktadır. Bunlardan birincisi kuralları ikincisi de simscan, clamav ve spamassassin’in versiyon bilgilerini tutan cdb dosyalarıdır. Kuralları ya da spamassassin ve ya clamav’ı update ederseniz gene qmailctl cdb komutunu çalıştırarak değişikliklerin db dosyalarına kaydedilmesini sağlamanız gerekir.
smtpgreeting
Bu dosyada, sunucuta smtp bağlantısı sağlandığı zaman gönderilen karşılama mesajı bulunmaktadır. Farklı bir karşılama mesajı döndürmek istiyorsanız içeriğini değiştirebilirsiniz.
smtproutes
smtp routes dosyası gelen e-postaların farklı mail sunuculara yönlendirilmesini sağlayan bir dosyadır. Örneğin, bir domaininize gelen mailer için qmail toaster’i sadece spam ve virus taramasından geçirilmek üzere kullanmak isteyebilirsiniz. Bu durumda, smtproutes dosyasına domain_adı:ip_adresi şeklinde bir satır girebilirsiniz. Gelen mailler tarandıktan sonra ilgili ip adresine yönlendirilirler. (domaini rcpthosts dosyasına yazmanız da gerekir.) Bunun dışında birden fazla MX kaydı olan domainlere gidecek maillerin hangi sunucuya gideceğini de aynı şekilde ayarlayabilirsiniz.
Ayrıca, qmail-remote-auth patch’i toaster kurulumunda yüklenmiş olduğundan dolayı yönlendireceğiniz mailler için aşağıdaki gibi bir satır ile auth işlemi de yapabilirsiniz:
domain.com:yönlenecek_ip_adresi kullanıcıadı şifre
virtualdomains
Bu dosyaya eklemeler vpopmail tarafından otomatik olarak yapılır ve qmail-send’in bu domainleri gelen maillere local domain olarak davranması sağlanır. (Konu biraz havada kaldı ama bu dosyayı editlemenize pek gerek yok.)
Qmail’in toaster ile birlikte kurulan önemli yapılandırma dosyaları bunlardan ibaret. Sunucunuzda özelleştirme yapmak istemeniz durumunda işinize yarayacak dosyalar hemen hemen bunlardır.
Yapılandırma ile ilgili olarak detaylı bilgiye http://wiki.qmailtoaster.com/index.php/Configuration adresinden ulaşabilirsiniz.
Son olarak, qmail toaster için güzel bir eklenti olan qmailtoaster-plus isimli paketten bahsetmek istiyorum.
Bu paket, görsel bir menü sunarak, qmail-toaster’in yönetimini epey kolaylaştıran özellikler sunuyor ve ayrıca alternatif webmail arayüzü, filtreleme yazılımı vs. gibi ek paketleri kolayca sisteme entegre edebilmenizi sağlıyor.
Mesela, içerisinde qtp-newmodel denilen bir update scripti bulunuyor ki bu çok işinize yarayacaktır. Bu aracı komut satırında qtp-newmodel diyerek çalıştırdığınız zaman sistemde kurulu paketlerin güncel versiyonlarını kontrol ediyor ve yeni versiyonlar olması durumunda update işlemi yapıyor. Özellikle clamav sürekli engine güncellemesi yaptığı için çok qtp-newmodel epey işinize yarayacaktır.
qtp’yi kurmak için aşağıdaki adımları takip edebilirsiniz.
Öncelikle, qtp’nin rpm’lerine ulaşabileceğiniz yum deposunu kurun.
[root@cntvm updates]# rpm -Uvh http://qtp.qmailtoaster.com/trac/downloads/1 |
Daha sonra bu depoda bulunan qtp’yi yükleyin.
[root@cntvm updates]# yum install qmailtoaster-plus |
Kurulum tamamlandıktan sonra qtp-menu komutu ile işlem menüsünü çalıştırabilirsiniz. qtp-menu kullanılarak sisteme spamdyke gibi gelişmiş ek spam filteleri kolayca eklenebiliyor. Bu nedenle kesinlikle tavsiye ettiğim güzel bir uygulamadır.
Detaylı bilgi için http://qtp.qmailtoaster.com/trac adresine bakabilirsiniz.
Kurulum ve yapılandırma ile ilgili hemen herşey bu kadar. Siz de bir kurulum yaparak biraz mıncıklayabilir ve detaylara inebilirsiniz. Gerçekten toaster ile herşey epey kolaylaşıyor.
CentOS harici bir dağıtım kullanıyorsanız http://wiki.qmailtoaster.com/index.php adresinde bir çok dağıtıma ait kurulum dökümanı bulunuyor. Bakmanızı tavsite ederim.
Centos/Linux üzerine VMware Server 2.0 Kurulumu
29 Oca
| Bilindiği gibi virtualization (sanallaştırma) teknolojisi, sistemciler için harika çözümler sunan devrim niteliğinde bir konu. Tek bir donanım üzerinde birden fazla işletim sistemi çalıştırmaya yarayan sanallaştırma teknolojisi donanım, elektrik ve lokasyon gibi konularda ciddi oranlarda tasarruf etmek için birebir.Ben de, test ortamı ve performans kaygısı olmayan tüm sunucu uygulamaları için sanallaştırma teknolojisi kullanmaktayım. İşte bu yazıda da, VMware’in ücretsiz olan VMware Server sürümünün CentOS üzerine nasıl kurulduğuyla ilgili notları paylaşacağım. |
VMware Server 2.0 bir iki ay önce piyasaya çıkmış olmasından dolayı daha yeni sayılır ve her nekadar VMware’in ücretli olan appliance ve OS sürümlerinde bulunan bazı yönetimsel kolaylık sağlayan özelliklerinden muaf olsa da bahsettiğim tarzdaki kullanımlar için son derece yeterli ve üstelik süper kolay bir kuruluma sahip.
İşte nasıl kurulduğu;
GEREKSİNİMLER
WMware Server’i kurmak için bir bilgisayara sadece temel bileşenleri içeren bir CentOS 5.2 kurdum. Yani herhangi extra paket kurmadım; eğer siz de işe yeni bir CentOS kurarak başlayacaksanız aynı yöntemi takip etmenizi öneririm. Zira, aslında gerek olmayan paketleri sisteme kurarak kaynakları boşuna tüketmek pek doğru bir yol değil. Başlangıç için sadece Base paket grubunu seçmeniz yeterlidir.
Not: VMware 1.x versiyonunun aksine, sanallaştırma ortamı ile ilgili işler web tabanlı olarak gerçekleştirildiğinden dolayı sistemde X’in kurulu olması gerekmektedir.
Bunun dışında herzamanki gibi SELinux’u devreden çıkardım.
Şimdi elinizde, bomboş bir CentOS olduğunu varsayarak kurulum gereksinimlerine geçelim.
CentOS üzerine VMware Server’ı RPM olarak da, sıkıştırılmış tar.gz dosyasını indirip içerisinden çıkan perl kurulum scriptini çalıştırarak da kurmak mümkün. Ben tar.gz üzerinden kurulum yaptım. Dolayısı ile yazı, bu yöntemle yapılan kurulumu anlatıyor.
Kurulumu yapabilmek için sistemde kurulum sırasında derleme işlemleri için gcc’nin, kernel-devel ile kernel-headers gibi paketlerin ve de xinetd’nin kurulu olması gerekiyor.
Önce bunları kuralım;
# yum -y install gcc kernel-devel kernel-headers xinetd |
Yum ile yapılan bu kurulum, gerekli paketlerin tüm bağımlı paketler ile birlikte sisteminize yüklenmesini sağlayacaktır.
Artık kuruluma geçebiliriz.
KURULUM
Biraz önce de bahsettiğim gibi kurulumu RPM üzerinde ya da kurulum scripti üzerinden yapabiliyoruz. Biz script üzerinden yapacağımıza göre öncelikle tar.gz uzantılı VMWare Server 2.0 paketini download edelim.
http://www.vmware.com/freedownload/login.php?product=server20 adresinden kayıt olun.
İlgili adreste biraz teferruatlı bir kayıt formu bulunuyor. Kayıt formunu doldurduktan sonra belirtmiş olduğunuz e-mail adresine bir aktivasyon maili gönderiyorlar. Linki takip ettiğiniz zaman download sayfasına ve serial key’inize ulaşıyorsunuz. İlgili key’i bir kenara not edin. Kurulum sırasında lazım olacak.
539MB’lik tar.gz dosyasını sisteminize indirdikten sonra sıkıştırılmış paketi açın.
Paketin, /usr/local/src dizinine download edildiğini varsayıyorum.
# cd /usr/local/src # tar xvfz VMware-server-2.0.0-122956.i386.tar.gz |
Şimdi kurulum scriptini çalıştırabiliriz.
# cd vmware-server-distrib/ # ./vmware-install.pl |
Kurulum scripti çalıştırıldığı zaman, binary dosyalarının, scriptlerin, daemon dosyalarının, kütüphane dosyalarının, man ve dökümantasyon dosyalarının nereye kurulmasını istediğinizi belirtmeniz istenen sorular gelecektir. Sorulara Enter’a basarak default cevapları vermeniz yeterli olacaktır.
Herşey sorunsuz gittiyse; http://host-ip-adresi:8222 adresinden vmware server management konsoluna erişebilirsiniz.
Kurulum bu kadar. Bundan sonra sanal makinelerinizi oluşturup ister cd üzerinden ister iso dosyaları üzerinden işletim sistemlerinizi kurabilir, sanallaştırma teknolojisinin nimetlerinden yararlanabilirsiniz.
Centos 5.2 üzerine Red5 Flash Server Kurulumu
29 Oca
| Red5, java ile yazılmış olan açık kodlu bir Flash Serverdır. Red5′ın kullanım alanları arasında, Audio/Video Streaming, Recording Client Streams, Live Stream Publishing gibi konular bulunuyor. Yani red5 ile Mp3 yada FLV formatındaki medya dosyalarının yayınını yapabiliyorsunuz ya da karşıdaki bir bilgisayarın kamerasından alınan görüntüyü sunucunuza FLV formatında kaydedebiliyorsunuz ve ya iki bilgisayar arasında Video Chat uygulaması gerçekleştirebiliyorsunuz. |
Bu yazıda, Red5′ın Centos 5.2 üzerine nasıl kurulabileceği ile ilgili notlar bulabilirsiniz.
Öncelikle, Red5 kurabilmek için sisteminizde öncesinden kurulu olması gereken bazı yazılımlar var:
subversion
java jdk
ant 1.7
Eğer, java jdk kurulu değilse, red5 kurulumu için yaptığım Java 1.6 JDK kurulumuna ait notları içeren şu dökümandan yararlanabilirsiniz: http://blog.cagriersen.net/2008/10/centos-uzerine-sun-java-kurulumu-jdk/ Subversion isimli paket red5′ın trunk versiyonunu çekmek için gereklidir. Bu yazıyı yazarken latest stable version’unda bulunan bir bugdan dolayı derleme işlemi gerçekleştirilemiyordu. Ama trunk version’da sorun yok.
Gerekli paketlerin kurulumu:
Subversion
Subversion’ın sisteminizde kurulu olup olmadığına yum kullanarak bakabilirsiniz.
# yum list |grep subversion |grep installed |
Eğer herhangi bir sonuç dönmezse aşağıdaki şekilde kurulum yapabilirsiniz. Eğer kurulu ise bu adımı geçebilirsiniz.
# yum install subversion |
Sun Java JDK
Subversion sisteme yüklendi ise bundan sonraki aşama Java JDK kurulumunu yapmaktır. CentOS ile birlikte gelen java sürümü JDK içermediği ve aynı durum SUN’dan indirebileceğiniz Java kurulum paketleri için de geçerli olduğundan dolayı custon bir Java kurulumu yapmanız gerekmektedir. Ben de red5 kurulumu yaparken JDK sorunu ile karşılaştım ve bu nedenle custom java kurulumu yaptım. Ayrıca, konu ile ilgili bir kurulum dökümanı da hazırladım. Dökümana http://blog.cagriersen.net/2008/10/centos-uzerine-sun-java-kurulumu-jdk/ sayfasından erişebilirsiniz. Yönergeleri takip edip Java kurulumunu yaptıktan sonra buraya geri dönüp red5 kurulumuna devam edebilirsiniz.
Ant 1.7
Aşağıdaki adımları izleyerek Ant 1.7.1 kurulumunu kolayca yapabilirsiniz.
/usr/local/src dizinine geçip paketi download edin.
# cd /usr/local/src # wget http://godel.cs.bilgi.edu.tr/apache/ant/binaries/apache-ant-1.7.1-bin.tar.gz |
Sıkıştırılmış dosyayı açın ve adı apache-ant-1.7.1 olarak gelen dizini yeniden isimlendirip /usr/local/ altına taşıyın. (ant’ın /usr/local dizininde bulunması şart değildir. İsterseniz farklı bir dizine de taşıyabilirsiniz.
# tar zxf apache-ant-1.7.1-bin.tar.gz # mv apache-ant-1.7.1 /usr/local/ant |
Sisteme, ant dizininin nerede durduğunu söyleyelim ve ant’ınhome dizininde bulunan ant binarysine /usr/bin/ altından erişilebilmesi için bir link oluşturalim.
# export ANT_HOME=/usr/local/ant # ln -s /usr/local/ant/bin/ant /usr/bin/ant |
Ant kurulumu bu kadar.
Red5 Kurulumu
Simdi gene /usr/local/src dizinine geçin ve red5′ı aşağıdaki komut ile sisteminize download edin.
# cd /usr/local/src # svn co http://red5.googlecode.com/svn/java/server/trunk red5 |
Not: Yukarıdaki komut red5′ın trunk versiyonunu download etmektedir. Normal şartlarda red5′ın sitesinde ki download sayfasından güncel sürümün tar ball’unu indirmeniz mümkün. Ancak ilgili sayfadaki son sürüm derleme aşamasında sorun çıkarıyor. Bu nedenle svn’den trunk versiyonu kurdum; sorun çıkarmadı.
Kodu download ettiyseniz derleme aşamasına geçebilirsiniz. Ama öncesinde sisteme Java’nın home dizinine ait yolu göstermeniz gerekiyor. (Ant’ın dizinini yukarıda göstermiştik). Java kurulumunu verdiğim adresten yaptıysanız Java Home dizini aşağıda belirtildiği gibi olacaktır. Ancak Java’yı kurarken başka bir path belirtmiş olabilirsiniz. bu durumda kendi path’i kendinizinki ile değiştirmeyi unutmayın.
# export JAVA_HOME=/usr/lib/jvm/java-1.6.0/ |
Java yolunu da export ettikten sonra aşağıdaki adımları takip ederek red5 kurulumunu yapabilirsiniz.
/usr/local/src dizininde bulunan red5 dizinini /usr/local dizini altına taşıyın.
# mv red5 /usr/local/ |
/usr/local/red5 dizinine geçip aşağıdaki komutları sırası ile vererek derleyin.
# cd /usr/local/red5 # /usr/local/ant/bin/ant prepare # /usr/local/ant/bin/ant dist |
Derleme işlemi sorunsuz olarak bittiyse, red5 server çalıştırılmaya hazır demekdir. dist dizinine geçip red5′ı çalıştırın.
# cd dist # sh red5.sh |
Herşey yolunda gittiyse, şu anda red5′ın çalışıyor olması gerekir. Kontrol etmek için aşağıdaki adımları uygulayabilirsiniz.
red5 http server 5080. ve rtmp servisi de 1935. portları dinler. ps ile ilgili portların dinlenip dinlenmediğini kontrol edebilirsiniz.
# netstat -an |grep 5080 tcp 0 0 :::5080 :::* LISTEN |
ve 1935
# netstat -an |grep 1935 tcp 0 0 :::1935 :::* LISTEN |
Eğer yukarıdaki komutların çıktılarında görüldüğü gibi bir çıktı alırsanız serverınız çalışıyor demektir.
İkinci olarak, red5 serverınızı yönetim panelini çağırarak test edebilirsiniz.
http://Server-IPsi:5080/
Eğer sayfa geliyorsa çalışıyor demektir. Ayrıca, gelen bu sayfada red5 demolarını yükleyebilir ya da görüntüleyebilirsiniz.
Son olarak, red5′i bir shell script dosyasını çağırmak sureti ile çalıştırdığımız için console’da ya da ssh ile yapılan bağlantılarda, command prompt geri gelmeyecektir. Bu nedenle red5”ı sisteme servis olarak eklemek gerekmektedir. Bu şekilde red5 sistemin açılışı sırasında da otomatik olarak çalışacaktır.
Red5′ın sisteme non root bir kullanıcı ile çalışrılacak şekilde servis olarak eklenmesi
Red5′in açılışta otomatik olarak çalıştırılması için http://weblogs.amtex.nl/index.php?blog=2&title=red5_start_stop_init_script_on_centos_re&more=1&c=1&tb=1&pb=1 yayınlanan bir init script’i var. Bu scripti kullanarak sistemi services red5 start / stop komutu ile yönetmek mümkün. Ancak, red5′ın root kullanıcısı ile çalıştırılması pek tavsiye edilmeyen bir şey ve bu scriptin orjinalinde yer alan “root ile çalıştırmama” kısımları işlev görmedi. Ben de scripti alıp üzerinde küçük değişiklikler yaptım. Ayrıca, scripti sistem servisi olarak eklemek için gerekli olan chkconfig satırları da yoktu; onları da ekledim. Böylece red5 açılışta da otomatik olarak non root bir kullanıcı ile çalıştırılmaya başladı. Script içeriğini ve yapılması gerekenler şöyle:
Aşağıdaki satırları copy paste usulü ile /etc/init.d dizini altında açacağınız red5 isimli bir dosyaya aktarın ve Red5 dizini, Java dizini ve Java version’u ile ilgili satırları kendinize göre düzenleyin. (Bu dökümandan yararlanarak kurulum yaptıysanız scriptteki dizin pathleri doğrudur.)
#!/bin/bash
#
# chkconfig: 2345 85 15
# description: Startup script for Red5 flash streaming server
#
# processname: red5
# pidfile: /var/run/red5.pid
# config: /etc/red5.conf
# Source function library.
. /etc/rc.d/init.d/functions
RED5_HOME=/usr/local/red5/
JAVA_HOME=/usr/lib/jvm/java-1.6.0/
JAVA_VERSION=1.6
JAVACMD=/usr/lib/jvm/java-1.6.0/bin/java
OPTIONS="-cp ${RED5_HOME}red5.jar:${RED5_HOME}conf:$CLASSPATH org.red5.server.Standalone"
DESCR="Red5 flash streaming server"
PID_FILE=/var/run/red5.pid
PID=`ps ax |grep java|grep red5|awk '{print $1;}'`
RETVAL=0
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
# Read config file if it is present.
if [ -r /etc/red5.conf ]
then
. /etc/red5.conf
fi
start() {
echo -n $"Starting $DESCR: "
RETVAL=$?
[ $RETVAL = 0 ] && touch /var/lock/subsys/red5 && echo $!>$PID_FILE && echo_success
echo -n "Starting Red5 Service"
echo -n " "
cd /usr/local/red5/dist
#./red5.sh &
su -p -s /bin/sh red5 -c ./red5.sh &
sleep 2
return $RETVAL
}
stop() {
echo -n $"Stopping $DESCR: "
#killproc $PID_FILE
[[ $PID != "" ]] && success && kill $PID || failure
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/red5 $PID_FILE
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo $"Usage: $DESCR {start|stop|restart"
exit 1
esac
exit $RETVAL
|
Script içerisinde non-root user olarak kullanılan red5 isimli bir kullanıcıya ihtiyacımız var. Aşağıdaki komutla açalım. (Herhangi birinin sisteme o user ile bağlanamaması için nologin parametresi ile açın.)
# useradd -s /sbin/nologin red5 |
red5 scriptine ilgili yetkileri verin ayrıca, red5 dizininin sahibini red5 kullanıcısı yapın.
# chmod 700 red5 # chown -fR red5 /usr/local/red5 |
Şimdi, red5′ı servis olarak ve level 2, 3, 4 ve 5′de otomatik start edilmesi için sisteme ekleyin.
# chkconfig --add red5 # chkconfig --level 2345 red5 on |
Herşey yolunda gittiyse, chkconfig –list |grep red5 dediğiniz zaman aşağıdaki gibi bir çıktı almanız gerekir.
# chkconfig --list |grep red5 red5 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
Artık, red5 her sistem açılışında otomatik olarak başlatılacak. Eğer “red5 service start” komutunu verirseniz de servis start edilir. Burada dikkat edilmesi gereken bir nokta, servisin başlatılması sırasında, debug bilgileri ekrana basıldığından dolayo promptun düşmemesidir. Tekrar komut satırına düşmek için ctrl + c yapabilirsiniz. Servis arka planda çalışmaya devam edecektir.
Son olarak Sisteminizi restart edin ve red5′ın çalışıp çalışmadığını kontrol edin. Nonroot olarak çalışan red5 prosesini reboot sonrası ps aux |grep red5 komutu ile görüntülerseniz aşağıdaki gibi bir sonuç almanız gerekir.
root 2783 0.0 0.4 5899 0119 pts S 00:52 0:00 su -p -s /bin/sh red5 -c ./red5.sh red5 2785 1.0 7.0 20929 43540 ? Esl 00:52 0:08 /usr/bin/java -Dpythonvs......... |
Yukardaki ps çıktısının ilk satırında, ./red5.sh shell scriptinin root tarafından red5 isimli non-root kullanıcısına düşüldükten sonra çalıştırıldığı; ikinci satırda ise red5 isimli kullanıcının asıl process’i çalıştırdığını görebilirsiniz.
Hepsi bu kadar.
Kaynak: http://osflash.org/red5
Google Analytics 2.0 MyBB 1.4.x
24 Oca
Eklenti Adı : Google Analytics
Eklenti Yapımcısı : Jesse Labrocca
Türkçe Çeviri : Tickhi
Eklenti Sürümü : 2.0
Uyumlu MyBB Sürümü : 1.4x
Eklenti Açıklaması: Google Analytics kodunuzu her sayfaya eklemeye yarar.
Eklenti Şifresi :www.mybbturkiye.com
Ekran Görüntüsü :
![[Resim: google.jpg]](http://www.mybbturkiye.com/images/google.jpg)
Yükleme :
1. Rar lı dosyayı açıp
/inc/plugins/google_analytics.php şeklinde sitenize yükleyin.
2. Admin panelinize girip eklentiler bölümünden Google Analytics eklentisini aktifleştirin.
3. Ayarlara Girip “Google Analytics” sekmesinden eklentiyi aktif seçip kodunuzu girip kaydedin.
Bağlanmayacaksın
23 Oca
Bağlanmayacaksın bir şeye, öyle körü körüne.
“O olmazsa yaşayamam.” demeyeceksin.
Demeyeceksin işte.
Yaşarsın çünkü.
Öyle beylik laflar etmeye gerek yok ki.
Çok sevmeyeceksin mesela. O daha az severse kırılırsın.
Ve zaten genellikle o daha az sever seni,
Senin onu sevdiğinden.
Çok sevmezsen, çok acımazsın.
Çok sahiplenmeyince, çok ait de olmazsın hem.
Hatta elini ayağını bile çok sahiplenmeyeceksin.
Senin değillermiş gibi davranacaksın.
Hem hiçbir şeyin olmazsa, kaybetmekten de
korkmazsın.
Onlarsız da yaşayabilirmişsin gibi davranacaksın.
Çok eşyan olmayacak mesela evinde.
Paldır küldür yürüyebileceksin.
İlle de bir şeyleri sahipleneceksen,
Çatıların gökyüzüyle birleştiği yerleri sahipleneceksin.
Gökyüzünü sahipleneceksin,
Güneşi, ayı, yıldızları…
Mesela kuzey yıldızı, senin yıldızın olacak.
“O benim.” diyeceksin.
Mutlaka sana ait olmasın istiyorsan birşeylerin…
Mesela gökkuşağı senin olacak.
İlle de bir şeye ait olacaksan, renklere ait
olacaksın.
Mesela turuncuya, yada pembeye.
Ya da cennete ait olacaksın.
Çok sahiplenmeden, Çok ait olmadan yaşayacaksın.
Hem her an avuçlarından kayıp gidecekmiş gibi, Hem
de hep senin kalacakmış gibi hayat.
İlişik yaşayacaksın. Ucundan tutarak…
CAN YUCEL
Google SEO MyBB 1.4
12 Oca
Eklenti Adı : Google SEO MyBB 1.4
Kurulum Derecesi : Basit
Kurulum : Dosyaları forum ana dizinine atın ve eklentilerden çalıştırın.
Öznizleme :

Sensiz Dünler Hiç Yaşanmadı ki..
5 Oca

Ellerimde yorgun bir ihtilal ve kaybetme korkusunun bir sis gibi çökmüşlüğü,
Yüreğimin tam orta yerine..
Gitmelere ait tüm hikayeleri toplayıp savururken içimden,
Seni buldum..
Çığlığımı sustum ve anladım..
” Sensiz dünler hiç yaşanmadı ki “..