Gentoo Logo

Panduan Virtual Mailhosting System dengan Postfix

Daftar Isi:

1.  Pendahuluan

Bagi kebanyakan pengguna gentoo, klien e-mail sederhana dan fetchmail sudah cukup. Namun, jika anda menggunakan sistem anda sebagai penampung domain, anda memerlukan MTA (Mail Transfer Agent) lengkap. dan jika anda memiliki banyak domain, maka anda benar-benar memerlukan sesuatu yang lebih handal untuk menangani semua e-mail untuk seluruh pengguna anda. Sistem ini dirancang untuk menjadi solusi elegan untuk masalah tersebut.

Sebuah virtual mail system harus bisa menangani e-mail untuk banyak domain yang memiliki banyak pengguna melalui berbagai antarmuka. Situasi ini akan mendatangkan masalah yang harus kita selesaikan. Sebagai contoh, bagaimana jika anda memiliki dua pengguna pada domain yang berbeda dan ingin menggunakan nama user yang sama? Jika anda menyediakan akses imap dan smtp-auth, bagaimana cara menggabungkan beberapa daemon otentikasi yang berbeda menjadi sebuah sistem? Bagaimana cara menyediakan fasilitas keamanan yang dapat menjamin sistem tersebut? Bagaimana cara mengurusnya?

Panduan ini akan menjelaskan kepada anda cara membuat sistem e-mail yang sanggup menangani e-mail untuk sebanyak-banyaknya domain yang dapat ditangani oleh hardware anda, dengan mendukung virtual mail user yang tidak memerlukan akun shell, memiliki nama user khusus domain, dapat mengotentikasi klien web, imap, smtp, dan pop3 dengan satu database tunggal, memanfaatkan lapisan transport ssl, memiliki antarmuka web, dapat menangani milis untuk domain apa saja yang tersedia di komputer, dan dikendalikan dengan database mysql yang bagus, mudah, dan terpusat.

Terdapat beberapa cara untuk membuat virtual mailhosting system. Dengan banyaknya pilihan yang tersedia, sebaiknya anda mengunjungi http://www.qmail.org/ dan http://www.exim.org/ untuk mengetahui solusi yang tepat bagi kebutuhan anda.

Paket-paket berikut ini akan kita gunakan: apache, courier-imap, courier-authlib postfix, mod_php, phpmyadmin, squirrelmail, cyrus-sasl, mysql, php, dan mailman.

Jangan lupa untuk mengaktifkan beberapa flag USE di /etc/make.conf sebelum melakukan kompilasi: USE="mysql imap libwww maildir sasl ssl". Jika tidak, kemungkinan besar anda harus melakukan kompilasi ulang utuk mendapatkan dukungan yang anda perlukan untuk semua protokol. Selain itu, anda juga sebaiknya menonaktifkan variabel mail dan jaringan lain, seperti ipv6.

Penting: Anda memerlukan nama domain untuk menjalankan public mail server, atau paling tidak sebuah MX record untuk satu domain. Idealnya, anda harus memiliki kendali atas paling sedikit dua domain untuk mendapatkan keutamaan dari fungsionalitas virtual domain baru anda.

Penting: Pastikan agar /etc/conf.d/hostname telah berisi nama host yang benar untuk server mail anda. Anda dapat menerapkan perubahan pada file ini dengan menjalankan /etc/init.d/hostname restart. Periksa nama host anda dengan menjalankan hostname. Periksa juga apakah masih anda konflik pada entri di /etc/hosts.

Catatan: Anda dianjurkan untuk membaca seluruh dokumen ini dan mengakrabkan diri anda dengan semua langkah yang dijelaskan di sini sebelum melakukan instalasi. Jika anda mendapatkan masalah pada langkah apapun, bacalah bagian pemecahan masalah pada akhir panduan. Selain itu, anda mungkin tidak memerlukan semua paket yang dicantumkan di sini. Panduan ini cukup fleksibel. Sebagai contoh, jika anda tidak ingin menggunakan antarmuka web, anda tidak perlu membaca bagian squirrelmail.

2.  Dasar-dasar Postfix

Daftar Kode 2.1: Instalasi postfix

# emerge postfix

Peringatan: Periksa kembali apakah anda tidak memiliki MTA lain seperti ssmtp, exim, atau netqmail. Jika tidak, anda akan mendapatkan masalah BESAR.

Setelah postfix terinstal, saatnya untuk melakukan konfigurasi. Gantilah beberapa opsi berikut di /etc/postfix/main.cf. Jangan lupa untuk mengganti $variables dengan nama domain anda.

Daftar Kode 2.2: /etc/postfix/main.cf

myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10

Selanjutnya, ganti variabel di /etc/postfix/master.cf. Ini akan mengaktifkan output verbose/terinci untuk melakukan debug:

Daftar Kode 2.3: /etc/postfix/master.cf

# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
#
==========================================================================
(Tambahkan "-v" setelah smtpd pada baris berikut)
smtp      inet  n       -       n       -       -       smtpd -v

Sekarang, edit /etc/mail/aliases untuk menambahkan alias lokal. Paling tidak harus ada satu alias untuk root seperti: root: your@email.address.

Daftar Kode 2.4: Menjalankan postfix untuk pertama kali

# /usr/bin/newaliases
(Perintah ini akan menginstal alias baru. Anda hanya perlu
melakukannya ketika anda memperbarui atau menginstal alias.)
		
# /etc/init.d/postfix start

Setelah postfix dijalankan, luncurkan klien e-mail berbasis konsol kesukaan anda dan kirimkan e-mail untuk diri anda sendiri. Penulis menggunakan mutt. Periksa apakah postfix mengantarkan e-mail untuk pengguna lokal. Jika berhasil, kita akan melanjutkan ke tahap berikutnya.

Catatan: Penulis sangat menganjurkan anda untuk memeriksa kembali apakah semua pengaturan dasar postfix telah berfungsi dengan sebelum melanjutkan ke tahap berikutnya.

3.  Courier-imap

Daftar Kode 3.1: Instalasi courier-imap dan courier-authlib

# emerge courier-imap courier-authlib

Daftar Kode 3.2: Konfigurasi ourier-imap

# cd /etc/courier-imap
(Jika anda ingin menggunakan kemampuan ssl dari courier-imap atau
pop3, berarti anda harus membuat sertifikat. Anda dianjurkan untuk melakukan
langkah ini. Jika anda tidak ingin menggunakan ssl, lewatkan saja.)

# nano -w pop3d.cnf
# nano -w imapd.cnf
(Sesuaikan parameter C, ST, L, CN, dan email dengan server anda.)

# mkpop3dcert
# mkimapdcert

Daftar Kode 3.3: Menjalankan servis courier yang diperlukan

# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start

Luncurkan klien e-mail anda dan periksa apakah semua koneksi yang telah anda jalankan tadi sudah bekerja dengan benar untuk penerimaan dan pengiriman e-mail. Tentu saja anda belum bisa login ke layanan apapun karena kita belum mengatur otentikasi, tetapi ada baiknya jika kita memeriksa koneksi terlebih dahulu.

Setelah pengaturan dasar benar, kita akan melakukan banyak langkah sekaligus agar sistem dapat langsung bekerja. Lagi-lagi, pastikan terlebih dahulu bahwa semua paket yang kita instal sudah dapat berfungsi dengan baik.

4.  Cyrus-sasl

Sekarang kita akan menginstal cyrus-sasl. Sasl akan berperan sebagai pengantar variabel otentikasi ke courier-auth, yang akan menyampaikannya ke mysql untuk otentikasi pengguna smtp. Di sini, kita tidak akan dapat memeriksa apakah sasl telah berfungsi dengan benar sebelum kita mengatur mysql dan menambahkan user percobaan. Anda tidak perlu khawatir, karena pada akahirnya kita akan melakukan otentikasi dengan mysql.

Daftar Kode 4.1: Instalasi dan konfigurasi cyrus-sasl

# emerge cyrus-sasl

Selajutnya, edit /etc/sasl2/smtpd.conf.

Daftar Kode 4.2: Menjalankan sasl

# nano -w /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
# nano -w /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"
# /etc/init.d/saslauthd start

5.  Sertifikat SSL untuk Postfix dan Apache

Sekarang kita akan membuat sejumlah sertifikat untuk postfix dan apache.

Daftar Kode 5.1: Pembuatan sertifikat ssl

# cd /etc/ssl/
# nano -w openssl.cnf

Ganti beberapa nilai default berikut untuk domain anda:
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.

(Jika anda tidak menemukan variabel-variabel tersebut, tambahkan saja di tempat yang sesuai.)

# cd misc
# ./CA.pl -newreq-nodes
# ./CA.pl -newca
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newkey.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
(Sekarang kita ulangi langkah tadi untuk apache.)

# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
(Untuk sementara biarkan saja sertifikat ini. Kita akan menginstalnya setelah menginstal Apache.)

6.  Menambahkan dukungan SSL dan SASL untuk Postfix

Sekarang edit konfigurasi postfix agar postfix mengetahui kemampuan barunya akan sasl dan ssl. Tambahkan beberapa parameter berikut di akhir file agar lebih mudah ditemukan.

Daftar Kode 6.1: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =

(Opsi "broken_sasl_auth_clients" dan metode otentikasi login hanya
diperuntukkan bagi outlook dan outlook express, dan tidak didokumentasikan.
Tidakkah baik jika kita meng-hack software M$ yang rusak dan bodoh?
"smtpd_sasl_local_domain" menambahkan nama domain ke klien dengan smtp-auth.
Pastikan agar variabel ini kosong, karena jika tidak, nama user anda akan
dirubah oleh postfix dan anda tidak dapat melakukan otentikasi.)

smtpd_recipient_restrictions =
	permit_sasl_authenticated,
	permit_mynetworks,
	reject_unauth_destination

(Dua opsi berikut ini digunakan untuk mengaktifkan enkripsi keluar.)

smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newkey.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

("smtpd_tls_auth_only" diberi tanda komentar untuk memudahkan proses pengujian.
Anda dapat mengaktifkannya nanti jika anda mau.)

# postfix reload

Sekarang kita akan memeriksa apakah konfigurasi kita telah diterapkan oleh postfix. Untuk ini kita akan menggunakan telnet (yang disediakan oleh net-misc/netkit-telnetd), namun anda juga bisa menggunakan nc (yang disediakan oleh net-analyzer/netcat):

Daftar Kode 6.2: Memeriksa dukungan sasl dan tls

# telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
^]
telnet> quit

Perhatikan apakah baris AUTH dan STARTTLS ditampilkan pada instalasi postfix anda. Seperti yang telah penulis katakan sebelumnya, untuk saat ini AUTH belum dapat digunakan karena sasl akan mencoba melakukan otentikasi dengan sasldb yang belum kita atur, bukan dengan file shadow (karena alasan yang tidak diketahui). Untuk itu, sekarang kita akan mengkonfigurasi mysql yang akan menyimpan informasi otentikasi dan virtual domain kita.

7.  User vmail

Sebelum menyiapkan lingkungan mailhosting virtual, kita perlu membuat akun user yang akan kita gunakan untuk menampung mailbox virtual. Untuk kemudahan, kita akan menggunakan nama vmail untuk user ini.

Daftar Kode 7.1: Membuat akun user vmail

# adduser -d /home/vmail -s /bin/false -m vmail

Sekarang akun user vmail sudah tersedia. Anda boleh membuat banyak akun jika ingin (untuk memelihara struktur pada beberapa kumpulan akun vmail anda). ID user, grup, dan direktori home direferensikan pada table MySQL.

Selanjutnya kita perlu membuat lokasi tempat kita menyimpan mailbox:

Daftar Kode 7.2: Menciptakan mailbox

# mkdir -p /home/vmail/virt-domain.com/foo
# chown -R vmail:vmail /home/vmail/virt-domain.com
# maildirmake /home/vmail/virt-domain.com/foo/.maildir

8.  MySQL

Sekarang kita akan menginstal dan mengkonfigurasi MySQL. Anda memerlukan file genericmailsql.sql untuk menyelesaikan tahap ini.

Daftar Kode 8.1: Instalasi dan konfigurasi MySQL

# emerge mysql

# /usr/bin/mysql_install_db
(Setelah perintah di atas dijalankan, ikuti petunjuk di layar untuk
menetapkan password root mysql, ika tidak, database anda akan terbuka untuk umum.)

# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p mailsql < genericmailsql.sql

# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
	->     ON mailsql.*
	->     TO mailsql@localhost
	->     IDENTIFIED BY '$password';
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
(Periksa apakah user mailsql dapat melakukan koneksi ke server mysql.)

# mysql -u mailsql -p mailsql

Database baru anda sudah memiliki nilai default dan tabel untuk dua domain. Berikut ini adalah dua tabel yang dimilikinya:

  • alias - alias e-mail lokal dan informasi alias mailman
  • relocated - pemetaan alamat e-mail penguna yang telah direlokasikan
  • transport - informasi transport e-mail default untuk semua domain anda
  • users - informasi semua akun pengguna
  • virtual - pemetaan alias e-mail virtual domain

Daftar Kode 8.2: Contoh tabel alias

id   alias    destination
1    root     foo@bar.com
2  postmaster foo@bar.com

Daftar Kode 8.3: Contoh tabel user

(Baris dipotong agar lebih mudah dibaca.)
id email            clear     name     uid     gid     homedir     \
	maildir                                quota  postfix
10 foo@virt-domain.com $password realname virtid  virtid  /home/vmail \
       /home/vmail/virt-domain.com/foo/.maildir/        y
13 foo@bar.com      $password realname localid localid /home/foo   \
	/home/foo/.maildir/                           y

Nilai uid dan gid virtid harus berasal dari user dan grup vmail.

Daftar Kode 8.4: Contoh tabel transport

id   domain           destination
1    bar.com          local:
2    virt-domain.com  virtual:

Daftar Kode 8.5: Contoh tabel virtual

id   email                destination
3   root@virt-domain.com  other@email.address

9.  Apache dan phpMyAdmin

Sekarang kita akan mengatur apache dan menambahkan sebuah antarmuka untuk mempermudah interaksi dengan database.

Daftar Kode 9.1: Instalasi apache dan phpmyadmin

# emerge apache phpmyadmin

Ada banyak panduan yang tersedia tentang cara menambahkan dukungan php untuk apache, seperti link="/proj/en/php/">Proyek PHP Gentoo. Selain itu, beberapa topik di http://forums.gentoo.org membahas cara mengatasi masalah pada proses instalasi. Untuk itu, kita tidak akan membahasnya di sini. Konfigurasikan apache dan php, lalu lanjutkan sisa panduan ini. Satu petunjuk: gunakan .htaccess pada direktori tempat anda menginstal phpmyadmin. Jika anda tidak meletakkannya di sana, halaman index anda akan dapat dijamah oleh laba-laba mesin pencarian internet sehingga semua orang dapat membuka halaman phpmyadmin anda dengan google dan dapat membuat perubahan pada database anda, yang merupakan situasi BURUK! Ada beberapa panduan tentang hal ini, salah satunya adalah: http://www.csoft.net/docs/micro/htaccess.html.en.

Sekarang kita akan menginstal sertifikat Apache yang telah kita buat sebelumnya. Direktif Apache-SSL yang harus anda gunakan adalah:

  • SSLCertificateFile /path/to/certs/new.cert.cert
  • SSLCertificateKeyFile /path/to/certs/new.cert.key

Daftar Kode 9.2: Instalasi sertifikat SSL Apache

# cp /etc/ssl/misc/new.cert.cert /etc/apache2/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache2/ssl/
# cd /etc/apache2/vhosts.d
(Periksa apakah anda sudah memiliki template ssl-vhost. Salin template
yang telah tersedia jika anda menemukannya.)
# cp 00_default_vhost.conf ssl-vhost.conf
# nano -w ssl-vhost.conf

(Ganti beberapa parameter berikut)
NameVirtualHost host.domain.name:443

<VirtualHost host.domain.name:443>
  ServerName host.domain.name
  ServerAdmin your@email.address

  DocumentRoot "/var/www/localhost/htdocs/phpmyadmin";
  <Directory "/var/www/localhost/htdocs/phpmyadmin">
    ...
  </Directory>

  SSLCertificateFile /etc/apache2/ssl/new.cert.cert
  SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
  SSLEngine on
  ...
</VirtualHost>

# nano -w /etc/conf.d/apache2
(Tambahkan -D SSL -D PHP5 di APACHE2_OPTS)

# /etc/init.d/apache2 restart

Selanjutnya, konfigurasikan phpMyAdmin.

Daftar Kode 9.3: Konfigurasi phpMyAdmin

# cd /var/www/localhost/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
# nano -w config.inc.php
(Ganti beberapa parameter berikut.)
$cfg['blowfish_secret'] = 'someverysecretpassphraze';

$cfg['Servers'][$i]['host'] = 'localhost';          // MySQL hostname
$cfg['Servers'][$i]['controluser'] = 'mailsql';     // MySQL control user settings
                                                    // (this user must have read-only
$cfg['Servers'][$i]['controlpass'] = '$password';   // access to the "mysql/user"
                                                    // and "mysql/db" tables)
$cfg['Servers'][$i]['user'] = 'mailsql';            // MySQL user
$cfg['Servers'][$i]['password'] = '$password';      // MySQL password

Sekarang masuklah ke halaman phpmyadmin dan jelajahi tabel yang tersedia. Anda perlu menambahkan alias-alias lokal anda, mengedit tabel user dan menambahkan user percobaan, serta merubah tabel transport untuk menambahkan informasi tentang domain anda. Bilai-nilai default yang disediakan oleh dumpfile sudah cukup untuk memberi petunjuk tentang nilai-nilai yang harus anda isikan di sini. Pastikan juga agar informasi yang anda tambahkan di dalam database sudah akurat. Sebagai contoh, pastikan agar direktori home user lokal sudah tersedia dan nilai uid dan gid sudah benar. Maildir seharusnya akan langsung diciptakan oleh postfix ketika seorang pengguna mendapatkan e-mail pertamanya. Jadi, secara umum, anda sebaiknya mengirimkan e-mail "Selamat Datang" kepada pengguna baru setelah anda mengatur akunnya untuk memastikan agar .maildir diciptakan.

10.  Konfigurasi otentikasi MySQL dan vhost

Sekarang kita akan mengkonfigurasi-ulang otentikasi untuk menggunakan database mailsql di courier-imap dan postfix. Pada semua contoh berikut, gantikan $password dengan password yang anda tetapkan untuk user mailsql.

Daftar Kode 10.1: Pengaturan otentikasi

# nano -w /etc/courier/authlib/authdaemonrc
authmodulelist="authmysql authpam"

# nano -w /etc/courier/authlib/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users

(Pastikan agar baris berikut diberi tanda komentar, karena kita akan
menggunakan teks biasa.)

#MYSQL_CRYPT_PWFIELD    crypt
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

# /etc/init.d/courier-authlib restart
# /etc/init.d/saslauthd restart

Kita hampir selesai, sumpeh! Sekarang, atur beberapa sisa konfigurasi untuk postfix agar dapat berinteraksi dengan database untuk semua kebutuhan transportnya. Jangan lupa untuk menyesuaikan setiap nilai dengan nama user, id, password, alias alamat email, dll.

Daftar Kode 10.2: /etc/postfix/mysql-aliases.cf

# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= alias
select_field 	= destination
where_field  	= alias
hosts        	= unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.3: /etc/postfix/mysql-relocated.cf

# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= relocated
select_field 	= destination
where_field  	= email
hosts        	= unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.4: /etc/postfix/mysql-transport.cf (opsional)

# nano -w /etc/postfix/mysql-transport.cf		
# mysql-transport.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= transport
select_field 	= destination
where_field  	= domain
hosts        	= unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.5: /etc/postfix/mysql-virtual-gid.cf (opsional)

# nano -w /etc/postfix/mysql-virtual-gid.cf
#myql-virtual-gid.cf

user          	= mailsql
password        = $password
dbname        	= mailsql
table           = users
select_field    = gid
where_field     = email
additional_conditions = and postfix = 'y'
hosts         	= unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.6: /etc/postfix/mysql-virtual-maps.cf

# nano -w /etc/postfix/mysql-virtual-maps.cf
# myql-virtual-maps.cf

user        	= mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field   	= email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.7: /etc/postfix/mysql-virtual-uid.cf (opsional)

# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = uid
where_field    	= email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Daftar Kode 10.8: /etc/postfix/mysql-virtual.cf

# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= virtual
select_field 	= destination
where_field  	= email
hosts        	= unix:/var/run/mysqld/mysqld.sock

Terakhir, edit /etc/postfix/main.cf sekali lagi.

Daftar Kode 10.9: /etc/postfix/main.cf

(Pastikan bahwa anda tidak memiliki alias_maps definitions lain)
# nano -w /etc/postfix/main.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf

local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

virtual_transport = virtual
(Domain yang dicantumkan oleh mydestination tidak boleh tercantum di
parameter virtual_mailbox_domains)
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com

virtual_minimum_uid = 1000
(Gantikan $vmail-gid dengan GID grup vmail)
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
(Gantikan $vmail-uid dengan UID user vmail)
virtual_uid_maps = static:$vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =

Demi keamanan, anda harus merubah perizinan beberapa /etc/mail/mysql-*.cf:

Daftar Kode 10.10: Merubah perizinan file

# chmod 640 /etc/postfix/mysql-*.cf
# chgrp postfix /etc/postfix/mysql-*.cf

Sejak Postfix 2.0.x, ada beberapa perubahan besar dari rilis 1.1.x seperti tidak diperlukannya lagi tabel transport, virtual-gid, dan virtual-uid. Tabel-tabel ini masih disediakan jika anda ingin menggunakannya.

Catatan: Anda sebaiknya membaca file VIRTUAL_README yang disediakan pada dokumentasi postfix untuk mendapatkan informasi tambahan.

Daftar Kode 10.11: Memuat ulang tabel postfix

# postfix reload

Jika semuanya berjalan dengan lancar, seharusnya mailhost anda sudah berfungsi. Pengguna anda seharusnya sudah bisa melakukan otentikasi pada database mysql dengan menggunakan alamat e-mail-nya, untuk pop3, imap, dan smtp. Penulis sangat menyarankan anda untuk memeriksa kembali apakah semua sudah berfungsi dengan benar. Jika anda mendapatkan masalah (pada berbagai langkah), bacalah bagian pemecahan masalah.

11.  Squirrelmail

Daftar Kode 11.1: Instalasi squirrelmail

# emerge squirrelmail
(Instal squirrelmail di localhost agar dapat diakses dengan http://localhost/mail)
(Gantikan 1.4.3a-r2 dengan versi yang anda gunakan)

# webapp-config -I -h localhost -d /mail squirrelmail 1.4.3a-r2
# cd /var/www/localhost/htdocs/mail/config
# perl ./conf.pl
(Sesuaikan pengaturan Organization, Server, dan Folder untuk squirrelmail.
Sekarang anda sudah bisa login ke squirrelmail dengan alamat lengkap e-mail anda, dan gunakan webmail baru anda.)

12.  Mailman

Langkah terakhir: mailman. Mailman versi terbaru memiliki dukungan virtual domain yang bagus. Inilah alasan mengapa penulis menggunakannya, selain karena paket ini sangat bagus. Untuk menginstal dan mengkonfigurasinya dengan virtual domain, anda harus melakukan sedikit hacking. Penulis sangat menyarankan anda untuk membaca seluruh dokumentasi mailman, termasuk README.POSTFIX.gz, agar anda mengerti apa yang akan kita lakukan di sini.

Daftar Kode 12.1: Instalasi mailman

# emerge mailman

Daftar Kode 12.2: Pengaturan default: Mailman/Defaults.py

#  nano -w /usr/mailman/Mailman/Defaults.py
(Ganti beberapa nilai berikut ini agar sesuai dengan domain primari
anda, domain virtual akan kita atur nanti.)
DEFAULT_EMAIL_HOST = 'domain.com'
DEFAULT_URL_HOST = 'www.domain.com'

Daftar Kode 12.3: Konfigurasi mailman: mm_cfg.py

# nano -w /var/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']	
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
(Ini diperlukan untuk virtual domain anda agar mailman dapat berfungsi.)

Daftar Kode 12.4: Terakhir

(Setelah selesai, tambahkan milis pertama anda.)

# su mailman
# cd ~
# ./bin/newlist --urlhost='www.virt-domain.com' --emailhost='virt-domain.com' test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification...
(Daftar virtual domain juga dapat ditentukan dengan nama seperti
list@domain.com)
# ./bin/genaliases
(Setelah alias diciptakan, periksa apakah alias ini telah ditambahkan.)

# nano -w data/aliases
# STANZA START: test
# CREATED:
test:             "|/usr/local/mailman/mail/mailman post test"
test-admin:       "|/usr/local/mailman/mail/mailman admin test"
test-bounces:     "|/usr/local/mailman/mail/mailman bounces test"
test-confirm:     "|/usr/local/mailman/mail/mailman confirm test"
test-join:        "|/usr/local/mailman/mail/mailman join test"
test-leave:       "|/usr/local/mailman/mail/mailman leave test"
test-owner:       "|/usr/local/mailman/mail/mailman owner test"
test-request:     "|/usr/local/mailman/mail/mailman request test"
test-subscribe:   "|/usr/local/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe test"
# STANZA END: test

./bin/newlist mailman
# ./bin/genaliases

(Kembali ke user root)
# exit

# /etc/init.d/mailman start
# rc-update add mailman default
(Untuk menjalankan mailman sekarang dan setiap boot.)

Daftar Kode 12.5: Menambahkan dukungan alias mailman di postfix

# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Bacalah README.POSTFIX.gz untuk mendapatkan petunjuk dalam masalah ini.)

alias_maps     =
	hash:/usr/mailman/data/aliases,
	mysql:/etc/postfix/mysql-aliases.cf

virtual_alias_maps =
	hash:/usr/mailman/data/virtual-mailman,
	mysql:/etc/postfix/mysql-virtual.cf
(Ini akan menambahkan dukungan file alias mailman di postfix. Tentu
saja anda dapat menggunakan tabel mysql untuk tujuan ini, tetapi penulis tidak
suka melakukannya sendiri. Selain itu, jika anda tidak menggunakan virtual
domain, menambahkan pemetaan alias virtual di postfix akan mendatangkan masalah,
berhati-hatilah!)

Sekarang seharusnya anda sudah bisa membuat milis baru untuk setiap domain anda. Sebagai catatan akhir, pastikan anda menjalankan semua perintah mailman sebagai user mailman (su mailman), karena jika tidak, perizinan anda akan menjadi tidak beraturan dan anda harus memperbaikinya. Bacalah dokumentasi mailman untuk mendapatkan informasi tentang cara mengatur milis mailman.

13.  Penyaringan isi dan Anti-Virus

Untuk penyaringan isi dan Anti-Virus, bacalah Panduan Gateway Penyaring E-mail.

14.  Penyelesaian Akhir

Ok, anda sudah selesai. Sekarang edit /etc/postfix/master.cf untuk menonaktifkan modus verbose. Anda mungkin juga ingin menambahkan servis-servis yang telah kita konfigurasikan tadi ke runlevel default agar dijalankan ketika boot. Jangan lupa untuk menambahkan semua servis yang anda gunakan - apache, mysql, saslauthd, postfix, courier-imapd, courier-imapd-ssl, courier-pop3d, dan courier-pop3d-ssl, semuanya tergantung pada akses yang anda sediakan. Secara umum, penulis mengaktifkan semua servis di atas.

Daftar Kode 14.1: Penyelesaian akhir

# postfix reload
# rc-update add $service default

Selamat!

15.  Pemecahan Masalah

Pendahuluan

Pemecahan Masalah: Berikut ini adalah panduan singkat tentang cara pemecahan masalah yang mungkin timbul ketika kita melakukan instalasi yang dijelaskan di sini. Panduan ini tidak terlalu rinci, tetapi dirancang untuk menjadi tempat pertama ketika anda mencari cara pemecahan dari masalah yang anda hadapi. Dengan menjalankan instalasi dan konfigurasi yang rumit seperti di atas, kemungkinan besar anda akan mendapatkan masalah pada beberapa komponen. Secara umum, penulis melakukannya dengan beberapa tahapan. Memulai dari dasar sistem sampai ke cabang-cabangnya, dengan memeriksa setiap komponen komponen yang bermasalah ditemukan.

Tahap 1: Pemeriksaan file konfigurasi

Kesalahan ketik sangatlah buruk, terutama ketika kita sedang mengatur sistem berotentikasi. Periksalah setiap file konfigurasi dan database mysql anda. Anda dapat melakukan debug jika ingin, tetapi jika anda tidak memberikan informasi yang tepat kepada sistem e-mail anda, proses debug tidak akan berhasil. Jika anda membuat perubahan pada sebuah file konfigurasi dari satu servis, jangan lupa untuk me-restart servis tersebut agar perubahan anda diterapkan.

Daftar Kode 15.1: Cara me-restart servis

# /etc/init.d/service restart

Tahap 2: Apakah semua servis sudah benar-benar dijalankan?

Jika ternyata belum dijalankan, maka jalankanlah. Proses debug pada sebuah servis akan sangat sulit dilakukan jika ternyata servis tersebut belum dijalankan. Terkadang, sebuah servis kelihatannya sedang berjalan tetapi tidak berfungsi. Pada situasi lainnya, ketika ada file konfigurasi rusak yang digunakan, atau ada transmisi jelek yang datang ke sebuah komponen e-mail, servis tersebut akan terkatung-katung dan tidak mengizinkan suatu port untuk digunakan oleh proses lain. Biasanya anda dapat mendeteksi masalah ini dengan netstat. Atau, jika anda sudah terlalu lama berkutat dengan panduan ini, istirahatlah sebentar sambil me-reboot komputer anda. Cara ini akan menghentikan semua servis yang terkatung-katung tadi. Setelah itu anda boleh kembali melanjutkan.

Daftar Kode 15.2: Pemeriksaan status servis

# /etc/init.d/$service status
# netstat -a | grep $service (or $port)

Tahap 3: Apakah semua servis sudah menggunakan konfigurasi baru?

Jika anda baru saja membuat perubahan pada sebuah file konfigurasi, anda harus me-restart servis yang bersangkutan agar perubahan tersebut diterapkan. Beberapa komponen akan menampilkan konfigurasinya saat ini kepada anda, seperti postfix.

Daftar Kode 15.3: Servis-servis yang dapat menampilkan konfigurasinya

# apache2ctl fullstatus (memerlukan lynx)
# apache2ctl configtest (memeriksa konfigurasi)
# postconf -n (akan memberitahukan anda semua konfigurasi yang digunakan oleh postfix)
# /etc/init.d/$service restart

Tahap 4: Memeriksa log

Ikuti penulis: "Log adalah sahabatku!" Tahap selanjutnya adalah pemeriksaan log. Terkadang anda akan sangat terbantu dengan cara mengulangi proses yang gagal dan kemudian memeriksa log-nya agar semua pesan error dicantumkan pada akhir log (atau di awalnya, tergantung logger anda). Periksa apakah ada informasi di log anda yang dapat membantu pencarian masalah, atau paling tidak, carilah komponen yang bermasalah.

Daftar Kode 15.4: Pemeriksaan log

# kill -USR1 `ps -C metalog -o pid=`(to turn off metalog buffering)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache2/error_log

Anda juga mungkin dapat memanfaatkan parameter debug_peer di main.cf. Dengan menggunakannya, anda bisa mendapatkan ouput log yang lebih terinci daripada output dari modus verbose.

Daftar Kode 15.5: Menambahkan dukungan debug_peer

# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
(Hapus juga tanda komentar dari salah satu perintah debug.)

Tahap 5: Berbicaralah dengan servis

SMTP, IMAP, dan POP3, semuanya merespon sesi telnet, seperti yang telah kita lihat sebelumnya ketika ketika memeriksa konfigurasi postfix. Membuka sesi telnet untuk suatu servis terkadang akan sangat membantu kita untuk melihat apa saja yang sebenarnya sedang terjadi.

Daftar Kode 15.6: Membuka sesi telnet untuk suatu servis

# telnet localhost $port
(Port SMTP adalah 25, IMAP adalah 143, dan POP3 adalah 110. Anda
seharusnya paling tidak mendapatkan kata OK, sehingga anda dapat mengetahui
bahwa servis tersebut sedang berjalan dan siap untuk merespon permintaan.)

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.

Tahap 6: Terkadang hanya senjata besar yang bisa memberikan informasi yang anda perlukan: strace

Seharusnya anda sudah menginstalnya. Utilitas ini adalah utilitas tak ternilai untuk men-debug software. Anda dapat menjalankan sebuah perintah dari baris perintah dengan strace dan memperhatikan semua pemanggilan sistem yang dijalankan. Terkadang strace memberikan banyak sekali informasi, jadi anda harus memperhatikannya secara langsung ketika anda mencoba menjalankan kembali transaksi yang gagal dari sistem e-mail, atau menumpahkan semua informasi tersebut ke sebuah file untuk dibaca nanti.

Daftar Kode 15.7: Menggunakan strace

# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`

Tahap 7: Riset

Setelah anda mendapatkan informasi yang anda perlukan, jika anda sudah dapat mengatasi masalah anda, selamat! Jika belum, anda mungkin harus menggali informasi yang dapat membantu anda dari internet. Berikut ini adalah beberapa website yang mungkin perlu anda kunjungi untuk mengetahui apakah masalah anda sudah diketahui dan pemecahannya sudah tersedia. Terdapat juga beberapa panduan yang bagus tentang cara mengkonfigurasi smtp-auth yang juga berisi cara-cara melakukan debug.



Print

Diperbarui 24 Agustus 2007

Versi asli dari dokumen ini terakhir diupdate 1 Maret 2011

Rangkuman: Dokumen ini menjelaskan cara membuat virtual mailhosting system berbasis postfix, mysql, courier-imap, dan cyrus-sasl.

Ken Nowack
Author

Ezra Gorman
Author

Zack Gilburd
Editor

Scygro
Editor

Dzikri Aziz
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.