Ana Sayfa » Qmail » Spamdyke ile Qmail’de 587 Submission Yapılandırması

Spamdyke ile Qmail’de 587 Submission Yapılandırması


BerbatKötüİdare EderGüzelHarika (Henüz Puan Verilmedi. Oy kullanarak siz de katkı yapabilirsiniz.)
Loading...

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
spamdyke Bir önceki yazımda, sunucularda submission portunun nasıl devreye alınabileceği ve '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.

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.

Visited 474 times, 1 visit(s) today
Kategoriler: Qmail,Security |

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


  1. Bedreddin ŞAHBAZ | (Ağustos 8th, 2009 3:22 pm)

    Ü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]

    Cagri Ersen tarafından yanıtlandı.

    Selamlar,

    Ben 6.2 üzerine sorunsuz kurmustum. GCC’yi update edin bence.

    [Cevapla]

Trackbacks

Yorumda bulunun.