Spamdyke ile Qmail’de 587 Submission Yapılandırması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY18X9u8' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Bir önceki yazımda, qmail sunucularda submission portunun nasıl devreye alınabileceği ve qmail'e bir patch geçerek bu port üzerinde kimlik denetiminin nasıl zorunlu hale getirilebileceğini içeren bir yazı yayınlamıştım. Bu yazıda ise, aynı işin spamdyke ile sunucuya herhangi bir patch geçmeye gerek kalmaksızın nasıl yapılabileceğini paylaşmak istiyorum. |
qmail posta sunucunuzda, submission (MSA – Message Submission Agent) portunu patchlerle uğraşmadan devreye almak istiyorsanız, aşağıdaki yönergeleri izleyerek yapılandırmayı tamamlayabilirsiniz.
GENEL BİLGİLER
Yapılması gerekenler, (bir önceki yazıya benzer şekilde) ikinci bir qmail-smtpd instance'ı oluşturmak ve bu instance üzerinde spamdyke ile kimlik doğrulamasını zorunlu kılmaktan ibaret.
Test için kullandığım qmail sunucusu FreeBSD üzerine çalışıyor ve netqmail-1.06 / vpopmail-5.4.27 kurulu. Ayrıca, SMTP-AUTH/TLS bütünleşik patchi uygulanmış durumda.
NOT: Kullandığım qmail, FreeBSD üzerinde LWQ prosedürüne göre kurulmuştur. Siz qmail'inizi farklı bir yöntemle kurduysanız, qmail script ve binary dosyalarının yerlerinin değişik olması gibi küçük farklar olabilir. |
Genel bilgilerin ardından yapılandırma işlemine başlayabiliriz.
UYGULAMA
İlk olarak, spamdyke kurulumu yapacağız, bu paket FreeBSD port ağacında bulunuyor dolayısı ile kolayca kurabilirsiniz. Ancak FreeBSD kullanmamanız durumunda kaynak koddan derlemeniz gerekir. Her iki yöntemle kuruluma değineceğim.
PORT AĞACINDAN SPAMDYKE KURULUMU
Port ağacınız güncel değilse önce bu update etmenizi öneririm. Bunun için buradaki kaynaktan yararlanabilirsiniz. Spamdyke /usr/ports/mail/spamdyke/ dizininde bulunuyor. Kurulumu şu şekilde yapabilirsiniz:
# cd /usr/ports/mail/spamdyke/ # make install clean
NOT: Qmail'iniz TLS desteği sağlıyorsa, spamdyke'ı TLS desteği ile kurmanız gerekir. Böyle bir durumda make install clean dediğiniz zaman açılacak olan options ekranında TLS Support'u da seçmeniz gerekir. |
Son olarak, spamdyke'nın global konfigırasyon dosyasını oluşturalım. (Şimdilik boş kalacak.)
# touch /etc/spamdyke.conf
Kurulum tamamlandı ise, ikinci qmail-smtp instance'ının oluşturulmasını anlatan bölüme geçebilirsiniz.
KAYNAK KODDAN SPAMDYKE KURULUMU
http://www.spamdyke.org/download.html adresinde, smapdyke'ın son sürümünü (şu an 4.0.10) download edin.
# fetch http://www.spamdyke.org/releases/spamdyke-4.0.10.tgz
Sonra sıkıştırılmış paketin bulunduğu dizine (ben de /usr/local/src) gidip paketi açalım.
# cd /usr/local/src # tar xvf spamdyke-x.y.z.tgz
Default kurulum için şu adımları izleyin. Detaylar için bkz: http://www.spamdyke.org/documentation/INSTALL.txt
# ./configure # make
NOT: Bazı BSD türevi ve Solaris işletim sistemlerinde, configure scripti getopt_long() ile ilgil bir hata verebileceği söyleniyor. Böyle bir durumda libgnugetopt paketini kurup, scripti yeniden çalıştırmanız gerekir (miş.) Ben dökümanın yalancısıyım. |
make işleminin ardından, oluşturulan spamdyke binary dosyasını yerine taşıyoruz.
# cp spamdyke /usr/local/bin
Son olarak spamdyke.conf isimli global konfigurasyon dosyasını oluşturun.
# touch /etc/spamdyke.conf
Kurulum bu kadar, yapılandırma ile ilgili işlere, 587. port için zorunlu kimlik denetiminin anlatıldığı bölümde değineceğim.
Şimdi spamdyke ile birlikte kullanmak üzere ikinci bir qmail-smtpd instance'ı oluşturacağız.
İKİNCİ qmail-smtp INSTANCE'ININ OLUŞTURULMASI
Bu iş hali hazırda çalışmakta olan qmail-smtpd'nin farklı bir isimle kopyalanması ve konfigurasyonunun değiştirilmesinden ibaret.
Önce qmail'i durdurun.
# qmailctl stop
/var/qmail/supervise/qmail-smtpd dizinini aynı dizine qmail-submission ismi ile kopyalayın.
# cd /var/qmail/supervise/ # cp -pr qmail-smtpd qmail-submission
Aynı işi log dizini için de yapıyoruz.
# cd /var/log/qmail/ # cp -pr smtpd submission
oluşturduğumuz supervise/qmail-submission dizinini /service dizinine linliyoruz.
# ln -s /var/qmail/supervise/qmail-submission /service
Şimdi kopya instance üzerinde konfigurasyon değişikliklerini yapacağız. qmail-submission/run betiğini editleyin.
# vi /var/qmail/supervise/qmail-submission/run
Dosya içerisinde şimdilik sadece port numarasını değiştireceğiz. Benim run dosyamın içeriği ve 587. port set edilmiş hali aşağıdaki gibi. (Evet. sadece smtp'yi silip yerine 587 yazın.)
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 8000000
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
-u "$QMAILDUID" -g "$NOFILESGID" 0 587
Aslında, bu dosyayı zorunlu kimlik denetimi için spamdyke konfigurasyonu yaparken tamamen değiştireceğiz. İkinci instance'ın sorunsuz çalıştığını tespit edebilmek için şimdilik run dosyası yukarıdaki gibi olmalı.
Şimdi log/run betiğini editleyelim.
vi /var/qmail/supervise/qmail-submission/log/run
içeriğini aşağıdaki gibi değiştirelim.
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/submission
Instance oluşturmanın son adımı, qmailctl start/stop betiğine qmail-submission instance'ı için gerekli satırları eklemekten ibaret. Ekleme işleri ile uğraşmak istemiyorsanız, betik'in bir kopyasını buradan indirebilirsiniz.
NOT: Betik, standart LWQ qmailctl'sidir. qmail-smtp, qmail-send, qmail-pop3d ve qmail-submission servisleri için editlenmiştir. Sizin betik dosyanız farklılıklar gösteriyorsa, ekleme işlemini aşağıdaki adımları izleyerek manuel olarak yapın. |
qmailctl betiğini editleyelim.
# vi /var/qmail/bin/qmailctl
“start” segmesine aşağıdaki satırları formal olarak ekleyin.
if svok /service/qmail-submission ; then svc -u /service/qmail-submission /service/qmail-submission/log else echo "qmail-submission supervise not running" fi
“stop” segmesine:
echo " qmail-submission" svc -d /service/qmail-submission /service/qmail-submission/log
“stat” segmesine:
svstat /service/qmail-submission svstat /service/qmail-submission/log
“pause” segmesine:
echo "Pausing qmail-submission" svc -p /service/qmail-submission
“cont” segmesine:
echo "Continuing qmail-submission" svc -c /service/qmail-submission
“restart” segmesine:
echo "* Stopping qmail-submission." svc -d /service/qmail-submission /service/qmail-submission/log echo "* Sending qmail-send SIGTERM and restarting." echo "* Restarting qmail-submission." svc -u /service/qmail-submission /service/qmail-submission/log
Artık qmail'i yeniden başlatabilirsiniz.
# qmailctl start
Normal şartlarda qmail qmail-submission instance'ı ile birlikte çalışıyor olmalıdır. Durumu kontrol etmek için aşağıdaki testleri yapabilirsiniz.
Önce netstat ile 587. portun dinlenip dinlenmediğine bakın.
# netstat -an |grep LISTEN
Çıktı şu şekilde olmalıdır:
tcp4 0 0 *.110 *.* LISTEN
tcp4 0 0 *.587 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
Görüldüğü gibi 587. port bind edilmiş durumda.
Ayrıca, qmailctl stat komutunun çıktısında da oluşturduğumuz qmail-submission instance'ının çalışıyor olduğunu görmeniz gerekir.
/service/qmail-send: up (pid 10038) 5262 seconds
/service/qmail-send/log: up (pid 10043) 5261 seconds
/service/qmail-smtpd: up (pid 10046) 5261 seconds
/service/qmail-smtpd/log: up (pid 10051) 5261 seconds
/service/qmail-submission: up (pid 10054) 5261 seconds
/service/qmail-submission/log: up (pid 10058) 5261 seconds
/service/qmail-pop3d: up (pid 10061) 5261 seconds
/service/qmail-pop3d/log: up (pid 10062) 5261 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
Son olarak, telnet ile kontrol edelim.
# telnet localhost 587 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 sub.cagriersen.net ESMTP ehlo 250-sub.cagriersen.net 250-STARTTLS 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN PLAIN CRAM-MD5
Telnet üzerinde ya da herhangi bir e-posta istemcisi ile de mail göndermeyi deneyip, düzgün çalıştığından emin olabilirsiniz.
Submission portu devreye alındığına göre, bu port üzerinde spamdyke'ı konfigure ederek kimlik denetimini zorunlu kılabiliriz.
SPAMDYKE İLE 587. PORT ÜZERİNDE ZORUNLU KİMLİK DOĞRULAMASI
Sistemimizde spamdyke kurulu ve yapılandırma dosyası oluşturulmuş durumda. Şimdi bu yapılandırma dosyasını çok temel bir şekilde düzenleyeceğiz.
spamdyke.conf dosyasını editleyin.
# vi /etc/spamdyke.conf
ve şu satırları ekleyin.
hostname=sunucuismi.alan.adi
smtp-auth-command=/usr/home/vpopmail/bin/vchkpw /usr/bin/true
filter-level=require-auth
access-file=/etc/tcp.smtp
smtp-auth-level=always-encrypted
local-domains-file=/var/qmail/control/rcpthosts
Not: qmail-smtpd'nin TLS desteği varsa, spamdyke'a ayrıca aşağıdaki satırları ekleyebilirsiniz.
tls-level=smtp
tls-certificate-file=/var/qmail/control/sertifikaniz.pem
Not: Biz çok temel bir konfigurasyon yaptık ama spamdyke'ın, farklı amaçlara yönelik daha bir çok özelliği var, isterseniz ek özellikleri de devreye alabilirsiniz. Bu özellikleri incelemek ve devreye almak için http://www.spamdyke.org/documentation/README.html adresine göz atabilirsiniz.
Şimdi, qmail-submission/run dosyasında gerekli değişiklikleri yapalım. betik dosyasını editleyin.
# vi /var/qmail/supervise/qmail-submission/run
Dosyanın içeriğini aşağıdaki gibi değiştirin.
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 11000000
/usr/local/bin/tcpserver -v -H -R -l 0
-c "$MAXSMTPD"
-u "$QMAILDUID" -g "$NOFILESGID" 0 587
/usr/local/bin/spamdyke -f /etc/spamdyke.conf
Gördüğünüz üzere, qmail-smtpd'yi spamdyke üzerinde çağırıyoruz ve /etc/spamdyke.conf dosyasının kullanılmasını söylüyoruz.
Şimdi, spamdyke'ın sunucu yapılandırmanıza göre doğru çalışıp çalışmadığını test etmek için yapılandırma testi yapalım.
Önce qmail'i durdurun.
# qmailctl stop
Aşağıdaki komutu, [komut satırında] çalıştırın.
# /usr/local/bin/spamdyke -f /etc/spamdyke.conf --config-test --config-test-smtpauth-username=[email protected] --config-test-smtpauth-password=parola /var/qmail/bin/qmail-smtpd
Bu komutla spamdyke'a SMTP-AUTH testi de yapmasını söylüyoruz. (Bu nedenle qmail'inizde bulunan geçerli bir kullanıcı ve parola belirtmeniz gerekiyor. )
Komutun çıksıtını inceleyip ERROR olup olmadığını kontrol edin ve önerilen adımları uygulayın. Herhangi bir ERROR almadıysanız devam edebilirsiniz.
qmail'i start edelim.
# qmailctl start
Normal şartlarda artık, sunucunuzun 587. portu üzerinden mail gönderimi için kimlik doğrulaması şart koşulacaktır.
Test etmek için sunucuya telnet ile 587. porttan bağlanıp normal bir mail gönderimi denemesi yapalım.
cagriersen@crom-home:~$ telnet 192.168.12.236 587 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net mail from: [email protected] 250 Refused. Authentication is required to send mail.
Gördüğünüz üzere AUTH olmadan mail gönderimine izin verilmiyor.
Ancak aynı işlemi 25. port'tan yapmak isterseniz AUTH olmaya gerek kalmayacaktır:
cagriersen@crom-home:~$ telnet 192.168.12.236 25 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net mail from: [email protected] 250 ok
Şimdi de, submission port'u üzerinden kimlik doğrulaması ile mail göndermeyi deneyelim.
cagriersen@crom-home:~$ telnet 192.168.12.236 587 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net AUTH LOGIN 334 VXNlcm5hbWU6 Y2FncmlAdGVzdC5jb20= 334 UGFzc3dvcmQ6 aG9jYW0gYnVrYWRhciB1Z3Jhc3RpbiBtaSB5YWh1 235 Proceed. mail from: [email protected] 250 ok rcpt to: [email protected] 250 ok data 354 go ahead Subject: Selamlar Test olayi. . 250 ok 1244065693 qp 1253 quit 221 sub.cagriersen.net
Görüldüğü gibi AUTH olduktan sonra mail gönderilebildi.
Böylece, qmail'e herhangi bir patch geçmeden submission portu üzerinde kimlik doğrulamasını zorunlu kıldık. Artık, 25. port normal olarak çalışmaya devam ederken, kullanıcılarımıza istemci mail gönderim işlemlerinde 587. portu kullandırabilir ve auth olduktan sonra maillerini göndermelerini sağlayabilir ve TTNet'in ADSL kullanıcılarının 25. portunu engelleme uygulamasına hazır hale gelebilirsiniz.
Bu yazılar da ilginizi çekebilir:
- Qmail’de 587 Submission Portunu Devreye Almak
- Rblsmtpd
- qmail smtpd – Disable Reverse DNS Lookups
- Spamdyke – Spam filter for qmail
- Qmail Log Dosyalarının Ebatını Arttırmak
Yorumlar
Trackbacks
Yorumda bulunun.
Üstadım yazı çok güzel. Gerçekten faydalı oldu bana. Ancak bir sıkıntm var. FreeBSD 6.2 kullanıyorum ve gcc versiyonum da,
Thread model: posix
gcc version 3.4.6 [FreeBSD] 20060305
Bu versiyonda ne yazık ki spamdyke’ı yükleyemiyorum. İnterneti karıştırdım. Bir patch vermişler. Onu uygulayıp yüklemeyi denedim yine derleme hatası alıyorum. Sistem benim için kritik. Bu nedenle gcc-4 kurmak biraz korkutuyor beni. Bu sorunu nasıl aşarım? Spamdyke kurmak istiyorum.
Saygılarımla..
[Cevapla]
Selamlar,
Ben 6.2 üzerine sorunsuz kurmustum. GCC’yi update edin bence.
[Cevapla]