İki sayfa olarak yazılmış bu yazılarımızın esas amacı Php socket açma yöntemi ile ele geçirilmiş makinelerden yapılan mail-spam saldırılarını durdurmak ve mail serverlerimizin black liste gitmesine engel olmaktır. Bu yapıyı gerçekleştirir kullandığımız araçlar tamamı ile Open Source ve hala geliştirilmeye devam edilen projelerdir.
Kullandığımız yapılardan ve işlevlerinden biraz bahsetmek gerekirse farklı makinelerimizin tek bir yapı altında kontrol edilmesi ve loglanması için relay server mantığını kullandık. Bu yapıda kullandığmız esas programlar MTA olarak kullanılan Postfix, maillerin içeriğini otomatik olarak kontrol eden Spamassasin ve işin büyük kısmını yapan Policyd Cluebringer.
Bir Postfix eklentisi olan Policyd lightweight yapısı ile mail geldiğinde mailin içeriğine bakmadan sadece headerlerini kontrol edip mail atan kişinin bizim müşterimiz olup olmadığını kontrol edip eğer sistemde izinli ise mail atmasına izin vermesidir. Tahmin edebilirsiniz ki bu yapı ile sistemde tanımlı olmayan maillerin engellenmesi ile %60 daha fazla bir oranla outbound maillerde engelleme uygulayabiliyoruz ve kayıtlı kullanıcıların maillerinin sıkıntısız bir şekilde iletiyoruz.
!! Not kurulumda Ubuntu 15.04 versiyonu kullanılmıştır.
- 1 Postfix, Spamassasin, Policyd Kurulumu ve Konfigürasyonu
- 1.1 Exim Cpanel Serverinin Yönlendirilmesi
- 1.2 Postfix Kurulumu
- 1.3 Spamassassin kurulumu
- 1.4 Policyd Kurulumu
- 1.4.1 Kurulum biraz sıkıntılı sebepleri
- 1.4.2 Kurulum
- 1.4.3 Kurulum için gerekli perl modüllerinin yüklenmesi
- 1.4.4 Mysql veritabanına özel veritabanının hazırlanması
- 1.4.5 Veritabanının aktifleştirilmesi
- 1.4.6 Cluebringerin database özelliklerine göre konfigürasyonu
- 1.4.7 Cluebringerin postfix ile ilişkilendirilmesi
- 1.4.8 Cluebringer-webui konfigürasyonu
- 1.5 Son notlar
- 1.6 Kaynakça
- 1.1 Exim Cpanel Serverinin Yönlendirilmesi
1 Postfix, Spamassasin, Policyd Kurulumu ve Konfigürasyonu
1.1 Exim Cpanel Serverinin Yönlendirilmesi
nano /etc/exim.confKomutu ile var ise smart route satırını editliyoruz yoksa kendimiz
ekliyoruz
smart_route:
driver = manualroute
domains = !+local_domains
transport = remote_smtp
Burada Exim MTA sisteminde gelen bütün portun hepsinin diğer makineye aktarılması sağlanır
route_data = <RELAY SERVER IP>
1.1.1 Yönlendirmenin test edilmesi
echo “This is the body of the email” | mail -s “This is the subject line” user@example.com- Komutu ile herhangi bir yere mail atmalısınız ve tcpdump komutu ile
relay server makinesinden dinlemelisiniz eğer sayfada çıktı
oluşuyorsa yönlendirmeyi doğru yapmışsınız denilebilir
tcpdump host <CPanel IP>- Eğer burada serverimizden gelen paketleri alabiliyorsak bundan sonra
esas işlemlerin ve düzenlemelerin yapılacağı Relay serverimize
geçebiliriz
1.2 Postfix Kurulumu
1.2.1 Postfix kurulumu için gerekli ekipmanlar
- Programın kurulması için root yetkisi
Postfixi test etmek için Postfix üzerinden çalışan mail mailx gibi
komutları içeren mailutils paketi
apt-get install mailutils
- NOT Burada Postfix ile alakalı ekranda bir ayarlama gelir ise
Smart Host seçeneği ile ilerleyeceğiz gerekli işlemleri biz
kendimiz manuel olarak etc dizininde main.cf ve master.cf
dosyaları üzerinde yapacağız.
- main.cf hakkında daha fazla bilgi[^fn-1]
- master.cf hakkında daha fazla bilgi[^fn-2]
- NOT Burada Postfix ile alakalı ekranda bir ayarlama gelir ise
Postfix ekipmanlarının indirilmesi
apt-get install postfix
Postfix elemanlarının yapılandırılması
- main.cf nin editlenmesi
sudo nano /etc/postfix/main.cf
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = SERVERNAME
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localdomain, localhost, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 31.192.215.72
mailbox_command = procmail -a “$EXTENSION”
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
NOT!! eğer burada Postfix ile alakalı ayarları sorarsa no
configuration seçeneğini işaretleyin
- Postfix serverin yeni ayarlarının uygulanması
sudo service postfix restart
Sistemin çalışırlığının test edilmesi
echo “This is the body of the email” | mail -s “This is the subject line” user@example.com
- Eğer burada user@example.com sitesine mail gidiyorsa ve
ayrıntılarda Postfix görüyorsanız sistem gayet güzel
çalışıyor diyebiliriz.
- Eğer burada user@example.com sitesine mail gidiyorsa ve
1.3 Spamassassin kurulumu
Bu kısımda Postfixte bir eklenti olarak çalışan Spam assaasian
yazılımını yükleyeceğiz
apt-get install spamassassin spamc
Spamassassinin çalışmasının daha düzenli olması için kullanıcı grubu
ve kullanıcı ekleyeceğiz
# Grubun eklenmesi
groupadd spamdKullanıcının eklenmesi ve home dizini ayarları
useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd
Logların tutulacağı yer ve yetkilendirmenin yapılması
mkdir /var/log/spamassassin
chown spamd:spamd /var/log/spamassassin
1.3.1 Spamassassini aktifleştirme ayarlarının yapılması
Burada Spamassassinin gerekli ayarlarını yapacağız
nano /etc/default/spamassassin
Spamassasinnin aktif edilmesi
ENABLED=0
satırının bulunup aşağıdaki satır ile değiştiriniz
ENABLED=1
Güncellenme ve yeni spam listelerini getirmesi için
CRON=0
satırını bulup aşağıdaki satır ile değiştiriniz
CRON=1
SAHOME adında bir değişken oluşturup aşağıdaki gibi set ediniz
SAHOME=“/var/log/spamassassin/”
OPTIONS değişkenini bulup aşağıdaki değeri atayınız
OPTIONS=“–create-prefs –max-children 5 –username spamd -H ${SAHOME} -s ${SAHOME}spamd.log”
Herşeyin aktifleşmesi için spamassassini yeniden başlatın
service spamassassin start
1.3.2 Spamassassinin Postfix ile ilişkilendirilmesi
- Bu bölümde yapılandırılmış Spamassassin konfigürasyonumuzu Postfix
ile ilişkilendireceğiz
Bu sebeple Postfixin ana konfigürasyon dosyasını editlememiz
gerekiyor
nano /etc/postfix/master.cf
Aşağıdaki satırı bulup bir altındaki ile değiştiriniz
#smtp inet n - - - - smtpd
smtp inet n - - - - smtpd -o content_filter=spamassassin
Sütunlar bittikten sonraki ilk boşluğa bu satırları ekleyiniz
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Değişiklikleri uygulamak için Postfix’i restart ediniz
service postfix restart
1.3.3 Spamassassin yapılandırılmasının özelleştirilmesi
- Bu kısımda basit bir şekilde spam maillerin ne gibi bir işlem
göreceği hakkında kurallar yazacağız - Yazdığımız kurallar sadece maillerin spam olarak işaretlenmesi ve
bunun derecelendirmesini yapacak
Öncelikle bu özelleştirmelerin yapılacağı konfigürasyon dosyasını
açıyoruz
nano /etc/spamassassin/local.cf
Aşağıdaki satırları kontrol ederek ekli ise düzenliyoruz ekli değil
ise biz kendimiz ekliyoruz
#Eğer sistem maili spam olarak algılamışsa mail title kısmına SPAM SCORE unu ekle
rewrite_header Subject [***** SPAM SCORE *****]
#Spamasasinin değerlerine göre spam olup olmadığına karar verir Bunu duruma göre değiştiebiliriz
required_score 5.0
#auto update ayarları
use_bayes 1
bayes_auto_learn 1
Servisi yeniden başlatıyoruz
service spamassassin restart
- Servis yeniden başlatıldığında buradan düzgün çalışıp
çalışmadığını aşağıdaki komut ile kontrol edebilirsiniz
tail -f /var/log/spamassassin/spamd.log
- 2. olarakta C Panelden mail atarak ve mailin detaylarını Spamassassini
ve diğer değerleri alıcının mail kutusundaki ayrıntılar kısmından
bakabilirsiniz.
- Servis yeniden başlatıldığında buradan düzgün çalışıp
1.4 Policyd Kurulumu
1.4.1 Kurulum biraz sıkıntılı sebepleri
- Perl paketlerinin yüklenmesi ve bazı perl fonksiyonlarına özel ayar
yapılması gereği - Linklerdeki kurulumların eski olması ve çalışmıyor olması
- mysql versiyonuna göre veri tabanının hazırlanması
1.4.2 Kurulum
Kurulumu apt-get reposu ile yapacağız bu aşağıdaki komut bize web
arayüzü ile birlikte gerekli çoğu programıda beraberinde
yükleyecektir.
apt-get install postfix-cluebringer
- Bu kod ile birlikte sistemimize bize gerekli olan
- php5
- bazı gerekli perl modülleri
- CIDR
- Bu kod ile birlikte sistemimize bize gerekli olan
1.4.3 Kurulum için gerekli perl modüllerinin yüklenmesi
http://wiki.policyd.org/requirements
MySQL, PostgreSQL or SQLite
apt-get install mysql-server mysql-client
Net::Server >= 0.96
/usr/bin/perl -MCPAN -e ‘install Net::Server’
Net::CIDR
/usr/bin/perl -MCPAN -e ‘install Net::CIDR’
Config::IniFiles (debian: libconfig-inifiles-perl, rpm:
perl-Config-IniFiles)
apt-get install libconfig-inifiles-perl
Cache::FastmMap (debian: libcache-fastmmap-perl, rpm:
perl-Cache-FastMmap)
apt-get install libcache-fastmmap-perl
Mail::SPF (required for CheckSPF module)
/usr/bin/perl -MCPAN -e ‘install Mail::SPF ‘
- NOT bazı yüklemeler apt-get install postfix-cluebringer
sırasında yüklenmiş olabilir - Not2 ilk defa perl reposundan modül indiriyorsanız gerekli repo
ayarlarının yapılması için gelen sorulara [yes] demeniz
gerekmektedir
1.4.4 Mysql veritabanına özel veritabanının hazırlanması
- Cluebringer birkaç veritabanı ile tümleşik çalışabilmektedir. Ben
burada yaygın kullanımı açısından mysql veritabanını seçtim. Bu veri
tabanı kullanılırken cluebringer her veritabanı sistemimize özel sql
yapısı istiyor. Bu yüzden biz bu veritabanını kendimiz oluşturmamız
gerekiyor.
Hangi veritabanını kullanacağımıza karar verdikten sonra bir de bu
veritabanımızın versiyonunu öğrenmemiz gerekiyor
mysql –versionmysql Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3
- Mysql versiyonumuz burada 5.5.44 olduğu anlaşılıyor
- Şimdi veritabanımızın şemasını hazırlayacağımız sistemi indirmemiz
gerekiyor
Policyd ekipmanlarının indirilmesi
cd
mkdir policyd-cluebringer
cd policyd-cluebringer
wget http://download.policyd.org/v2.0.14/cluebringer-v2.0.14.tar.xz
unxz -c clue* | tar xv
cd clue*
cd database
for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql
do
./convert-tsql mysql55 $i
done > policyd.mysql
1.4.5 Veritabanının aktifleştirilmesi
Şimdiye kadar kendimizin kullanacağı veri tabanımızı hazırladık
fakat henüz kullanılabilir şekilde değil bu veri tabanının
bağlantısını mysql ile ilişkilendireceğiz.
mysql -p
Enter password:
#eğer daha önceden oluşturulmuş bir veritabanı varsa sil yoksa oluştur
#mysql> drop database cluebringer;
mysql> create database cluebringer;
mysql> use cluebringer;
mysql> CREATE USER ‘cluebringer’@‘localhost’ IDENTIFIED BY ‘mypassword’;
mysql> GRANT ALL PRIVILEGES ON cluebringer.* TO ‘cluebringer’@‘localhost’;
exit
Bu query dosyasını mysqlde çalıştıracağız
mysql -u root -p cluebringer < policyd.mysql
1.4.6 Cluebringerin database özelliklerine göre konfigürasyonu
cluebringer dosyasını editleyin
nano /etc/cluebringer/cluebringer.conf
Aşağıdaki değişkenleri bulup değerlerini değiştiriniz
DSN=DBI:mysql:dbname=cluebringer;host=localhost
DB_Type=mysql
DB_Host=localhost
DB_Port=3306
DB_Name=cluebringer
Username=cluebringer
Password=mypassword
Servisi başlatınız ve kontrol ediniz
service postfix-cluebringer start
service postfix-cluebringer status
1.4.7 Cluebringerin postfix ile ilişkilendirilmesi
Postfixin Policyd izinleri
nano /etc/postfix/main.cf
- Aşağıdaki satırları en alta yapıştırınız
smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031, permit_mynetworks
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031, permit_mynetworks
- Policyd ile birlikte çalışan perl kütüphanesine izin vermek için
nano /etc/postfix/master.cf
-Bu satırı listeye ekleyin
policy-spf unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl
1.4.8 Cluebringer-webui konfigürasyonu
Bu kısımda policyd nin web arayüzü olan kısmının ayarlarını
yapacağız
nano /etc/cluebringer/cluebringer-webui.conf
Aşağıdaki satırları dosyaya ekleyin veya editleyin
$DB_DSN=“mysql:host=localhost;dbname=cluebringer”;
$DB_USER=“cluebringer”;
$DB_PASS=“mypassword”;
Şimdi usr/share altında olan web sayfalarınını link olarak apache2
programına tanıtalım
cd /var/www/html
ln -s /usr/share/postfix-cluebringer-webui/webui/
Php5 mysql driverinin yüklenmesi</p>
- Artık bütün işlemleri tamamlamış bulunmaktayız ve bir tek php
ile mysql arasındaki bağlantıyı kuracak driveri yüklememiz
gerekiyor
apt-get install php5-mysql
- Artık serverimize <Relay Server IP/webui> sayfasından
ulaşabilirsiniz
- Artık bütün işlemleri tamamlamış bulunmaktayız ve bir tek php
1.5 Son notlar
- Artık serverimiz pratikte iş yapar hale gelmiştir bundan sonra
yapılacak ayarların hepsi sizin serverlerinizin durumuna ve Policyd
programında nasıl yetki vereceğinize bağlı olarak değişicektir.
- !! Bu kısıma kadar ne yapmadık !!
- Serverimiz her hangi bir koruması bulunmamakta yani sizin
serverinizin IPsini yazan her hangi bir kişi /webui
arayüzünden istediği gibi kural atayabilir. - Spamassasin sadece spamları işaretlemek için
ayarlardığımızdan spam mailleriniz dışarı, mail kısmında
bulunan title kısmını değişicektir ve herhangi bir silme
işlemi uygulamayacaktır. - Her mail serverin üstünden geçen mailleri imzalamak gibi bir
özelliği vardır, bizim Eximden çıkan maillerimizin IPsi ,
Makine ismi versiyonu gibi özellikleri gizleme işlemi
yapılmadı. - Aynı şekilde Spamasasinin de header imzalama özelliğinden
dolayı oluşan headerlerin silinmesi yapılmadı - Policyd üzerinde özelleştirme yapmadık.
- Serverimiz her hangi bir koruması bulunmamakta yani sizin
- !! Bu kısıma kadar ne yapmadık !!
Bunların ayarları için diğer yazımızı inceleyebilirsiniz.
1.6 Kaynakça
1.6.1 Postfix kurulum sayfaları
1.6.2 Spamassassin kurulum sayfaları
1.6.3 Policyd kurulum sayfaları
- http://uname.pingveno.net/blog/index.php/post/2015/03/11/Configure-sender-rate-limits-to-prevent-spam,-using-cluebringer-(policyd)-with-Postfix
- http://wiki.policyd.org/requirements
- http://wiki.policyd.org/installing
- http://www.kutukupret.com/2009/09/13/postfix-centos-policyd-v2-mysql/
- http://ngocquyetlinux.blogspot.com.tr/2013/05/limit-mail-with-policyd.html
- https://help.ubuntu.com/community/Postfix/SPF
- http://imanudin.net/2014/09/08/how-to-install-policyd-on-zimbra-8-5/
- https://wiki.zimbra.com/wiki/Postfix_Policyd
Footnotes
[^fn-1] http://www.postfix.org/postconf.5.html
Yorum Yap
* Yorumunuz onaylandıktan sonra yayınlanacaktır.
Yorumlar
0Henüz yorum yapılmamış. İlk yorumu siz yapın!