CoreBSD Wiki

Membangun mailserver dengan qpsmtpd

author: Budi Ang

qpsmtpd (qmail perl smtpd?), perl script yang berfungsi sebagai smtp server untuk menggantikan qmail-smtpd dengan dukungan plugin seperti ClamAV, SPF, Greylisting, SpamAssassin, DNS Blacklisting (RBL) dan plugin lainnya. Bawaan dari qmail sendiri tidak mempunyai kemampuan untuk menyaring virus dan spam, dan harus dipatch supaya bisa mendukung fitur tersebut. Sayangnya, patch sana sini sering mengakibatkan banyak hunk, dan error sewaktu kompilasi. Untuk menganalisa dan memecahkan masalah kompilasi error memerlukan waktu dan ketabahan yang sangat.

Alternatif lain yang mempunya kemampuan untuk menyaring virus & spam untuk qmail adalah qscanq dan amavisd-new. qscanq hanya memerlukan QMAILQUEUE patch dan ClamAV, amavisd-new didesain untuk postfix, untuk digunakan pada qmail dapat dilihat pada http://www.imladris.sk/howto/

Dibandingkan dengan amavisd-new, qpsmtpd lebih ringan dalam penggunaan memory dan tidak perlu menggunakan modul perl sebanyak amavisd-new.

Untuk fungsi TLS dapat dilihat pada trunk. Sampai penulisan ini, qpsmtpd-0.31rc2 sudah mendukung TLS.

Lingkungan sistem operasi yang digunakan adalah FreeBSD 5.4.

Software yang meliputi ports dan packages:

Disarankan untuk melihat isi Makefile dari ports terlebih dahulu sebelum melakukan Instalasi melalui ports.

Instalasi Software

Koneksi internet sangat dibutuhkan, karena source dan package didownload dari mirror terdekat.

Snip file /etc/make.conf

# thanks CBN & vlsm.org
MASTER_SITE_BACKUP?=http://ftp.id.freebsd.org/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}
 
MASTER_SITE_APACHE=http://apache.cbn.net.id/%SUBDIR%/
#MASTER_SITE_DEBIAN=http://kambing.vlsm.org/debian/%SUBDIR%/
#MASTER_SITE_DEBIAN_NON_US=http://kebo.vlsm.org/debian-non-US/%SUBDIR%/
#MASTER_SITE_ECLIPSE=http://kambing.vlsm.org/eclipse/eclipse/downloads/drops/%SUBDIR%/
#MASTER_SITE_EXIM=ftp://ftp.cbn.net.id/mirror/exim/%SUBDIR%/
#MASTER_SITE_GCC=http://kambing.vlsm.org/gnu/gcc/%SUBDIR%/
#MASTER_SITE_GNOME=http://kambing.vlsm.org/gnome/%SUBDIR%/
MASTER_SITE_GNU=http://kambing.vlsm.org/gnu/%SUBDIR%/
#MASTER_SITE_KDE=http://kambing.vlsm.org/kde/%SUBDIR%/
MASTER_SITE_MYSQL=http://mysql.cbn.net.id/Downloads/%SUBDIR%/
MASTER_SITE_PERL_CPAN=http://cpan.cbn.net.id/modules/by-module/%SUBDIR%/
#MASTER_SITE_PGSQL=ftp://ftp8.id.postgresql.org/pub/PostgreSQL/%SUBDIR%/
MASTER_SITE_PHP=http://php.cbn.net.id/%SUBDIR%/
MASTER_SITE_QMAIL=http://qmail.cbn.net.id/%SUBDIR%/

qpsmtpd tergantung pada perl & perl modules, untuk menghindari portupgrade -arR yang mengakibatkan p5-* tidak terupgrade, perl yang ada di system di delete dan di install perl terbaru via ports (hi Riv)

# pkg_delete /var/db/pkg/perl_X.Y.Z_R/

Setelah ini, portupgrade akan diinstall (perl akan diInstalasi karena merupakan ketergantungan dari portupgrade)

#cd /usr/ports/sysutils/portupgrade && make install clean
#cd /usr/ports && make fetchindex
#cd /usr/ports/security/sudo && make install clean
$sudo portinstall bash
$sudo portinstall screen

Instalasi qmail

Sebelum Instalasi qmail, pastikan MX record ditujukan pada mail server anda, dalam kasus ini menggunakan domain example.or.id.

$ host –t MX example.or.id
example.or.id mail is handled by 10 mail.example.or.id.

$ hostname
mail.example.or.id

$ sudo portinstall qmail

Sewaktu tampil dialog, untuk QMAILQUEUE_PATCH dan RCDLINK tidak akan digunakan di qpsmtpd. Pilihan lain seperti BIG_CONCURRENCY_PATCH, BIG_TODO_PATCH tidak digunakan oleh qpsmtpd, hanya untuk qmail-smtpd.

Untuk menjadikan qmail sebagai default mailer, dan menambahkan sendmail_enable=“NONE” pada file /etc/rc.conf

$ sudo /var/qmail/scripts/enable-qmail

Tambahkan alias di /var/qmail/alias

$ sudo echo "&bang" /var/qmail/alias/.qmail-mailer-daemon
$ sudo echo "&bang" /var/qmail/alias/.qmail-postmaster
$ sudo echo "&bang" /var/qmail/alias/.qmail-root
$ sudo echo "&bang" /var/qmail/alias/.qmail-clamav

Tambahkan file di /var/qmail/control

$ sudo echo "or.id" > /var/qmail/control/defaultdomain
$ sudo echo "or.id" > /var/qmail/control/plusdomain
$ sudo echo `hostname` > /var/qmail/control/locals
$ sudo echo "example.or.id" >> /var/qmail/control/locals
$ sudo echo `hostname` > /var/qmail/control/me
$ sudo echo "example.or.id" > /var/qmail/control/rcpthosts

Untuk relay, cocokan kembali dengan jaringan anda dan buat file /etc/tcp.smtp

$ cat /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
# jaringan rumah
192.168.0.:allow,RELAYCLIENT=""
$ sudo tcprules /etc/tcp.smtp.cdb /etc/tcp.tmp < /etc/tcp.smtp

Proses install daemontools melalui portinstall ada 2 pilihan, daemontools53 dan daemontools, yang diperlukan adalah daemontools.

$ sudo portinstall daemontools
$ sudo mkdir /var/service

Tambahkan line svscan_enable=“YES” di /etc/rc.conf

$ sudo echo 'svscan_enable="YES"' >> /etc/rc.conf
$ sudo /usr/local/etc/rc.d/svscan.sh start
$ sudo portinstall ucspi-tcp

Services qmail yang akan di supervise adalah qmail-smtpd dan qmail-send menggunakan daemontools dan ucspi-tcp.

Script supervise dapat dibuat sendiri atau di download pada http://www.imladris.sk/howto/scripts/qmail_make_supervise.pl

$ fetch http://www.imladris.sk/howto/scripts/qmail_make_supervise.pl
$ sudo perl qmail_make_supervise.pl

You are now ready to create supervise dirs. First, I kneed to know few things:
Where did You install qmail? (e.g. /var/qmail - default)
<enter>

Where do You want to keep Your log files? (e.g. /var/log/qmail - default)
<enter>

What IP address will Your qmail listen to? (e.g. 192.168.0.1, type 0 (default) for all interfaces)
<enter>

And what port? (e.g. 25 - default)
<enter>

Where is the cdb file for tcpserver? (e.g. /etc/tcp.smtp.cdb)
/etc/tcp.smtp.cdb

What suffix will You use? (e.g. )
/etc/tcp.smtp.cdb <enter>

Assuming no suffix!
OK, so You want me to create files as follows:
Directory: /var/qmail
Log directory: /var/log/qmail
IP address: 0
Port: 25
Control acces file for tcpserver: /etc/tcp.smtp.cdb
Suffix:
y/n?
y <enter>
$ sudo ln -s /var/qmail/supervise/* /var/service
$ sudo svstat /var/service/*
/var/service/qmail-send: up (pid 3594) 3 seconds
/var/service/qmail-smtpd: up (pid 3595) 3 seconds

atau

$ telnet localhost 25
220 mail.example.or.id ESMTP

Percobaan mengirim email

$ /var/qmail/bin/maildirmake $HOME/Maildir/
$ mail -s "testing" [email protected]
blablabla <enter>
.
$ ls $HOME/Maildir/new/
1124787326.2154.mail.example.or.id

$ cat $HOME/Maildir/new/1124787326.2154.mail.example.or.id
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: (qmail 2151 invoked by uid 1001); 23 Aug 2005 08:55:26 -0000
Date: 23 Aug 2005 08:55:26 -0000
Message-ID: <[email protected]>
From: [email protected]
To: [email protected]
Subject: testing

Blablabla

Instalasi VPopMail dengan dukungan MySQL

Penggunaan VPopMail hanya untuk penambahan virtual user dan domain, untuk autentikasi vchkpw dan qmail-pop3d tidak digunakan.

$ cd /usr/ports/mail/vpopmail  && sudo make WITH_CLEAR_PASSWD=yes WITH_MYSQL=yes WITH_QMAIL_EXT=yes DEFAULT_DOMAIN=example.or.id install clean

Jangan lupa tambahkan variable pada file /etc/make.conf, variable yang didefinisikan tetap digunakan sewaktu upgrade.

$ sudo echo ‘#vpopmail’ >> /etc/make.conf
$ sudo echo WITH_CLEAR_PASSWD=yes >> /etc/make.conf
$ sudo echo WITH_MYSQL=yes >> /etc/make.conf
$ sudo echo WITH_QMAIL_EXT=yes >> /etc/make.conf
$ sudo echo DEFAULT_DOMAIN=example.or.id >> /etc/make.conf
$ cd /usr/ports/databases/mysql41-server && sudo make install clean
$ sudo echo ‘mysql_enable="YES"’ >> /etc/rc.conf
$ sudo /usr/local/etc/rc.d/mysql-server.sh start

Untuk setting password root MySQL dapat dilihat pada halaman ini

$ mysqladmin -u root -p
Enter password:
mysql> create database vpopmail;
mysql> GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'gantiPasswordVpopmail';
mysql> GRANT select ON vpopmail.* TO smtpd@localhost IDENTIFIED BY 'gantiPasswordSmtpd';
mysql> flush privileges;

Database vpopmail hanya diakses oleh 2 user, yaitu user vpopmail untuk penambahan user dan domain via CLI ataupun QmailAdmin sedangkan user smtpd untuk autentikasi qpsmtpd (smtp-auth).

$ sudo cat /usr/local/vpopmail/etc/vpopmail.mysql
# untuk read
localhost|0|vpopmail|gantiPasswordVpopmail|vpopmail
# untuk write, tidak harus sama
localhost|0|vpopmail|gantiPasswordVpopmail|vpopmail

Penambahan domain baru akan dilengkapi dengan password postmaster domain itu sendiri

$ sudo /usr/local/vpopmail/bin/vadddomain example.or.id 

Demikian juga untuk penambahan user baru.

$ sudo /usr/local/vpopmail/bin/vadduser buaya 

Catatan:

Untuk VPopMail yang menggunakan cdb dapat dikonversi ke MySQL dengan menggunakan vconvert, jangan lupa recompile VPopMail dengan dukungan MySQL

$ sudo /usr/local/vpopmail/bin/vconvert
$ sudo /usr/local/vpopmail/bin/vconvert –c -m

Instalasi Dovecot dengan dukungan VPopMail

FIXME Untuk Dovecot 1.0alpha3 ada masalah dengan autentikasi dengan VPopMail, yang digunakan pada penulisan ini adalah Dovecot 0.99.14

Dovecot menyediakan services seperti IMAP, IMAPS, POP3 dan POP3S. Jika sebelumnya menggunakan POP3 (vckpw dan qmail-pop3d), anda disarankan untuk terminasi qmail-pop3d yang telah disupervise.

$ sudo rm –f /var/service/qmail-pop3d
$ sudo svc –dx /var/qmail/supervise/qmail-pop3d/log
$ sudo svc –dx /var/qmail/supervise/qmail-pop3d
$ sudo portinstall dovecot
$ cd /usr/local/etc; sudo cp dovecot.conf.sample dovecot.conf

Snip file /usr/local/etc/dovecot.conf

# protocols = imap pop3
# atau
protocols = imap imaps pop3 pop3s

# atau full SSL :)
# protocols = imaps pop3s

# Jika menginginkan SSL
ssl_disable = no

# Jangan lupa membuat [[http://www.cacert.org/ | certificate]] bebas biaya. daftarkan terlebih dahulu.
# [[http://www.cacert.org/help.php | Kumpulan tips CACert]]
# [[http://www.cacert.org/help.php?id=4 | Cara membuat private key & CSR dengan menggunakan OpenSSL]]
ssl_cert_file = /etc/ssl/certs/mail.example.or.id.pem
ssl_key_file = /etc/ssl/private/mail.example.or.id.pem

# uid ini adalah uid vpopmail, dapat dilihat di `id vpopmail` , secara defaults, uid 89 sudah disediakan jika 
Instalasi melalui ports
first_valid_uid = 89

# sangat penting untuk dukungan vpopmail
default_mail_env = maildir:~/Maildir

# faster with FreeBSD >:)
mail_save_crlf = yes

# auth userdb
auth_userdb = vpopmail

# auth passdb
auth_passdb = vpopmail
$ sudo echo 'dovecot_enable="YES"' >> /etc/rc.conf
$ sudo /usr/local/etc/rc.d/dovecot.sh start

Testing POP3 & IMAP

$ telnet localhost 110
Connected to localhost.
Escape character is '^]'.
+OK dovecot ready.
user buaya
+OK
pass <passworDeh>
+OK Logged in.
list
+OK 4 messages:
1 320
2 322
3 326
4 325
.
retr 1
+OK 320 octets
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: (qmail 14798 invoked by uid 0); 23 Aug 2005 10:37:59 -0000
Date: 23 Aug 2005 10:37:59 -0000
Message-ID: <[email protected]>
From: [email protected]
To: [email protected]
Subject: hehe

buaya
.
quit
+OK Logging out.
$ telnet localhost 143
Connected to localhost.
Escape character is '^]'.
* OK dovecot ready.
a login buaya <passworDeh>
a OK Logged in.
a logout
* BYE Logging out
a OK Logout completed.

Catatan:

Jika default domain anda bukan example.or.id, seperti example.com, anda harus autentikasi dengan menggunakan email sebagai user.

$ telnet localhost 143
Connected to localhost.
Escape character is '^]'.
* OK dovecot ready.
a login [email protected] <passworDuh>
a OK Logged in.
a logout
* BYE Logging out
a OK Logout completed.

Instalasi DSPAM dengan dukungan MySQL

DSPAM adalah antispam statistik yang mempunyai kemampuan mendeteksi spam lebih akurat dari SpamAssassin. DSPAM menggunakan LDA (Local Delivery Agent) seperti maildrop, procmail untuk mengirim email ke tujuan. Untuk kasus ini, LDA yang digunakan adalah vdelivermail dari package VPopMail dan configure VPopMail dengan QMAIL_EXT=yes

$ sudo echo ‘# dspam’ >> /etc/make.conf
$ sudo echo DSPAM_OWNER=vpopmail >> /etc/make.conf
$ sudo echo DSPAM_GROUP=vchkpw >> /etc/make.conf
$ sudo portinstall dspam # disable DAEMON, enable VIRT_USERS dan DOMAIN_SCALE
$ cd /usr/local/etc && sudo cp dspam.conf.sample dspam.conf
$ sudo chown vpopmail:vchkpw dspam.conf

Snip file /usr/local/etc/dspam.conf

# LDA menggunakan vdelivermail
TrustedDeliveryAgent "/usr/local/vpopmail/bin/vdelivermail"

# User & Group vpopmail
Trust vpopmail
Trust vchkpw

# Secara default, signature DSPAM akan muncul pada footer setiap email, seperti: !DSPAM:DSPAM_ID!, supaya kelihatan transparant, signature tersebut akan disisipkan pada email header
#Preference "signatureLocation=message"  # 'message' or 'headers
Preference "signatureLocation=headers"
# Diberikan tag [SPAM] pada subject, sehingga filtering di MUA lebih mudah dan menyerupai SpamAssassin
#Preference "spamAction=quarantine"
Preference "spamAction=tag"
Preference "spamSubject=[SPAM]"
MySQLUser  dspam
MySQLPass  gantiPasswordDspam
MySQLDb    dspam

Buatkan database dspam beserta usernya.

$ mysqladmin -u root -p
Enter password:
 
mysql> create database dspam;
mysql> GRANT select,insert,update,delete,create,drop ON dspam.* TO dspam@localhost IDENTIFIED BY 'gantiPasswordDspam';
mysql> flush privileges;

Import database DSPAM

$ mysql –u dspam –p dspam < /usr/local/share/examples/dspam/mysql/mysql_objects-speed.sql
$ mysql –u dspam –p dspam < /usr/local/share/examples/dspam/mysql/virtual_users.sql

Supaya DSPAM dapat menambahkah signature pada email header, file .qmail-default untuk setiap domain harus ditambahkan.

$ sudo cat /usr/local/vpopmail/domains/example.or.id/.qmail-default
| /usr/local/bin/dspam --deliver=innocent,spam --user $EXT@$USER  --stdout | /usr/local/vpopmail/bin/vdelivermail '' bounce-no-mailbox

Dan jika ada spam ataupun ham, buatkan 2 alias

$ sudo cat /usr/local/vpopmail/domains/example.or.id/.qmail-spam-default
| /usr/local/bin/dspam --user $SENDER --class=spam --source=error --stdout

$ sudo cat /usr/local/vpopmail/domains/example.or.id/.qmail-ham-default
| /usr/local/bin/dspam --user $SENDER --class=innocent --source=error --stdout

Untuk proses training spam ataupun ham, jika user mendapatkan spam, user tersebut melakukan `forward` spam per email ke spam-{user}@domain, dalam kasus ini sang buaya mendapatkan spam, user tersebut memforward email ke [email protected], DSPAM akan segera mempelajari email tersebut, sehingga jika ada spam, DSPAM akan lebih mudah mengidentifikasi email tersebut, jika ada false positive, tinggal diforward ke [email protected]

Data yang tidak berguna dan lama pada database spam akan dibersihkan dengan menambahkan entry pada file /etc/crontab.

Snip file /etc/crontab

0 0 * * * root /usr/local/bin/mysql –u dspam –pgantiPasswordDspam dspam < /usr/local/share/examples/dspam/mysql/purge-4.1.mysql

Hasil output dspam_stats

$ sudo dspam_stats -H [email protected]
[email protected]:
                TS Total Spam:                128
                TI Total Innocent:           1128
                SM Spam Misclassified:         44
                IM Innocent Misclassified:      0
                SC Spam Corpusfed:              3
                IC Innocent Corpusfed:          0
                TL Training Left:            1372
                SR Spam Catch Rate:        74.42%
                IR Innocent Catch Rate:   100.00%
                OR Overall Rate/Accuracy:  96.62%

Instalasi Apache + mod_ssl

Untuk konfigurasi Apache & PHP, dapat dilihat pada halaman ini

$ cd /usr/ports/www/apache13-modssl && sudo make install clean

Instalasi QmailAdmin

$ cd /usr/ports/mail/qmailadmin && sudo make CGIBINDIR=www/cgi-bin WEBDATADIR=www/data install clean

Tambahkan pada file /etc/make.conf

$ sudo echo “# qmailadmin” >> /etc/make.conf
$ sudo echo “CGIBINDIR=www/cgi-bin” >> /etc/make.conf
$ sudo echo “WEBDATADIR=www/data/” >> /etc/make.conf

Instalasi SquirrelMail

$ sudo portinstall squirrelmail
$ cd /usr/local/www/squirrelmail && sudo ./configure

Snip file /usr/local/www/squirrelmail/config/config.php

$domain               = 'example.or.id';
$imapServerAddress    = 'localhost';
$imapPort             = 143;
$useSendmail          = false;
$smtpServerAddress    = 'localhost';
$smtpPort             = 25;
$imap_server_type     = 'courier';
$allow_thread_sort    = true;
$allow_server_sort    = true;

Snip file /usr/local/etc/apache/httpd.conf

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /usr/local/www/squirrelmail
    ServerName mail.example.or.id
    Alias /qmailadmin/ "/usr/local/www/data/qmailadmin/"

# force ke SSL mode
    <Location />
        SSLRequireSSL
    </Location>

    <Location /cgi-bin/qmailadmin>
        SSLRequireSSL
    </Location>

    ErrorLog /var/log/httpd-mail.example.or.id-error.log
    TransferLog /var/log/httpd-mail.example.or.id-access.log
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/usr/local/www/squirrelmail"
    ServerName mail.example.or.id
    Alias /qmailadmin/ "/usr/local/www/data/qmailadmin/"
    ErrorLog /var/log/httpd-mail.example.or.id-error.log
    TransferLog /var/log/httpd-mail.example.or.id-access.log
    SSLEngine on

# Key yang digunakan dapat dicopy dari Dovecot
    SSLCertificateFile /usr/local/etc/apache/ssl.crt/mail.example.or.id.crt
    SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/mail.example.or.id.key
</VirtualHost>

php.ini dapat dicopy dari /usr/local/etc/php.ini-dist atau /usr/local/etc/php.ini-recommended

Snip file /usr/local/etc/php.ini

expose_php = Off
zlib.output_compression = On
display_errors = Off
$ sudo echo 'apache_enable="YES"' >> /etc/rc.conf
$ sudo echo 'apache_flags="-DSSL"' >> /etc/rc.conf
$ sudo /usr/local/etc/rc.d/apache.sh start

Webmail dapat diakses di https://mail.example.or.id/ dan QmailAdmin dapat diakses melalui https://mail.example.or.id/cgi-bin/qmailadmin/qmailadmin

Instalasi eAccelerator

eAccelerator dapat meningkatkan performance penggunakan script PHP.

$ sudo portinstall eaccelerator
$ mkdir /tmp/eaccelerator
$ sudo chown www:www /tmp/eaccelerator
$ sudo chmod 0700 /tmp/eaccelerator

Tambahkan extension=eaccelerator.so di /usr/local/etc/php/extensions.ini setelah extension=session.so

Snip file /usr/local/etc/php/extensions.ini

extension=session.so
extension=eaccelerator.so

Restart apache

$ sudo apachectl restart

Instalasi qpsmtpd

$ fetch http://smtpd.develooper.com/files/qpsmtpd-0.30.tar.gz
$ sudo pw group add -n smtpd
$ sudo pw user add -n smtpd -g smtpd -d /home/smtpd/qpsmtpd -s /sbin/nologin -m
$ cd /home/smtpd && sudo tar -xzvf /home/bang/qpsmtpd-0.30.tar.gz
$ sudo chown -R root:wheel qpsmtpd-0.30
$ sudo mv qpsmtpd-0.30 qpsmtpd
$ sudo mkdir ~smtpd/tmp
$ sudo chown smtpd:smtpd ~smtpd/tmp
$ sudo chmod 700 ~smtpd/tmp     
$ cd qpsmtpd && sudo mv config.sample config

Catatan:

Untuk mengetahui fungsi dari plugin-plugin, dapat dilihat di ~smtpd/plugins/* dengan perldoc.

$ perldoc ~smtpd/plugins/auth/auth_vpopmail_sql

Snip file ~smtpd/config/plugins

# Menampilkan fortune setelah sesi smtp berakhir
#quit_fortune

# Baca ‘Instalasi DBD-mysql’
auth/auth_vpopmail_sql

# Plugin ini berguna untuk menolak remote host yang mulai mengirimkan email sebelum banner smtp muncul
check_earlytalker

count_unrecognized_commands 4
check_relay

#require_resolvable_fromhost 0

#rhsbl
#dnsbl
check_badmailfrom
check_badrcptto
#check_spamhelo

# Baca ‘Instalasi Mail::SPF::Query’
sender_permitted_from

rcpt_ok

virus/klez_filter

#spamassassin

# Baca ‘Instalasi ClamAV’
# jika ketemu virus, tolak dan batas lampiran kurang lebih 2 MB
virus/clamav clamscan_path=/usr/local/bin/clamdscan action=reject max_size=2097152 tmp_dir=/home/smtpd/qpsmtpd/tmp

queue/qmail-queue

# Baca ‘Instalasi Mail::Domainkeys’
domainkeys

Snip file ~smtpd/config/relayclients

#host/network yang boleh relay.
127.0.0.1
192.168.0.
202.so.me.ip

clamdscan akan scanning file yang di ~smtpd/tmp

$ sudo echo "/home/smtpd/qpsmtpd/tmp" ~smtpd/config/spool_dir

Untuk mendeteksi virus yang ukurannya dibawah <10k seperti virus eicar

$ sudo echo '1' > ~smtpd/config/memory_threshold
$ sudo rm –f /var/service/qmail-smtpd
$ sudo svc -dx /var/qmail/supervise/qmail-smtpd/log
$ sudo svc –dx /var/qmail/supervise/qmail-smtpd

$ sockstat -l4 | grep smtp

$ sudo ln -s /home/smtpd/qpsmtpd /var/service
$ sudo svstat /var/service/qpsmtpd
/var/service/qpsmtpd: up (pid 96655) 6 seconds

Instalasi ClamAV

Seperti qmail-smtpd dan qmail-send, ClamAV disupervise untuk menhindari crash di kemudian hari, dengan script buatan sendiri atau http://www.qscanq.org/service-clamd.tar.gz

$ sudo portinstall clamav

Ekstrak file service-clamd.tar.gz di /usr/local/etc

$ cd /usr/local/etc/ && sudo tar -zxvf /home/bang/service-clamd.tar.gz

Snip file /usr/local/etc/clamd/run

CLAMD_FILE=./home/smtpd/clamd
exec setuidgid smtpd /usr/local/sbin/clamd

Snip file /usr/local/etc/clamd/log/run

#!/bin/sh
exec /usr/local/bin/setuidgid smtpd /usr/local/bin/multilog t s1000000 n20 ./main
$ sudo chown smtpd:smtpd /usr/local/etc/clamd/log/main

Snip file /usr/local/etc/clamd.conf

LogFile /dev/stdout
LocalSocket /home/smtpd/clamd
FixStaleSocket
User smtpd
Foreground
# PidFile di comment
# MaxThreads sebaiknya disesuaikan dengan total concurrent connection dari qpsmtpd
MaxThreads 10

Snip file /usr/local/etc/freshclam.conf

# jika ada DNSDatabaseInfo.clamav.net, anda boleh mengupdate freshclam setiap 15 menit, jika tidak, gunakan 1 jam sekali.
DNSDatabaseInfo current.cvd.clamav.net

# thanks to CBN & TELKOM
DatabaseMirror db.id.clamav.net
DatabaseMirror database.clamav.net

# 15 menit
Checks 96

# 1 jam
#Checks 24
$ sudo ln -s /usr/local/etc/clamd /var/service
$ sudo svstat /var/service/clamd
/var/service/clamd: up (pid 89901) 5 seconds
$ sudo echo 'clamav_freshclam_enable="YES"' >> /etc/rc.conf

Untuk mengupdate definition terbaru

$ sudo freshclam -l /var/log/clamav/freshclam.log

Periksa kembali log freshclam untuk memastikan definitions telah terupdate

$ sudo tail -f /var/log/clamav/freshclam.log
ClamAV update process started at Tue Aug 23 20:20:29 2005
main.cvd is up to date (version: 33, sigs: 36102, f-level: 5, builder: tkojm)
daily.cvd updated (version: 1035, sigs: 3288, f-level: 5, builder: arnaud)
Database updated (39390 signatures) from db.id.clamav.net (IP: 202.158.56.242)

Download dan test Virus Eicar

$ fetch http://www.eicar.org/download/eicar.com
$ mv eicar.com /tmp
$ sudo clamdscan /tmp
/tmp/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------

Infected files: 1
Time: 0.523 sec (0 m 0 s)

file eicar.com boleh di delete

Instalasi DBD-mysql

Modul perl ini diperlukan untuk autentikasi SMTP terhadap VPopMail, dengan menentukan SMTP host pada MUA, seperti Microsoft Outlook, Mozilla Thunderbird dan lainnya. Password SMTP sama dengan dengan password POP3 ataupun IMAP. Method autentikasi PLAIN dan CRAM-MD5 (jika VPopMail dicompile dengan dukungan WITH_CLEAR_PASSWD)

$ sudo portinstall p5-DBD-mysql41

Snip file ~smtpd/plugins/auth/auth_vpopmail_sql

my $connect  = "dbi:mysql:dbname=vpopmail";
my $dbuser   = "smtpd";
my $dbpasswd = "gantiPasswordSmtpd";

SMTP Server: mail.example.or.id

SSL: No

Authentication: Yes

User: [email protected]

Pass: passworDeh

Instalasi Mail::SPF::Query

SPF dirancang untuk mencegah pemalsuan email dan dipublish melalui DNS records, seperti [email protected] hanya bisa mengirim dari mail.example.or.id (IP 10.10.10.1).

Untuk konfigurasi BIND & djbdns ada di bawah ini

BIND:

example.or.id. IN TXT "v=spf1 ip4:10.10.10.1/32 -all"

djbdns:

'example.or.id:v=spf1 ip4\07210.10.10.1/32 -all:3600

Bagi smtp server yang sudah SPF-enable, akan menolak email dari [email protected] (IP 172.16.10.10) karena adanya pemalsuan dari sumber pengiriman email, biasanya berisi virus dan spam.

Sangat disarankan untuk korporat & ISP yang sangat memperdulikan keaslian email.

$ sudo portinstall p5-Mail-SPF-Query

Instalasi Mail::DomainKeys

DomainKeys adalah antispam standard yang didesain oleh Yahoo!, untuk mencegah pemalsuan email pada level SMTP.

Plugin DomainKeys untuk qpsmtpd hanya untuk verifikasi email yang mempunyai signature, seperti good (baik) dan bad (buruk).

$ sudo portinstall p5-Mail-DomainKeys
$ fetch http://killa.net/infosec/domainkeys/domainkeys-0.90.tar.gz
$ tar -xzvf domainkeys-0.90.tar.gz
$ sudo cp domainkeys-0.90/domainkeys /home/smtpd/qpsmtpd/plugins
$ sudo echo "domainkeys" >> /home/smtpd/qpsmtpd/config/plugins
$ sudo svc –t /var/service/qpsmtpd

Aktifkan pf

Jika semuanya telah diinstall dan dicoba dengan baik, saatnya untuk mengaktifkan firewall

Snip file /etc/pf.conf

mail_if = "sis0"
local_if = "lo0"
scrub on $mail_if all reassemble tcp random-id

block log all

antispoof for $local_if

antispoof for $mail_if

pass quick on $local_if all

pass in quick on $mail_if inet proto tcp to port ssh flags S/SA keep state
pass in quick on $mail_if inet proto tcp to port smtp flags S/SA keep state

pass in quick on $mail_if inet proto tcp to port http flags S/SA keep state
pass in quick on $mail_if inet proto tcp to port https flags S/SA keep state

# jika ingin clear text service, uncomment 2 baris di bawah ini
#pass in quick on $mail_if inet proto tcp to port pop3 flags S/SA keep state
#pass in quick on $mail_if inet proto tcp to port imap flags S/SA keep state

pass in quick on $mail_if inet proto tcp to port imaps flags S/SA keep state
pass in quick on $mail_if inet proto tcp to port pop3s flags S/SA keep state

# Kebijakan outgoing tergantung pada selera, paranoid atau relax
pass out quick on $mail_if inet proto tcp all modulate state
pass out quick on $mail_if inet proto udp all keep state
pass out quick on $mail_if inet proto icmp all keep state
$ sudo echo ‘pf_enable=”YES”’ >> /etc/rc.conf
$ sudo echo ‘pflog_enable=”YES”’ >> /etc/rc.conf
$ sudo /etc/rc.d/pf start
$ sudo /etc/rc.d/pflog start

Anda diharuskan untuk memeriksa kembali dengan menjalankan nmap di remote host untuk memastikan rules yang digunakan.

Tuning FreeBSD

Untuk tuning, anda bisa melihat pada halaman ini

FreeBSD Kernel Tuning
FreeBSD Performance Tuning

Referensi

coreartikel/membangun.mailserver.dengan.qpsmtpd.txt · Last modified: by 127.0.0.1