29 November 2004

Postfix mail server

1. Disabling sendmail system/sendmail binary. Disabling via startup script:
# vim /etc/rc.conf
sendmail_enable="NONE"
sendmail_flags="-L sm-mta -bd -q30m"
sendmail_submit_enable="NO"
sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost"
sendmail_outbound_enable="NO"
sendmail_outbound_flags="-L sm-queue -q30m"
sendmail_msp_queue_enable="NO"
sendmail_msp_queue_flags="-L sm-msp-queue -Ac -q30m"
- Disable sendmail binary:
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# chmod 0 /usr/sbin/sendmail.old
# mv /usr/bin/mailq /usr/bin/mailq.old
# chmod 0 /usr/bin/mailq.old
# mv /usr/bin/newaliases /usr/bin/newaliases.old
# chmod 0 /usr/bin/newaliases.old
Catatan: Jika melakukan build world (Update src system), maka wajib melakukan update file2 binary postfix tersebut.

2. Download postfix dari salah satu mirror, atau silahkan gunakan ports system untuk *BSD class.
# links http://www.postfix.org/download.html
# whereis postfix
postfix: /usr/ports/mail/postfix
- Ada beberapa pilihan versi yg hendak anda pakai silahkan sesuaikan dengan kebutuhan anda.
# ls -d /usr/ports/mail/postfix*
/usr/ports/mail/postfix /usr/ports/mail/postfix20
/usr/ports/mail/postfix-current /usr/ports/mail/postfixadmin
/usr/ports/mail/postfix
- Jika akan menginstall postfix -CURRENT version (Version sekarang):
# cd /usr/ports/mail/postfix-current # make ; make install ; make clean 
- Jika versi yg anda inginkan 2X gunakan cara ini:
# cd /usr/ports/mail/postfix20 # make ; make install ; make clean 
- Kalo mendownload secara manual silahkan gunakan cara ini:
# mkdir /usr/local/src
# cd /usr/local/src/
# fetch http://www.mirrorspace.org/postfix/official/postfix-2.1.6.tar.gz
# tar zxvf postfix-2.1.6.tar.gz
# ls README*
# ls INSTALL*
Silahkan baca2 dulu :-). Tapi saya sarankan menggunakan ports untuk memudahkan instalasinya.

3. Installasi postfix & configurasi postfix. Buat username dan group untuk daemon postfix:
# adduser [Untuk interaktif menu] atau,
# man pw(8)
# pw groupadd postdrop
# pw useradd postfix -s /sbin/nologin -g postdrop -d /nonexistent 
Jika berniat untuk membangun mailserver support virtual bisa langsung anda create user/group yg mengurus keperluan itu:
# adduser [Untuk interaktif menu] atau,
# man pw(8)
# pw groupadd virtual
# pw useradd virtual -g virtual -d /home/virtual 
- Edit file /etc/postfix/main.cf jika installasi dilakukan dari tarball, confdir berada di /usr/local/etc/postfix/main.cf jika dilakukan lewat ports.
- Sunting isi dari file2 diatas:
myhostname = example.com
mydestination = $myhostname, localhost.$mydomain
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/ 
Untuk myhostname isi hostname yg FQDN, biasanya nama domain yg digunakan adalah domain yg nge-handle postfix ini berjalan. Isi mydestination dengan domain target anda biasanya domain local saja. Isi IP Address/block IP Address (Penggunaan netmask atau prefix) di mynetworks yg anda perbolehkan konek dari LAN anda dipisahkan dengan tanda coma.

- Untuk menangkal spammer biasanya digunakan:
maps_rbl_domains = relays.ordb.org
smtpd_helo_restrictions = reject_maps_rbl, permit_mynetworks
- Menolak domain sender yang tidak mempunyai record A atau MX:
smtpd_sender_restrictions = reject_unknown_sender_domain
Untuk custom memilih sender yang akan direject sesuai dengan kebutuhan bisa diapply via database hash sebagai contoh:
check_sender_access hash:/etc/postfix/sender_access
- Untuk kebutuhan aliasing bisa menggunakan database hash:
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
- Format/type yg dipilih untuk mbox email adalah:
home_mailbox = Maildir/ 
- Edit untuk keperluan virtual domain:

Untuk keperluan isi type mailbox_transport dengan virtual.
mailbox_transport = virtual 
Untuk virtual domain silahkan anda isi path yg sesuai dengan home basenya. Parameter ini digunakan untuk menyimpan seluruh email2 yg akan dihandle di mesin ini.
virtual_mailbox_base = /home/virtual 
Map database yg digunakan untuk keperluan ini, silahkan isi sesuai dengan rencana anda dimana akan diletakannya.
virtual_mailbox_maps = hash:/etc/postfix/virtual
Isi dengan UID/GID dari user shell virtual, kita check dulu user virtualnya:
# id virtual
uid=1000(virtual) gid=100(virtual) groups=100(virtual)
Isikan UID/GID-nya di main.cf.
virtual_uid_maps = static:1000
virtual_gid_maps = static:100
virtual_create_maildirsize = yes
Biar support quota Maildir untuk user virtual.
virtual_mailbox_limit_maps = hash:/etc/postfix/vquota
virtual_mailbox_limit_override = yes
- Tambahan untuk postfix biar bisa menggunakan/terintegrasi dengan amavis antivirus scanner
content_filter = vscan:
Dan jangan lupa tambahkan baris di /etc/postfix/master.cf:
vscan unix - n n - 10 pipe user=vscan
argv=/usr/sbin/amavis ${sender} ${recipient}
localhost:10025 inet n - n - - smtpd -o content_filter=
Untuk konfigurasi lainnya biarkan default saja.

- Kemudian bikin email alias yang akan mengurusi hal-hal yang berkaitan dengan urusan teknis (ganti email @example.com sesuai dengan konfigurasi yang anda inginkan):
# echo "postfix: root" > /etc/aliases
# echo "root : hostmaster@example.com" >> /etc/aliases
# echo "mailer-daemon : mailer-daemon@example.com" >> /etc/aliases
# echo "postmaster : someone@example.com" >> /etc/aliases
etc...
- Generate database yg baru dari file aliases :
# newaliases 
- Jalankan daemon postfix :
# /usr/sbin/postfix start # Dari tarball instalasi.
# echo "/usr/sbin/postfix start" >> /etc/rc.local
Untuk port biasanya terbentuk file postfix.sh, sunting dulu file ini untuk lebih bagusnya:
# /usr/local/etc/rc.d/postfix.sh start # Dari port instalasi.
- Jika emang tidak ada masalah biasanya postfix daemon langsung jalan, ada baiknya check saja:
# tail -f /var/log/maillog
Nov 20 02:31:49 example postfix/postfix-script: starting the Postfix mail system
Nov 20 02:31:49 example postfix/master[2031]: daemon started -- version 2.1.6
- Bikin virtual domain yg akan anda handle, dan sebelomnya bikin folder example.com di /home/virtual
# mkdir /home/virtual/example.com
# vim /etc/postfix/virtual
example.com Yeah....
Create user atas nama domain example.com:
user@example.com example.com/user/ 
Build file tersebut menjadi hash database:
# postmap /etc/postfix/virtual
- Biar support quota user Maildir. Edit file /etc/postfix/vquota
user@example.com 1024000
# postmap /etc/postfix/vquota 
Biasanya dengan cara dikirim email atas nama user tersebut, maka secara otomatis akan terbentuk folder di /home/virtual/example.com/user.

4. Install tpop3d
- Download source tpop3d dan install tpop3d
# cd /usr/local/src
# fetch http://www.ex-parrot.com/~chris/tpop3d/tpop3d-1.4.2.tar.gz
# fetch http://www.ex-parrot.com/~chris/tpop3d/tpop3d-1.4.2-auth-flatfile-broken.patch
# tar -zxvf tpop3d-1.4.2.tar.gz
# cd tpop3d-1.4.2
# patch -p0 < ../tpop3d-1.4.2-auth-flatfile-broken.patch
# ./configure --help | more
# ./configure --enable-auth-flatfile --enable-mbox-maildir
# make ; make install
Atau menggunakan ports system:
# cd /usr/ports/mail/tpop3d
# make ; make install ; make clean
- Buat file /etc/tpop3d.conf isinya :
listen-address: IP_ADDRESS_HERE
log-facility: local6
mailbox: maildir:/home/virtual/$(domain)/$(local_part)
auth-flatfile-enable: yes
auth-flatfile-passwd-file: /etc/virtual/$(domain)/passwdPOP3
auth-flatfile-mail-user: virtual
auth-flatfile-mail-group: virtual
append-domain: yes
log-bad-passwords: yes
- Jalankan tpop3d daemon:
# /usr/local/sbin/tpop3d
# echo "/usr/local/sbin/tpop3d" >> /etc/rc.local
atau via
*.sh script di /usr/local/etc/rc.d/
- Create file /etc/virtual/example.com/passwdPOP3 untuk menyimpan account POP3:
# mkdir /etc/virtual
# mkdir /etc/virtual/example.com
# cd /etc/virtual/example.com
# htpasswd -c -s passwdPOP3 user
5. Installing Courier-IMAP
- Download source courier-imap & install courier.
# fetch http://www.courier-mta.org/beta/imap/courier-imap-1.7.1.20030319.tar.bz2
# tar -jxvf courier-imap-1.7.1.20030319.tar.bz2
# cd courier-imap-1.7.1.20030319
# ./configure --help | more
# ./configure --enable-workarounds-for-imap-client-bugs --disable-root-check
# make ; make install 
Atau menggunaan ports system:
# /usr/ports/mail/courier-imap
# make ; make install
- Configurasi courier-imap, standard kita pake module authuserdb saja, module yg lainnya kita hapus saja:
# rm -rf /usr/lib/courier-imap/libexec/authlib/*
# cp authlib/authuserdb /usr/lib/courier-imap/libexec/authlib/
# cp /usr/lib/courier-imap/etc/imapd.dist /usr/lib/courier-imap/etc/imapd
# cp /usr/lib/courier-imap/etc/imapd-ssl.dist /usr/lib/courier-imap/etc/imapd-ssl
- Edit file yg diperlukan:
# vim usr/lib/courier-imap/etc/imapd
ADDRESS=0 menjadi ADDRESS=IP_ADDRESS_YG_DIGUNAKAN
AUTHMODULES="authdaemon" menjadi AUTHMODULES="authuserdb"
- Starup script:
# echo "/usr/lib/courier-imap/libexec/imapd.rc start" >> /etc/rc.local
atau, via *.sh kl dari ports system di /usr/local/etc/rc.d/.

- Membuat user account imap:
# mkdir /etc/userdb
# chmod 700 /etc/userdb
# userdb -f /etc/userdb/example.com user@example.com set \
home=/home/virtual/example.com/user \
mail=/home/virtual/example.com/user uid=1000 gid=100
# userdbpw -md5 | userdb -f /etc/userdb/example.com \
user@example.com set imappw
# makeuserdb 
6. Installing Squirrelmail
- Download sourcenya:
# fetch http://umn.dl.sf.net/sourceforge/squirrelmail/squirrelmail-1.2.11.tar.gz
# tar -zxvf squirrelmail-1.2.11.tar.gz
# cd squirrelmail-1.2.11
Atau dengan sistem ports:
# cd /usr/ports/mail/squirrelmail
# make ; make install
- Asalkan sudah terinstall Apache web server dan PHP anda tinggal copy paste saja ke directory browse-nya.

PS: Untuk versi2 yg dibutuhkan silahkan terlebih dahulu baca manual2 yg terkait di directory squirrelmail-1.2.11.

7. Script untuk memudahkan pengerjaan membuat account email, anda bisa custom/modif sesuai dengan kebutuhan anda:
#!/bin/sh
# Adding user and quota email in virtual/vquota files.
domain="example.com"
vquota="10240000"
echo "Masukan login : "
read login
echo "$login@$domain $domain/$login/" >> /etc/postfix/virtual
echo "$login@$domain $vquota" >> /etc/postfix/vquota
# Rebuild database postfix.
/usr/sbin/postmap /etc/postfix/virtual
/usr/sbin/postmap /etc/postfix/vquota
/usr/sbin/postmap /etc/postfix/sender_access
# Adduser dan password untuk imap.
adduserargument="-f /etc/userdb/$domain $login@$domain set
home=/home/virtual/$domain/$login mail=/home/virtual/$domain/$login
uid=1021 gid=1021"
userdb $adduserargument
passwdargument="-f /etc/userdb/$domain $login@$domain set imappw"
userdbpw -md5 | userdb $passwdargument
makeuserdb

Tidak ada komentar: