@WikiNewPageEditViewToolsHelp
Create New Page Create New Page from Copy
Create your new wiki
Edit this page Copy from this page Rename
Attach (Upload) File
Edit Menu
Newest Change History Referer Trackback
Page List Tag Cloud RSS1.0 RSS2.0
Search
@Wiki Guide
FAQ/about @wiki FAQ/about Editting FAQ/about Register
Update Infomation Release Plan

Manajemen Virtual Domain Dan Users dengan Postfix Admin -Pop3d berbasis Courier-IMAP - MySQL

Manajemen Virtual Domain Dan Users dengan Postfix Admin / Pop3d berbasis Courier-IMAP - MySQL

Requirements:

- Postfix 2.0 atau Lebih tinggi.
- Apache 1.3.27 atau lebih Tinggi
- PHP 4.1 atau lebih Tinggi
- MySQL 3.23.55 atau lebih tinggi

Saya Asumsikan anda sudah menginstal Apache, PHP, dan MySQL pada System anda. Untuk Selanjutnya mari kita Instal postfix yg support MySQL, waktu penulisan tutorial ini saya menggnakan postfix experimental release

Instal Postfix
kepet@mx:~# wget -c ftp://ftp.easynet.be/postfix/experimental/postfix-2.0.19-20040312.tar.gz
kepet@mx:~# tar zxf postfix-2.0.19-20040312.tar.gz
kepet@mx:~# cd postfix-2.0.19-20040312

karena kita akan menggunakan pop3 dengan Mysql maka instal postfix agar support MySQL
kepet@mx:~/postfix-2.0.18-20040209# make -f Makefile.init makefiles \
> 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql' \
> 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm'
kepet@mx:~:~/postfix-2.0.18-20040209# make && make install

Langkah selanjutnya adalah mengkonfigurasi user sistem yang akan bertugas mengurusi semua virtual domain di postfix, disini kita misalkan user tersebut adalah virtual :

root@mx:~# $groupadd -g 3333 virtual
root@mx:~# $useradd -g 3333 -u 3333 virtual
root@mx:~# mkdir -p /home/virtual/

Setelah itu rubah kepemilikan dari mailbox :

chown -R 3333:3333 /home/virtual

Edit main.cf

myhostname = mx.kepet.biz
mydomain = kepet.biz
mydestination = $myhostname, localhost.$mydomain
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
dst ...

dan tambahkan juga
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_quota_maps.cf
virtual_mailbox_base = /home/virtual
virtual_transport = virtual
virtual_uid_maps = static:3333
virtual_gid_maps = static:3333

Note : Pada bagian uid dan gid sesuaikan dengan user dan group vmail pada sistem Linux Anda. Pada
saat tulisan ini dibuat uid dan gid virtual adalah 3333 dan 3333. Untuk mendapatkan uid dan gid dari postfik
gunakan perintah berikut.
root@mx:~# id virtual
uid=3333(vmail) gid=3333(virtual) groups=3333(virtual)

Silakan anda ganti myhostname dengan hostname yang FQDN, biasanya adalah host dimana postfix tersebut dijalankan. Pada mydestination silakan anda tambahkan domain yang dianggap sebagai domain lokal bukan domain virtual. Jika anda merencanakan postfix agar bisa digunakan sebagai smtp dari network anda (misalnya network 10.126.10.0/24) maka anda tambahkan pada mynetworks = 10.126.10.0/24 . Dan jika anda ingin menggunakan RBL untuk melawan email spam maka tambahkan :

maps_rbl_domains = relays.ordb.org
smtpd_helo_restrictions = reject_maps_rbl, permit_mynetworks

Untuk menolak pengirim dari domain yang tidak mempunya record A atau MX :
smtpd_sender_restrictions = reject_unknown_sender_domain

Kemudian bikin email alias yang akan mengurusi hal-hal yang berkaitan dengan urusan teknis (ganti email me@kepet.biz sesuai dengan konfigurasi yang anda inginkan) :

root@mx:~# echo "postfix: root" > /etc/aliases
root@mx:~# echo "root : me@kepet.biz" >> /etc/aliases
root@mx:~# echo "mailer-daemon : me@kepet.biz" >> /etc/aliases
root@mx:~# echo "postmaster : me@kepet.biz" >> /etc/aliases

Bikin database dari file aliases :

root@mx:~# newaliases

Berikutnya buat file-file konfigurasi virtual yang dibutuhkan postfix, dan simpan di direktori /
etc/postfix:

mysql_virtual_alias_maps.cf
user = postfix
password = secret
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

mysql_virtual_domains_maps.cf
user = postfix
password = secret
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

mysql_virtual_mailbox_maps.cf
user = postfix
password = secret
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

mysql_virtual_quota_maps.cf
user = postfix
password = secret
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = quota

kita coba jalankan postfix
root@mx:~# postfix start
root@mx:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kepet.biz ESMTP Postfix
helo mx.kepet.biz
250 mx.kepet.biz
ehlo mx.kepet.biz
250-mx.kepet.biz
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.

Instalasi postfix admin
download sourcenya di http://www.high5.net/postfixadmin/
root@mx:~/src# tar zxf postfixadmin-2.0.4.tgz
baca baca dulu DATABASE.TXT, anda pelu mengubah password yg akan mengakses database anda misal user adalah postfix dan passwordnya adalah 'secret', maka pada bagian ini di edit:
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
menjadi :
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('secret'));
dan :
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
Menjadi :
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('secret'));

kemudian save dan simpan
setelah itu kita buat databasenya
root@mx:~/src/postfixadmin-2.0.4# mysql -u root -p < DATABASE.TXT
Enter password:

untuk memastikan kalo databasenya sudah ada kita coba liat databasenya
root@mx:~# /usr/local/mysql/bin/mysql -u postfix -p postfix
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1439 to server version: 3.23.58-kepet-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
+-------------------+
| Tables_in_postfix |
+-------------------+
| admin |
| alias |
| domain |
| domain_admins |
| log |
| mailbox |
| vacation |
+-------------------+
7 rows in set (0.04 sec)

mysql> desc admin;
+----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------------------+-------+
| username | varchar(255) | | PRI | | |
| password | varchar(255) | | | | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| modified | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+----------+--------------+------+-----+---------------------+-------+
5 rows in set (0.04 sec)

mysql> desc alias;
+----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------------------+-------+
| address | varchar(255) | | PRI | | |
| goto | text | | | | |
| domain | varchar(255) | | | | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| modified | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+----------+--------------+------+-----+---------------------+-------+
6 rows in set (0.00 sec)

mysql> desc domain;
+-------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain | varchar(255) | | PRI | | |
| description | varchar(255) | | | | |
| aliases | int(10) | | | -1 | |
| mailboxes | int(10) | | | -1 | |
| maxquota | int(10) | | | -1 | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| modified | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+-------------+--------------+------+-----+---------------------+-------+
8 rows in set (0.00 sec)

mysql> desc domain_admins;
+----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------------------+-------+
| username | varchar(255) | | MUL | | |
| domain | varchar(255) | | | | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+----------+--------------+------+-----+---------------------+-------+
4 rows in set (0.01 sec)

mysql> desc log;
+-----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------------------+-------+
| timestamp | datetime | | MUL | 0000-00-00 00:00:00 | |
| username | varchar(255) | | | | |
| domain | varchar(255) | | | | |
| action | varchar(255) | | | | |
| data | varchar(255) | | | | |
+-----------+--------------+------+-----+---------------------+-------+
5 rows in set (0.00 sec)

mysql> desc mailbox;
+----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------------------+-------+
| username | varchar(255) | | PRI | | |
| password | varchar(255) | | | | |
| name | varchar(255) | | | | |
| maildir | varchar(255) | | | | |
| quota | int(10) | | | -1 | |
| domain | varchar(255) | | | | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| modified | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+----------+--------------+------+-----+---------------------+-------+
9 rows in set (0.01 sec)

mysql> desc vacation;
+---------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------------------+-------+
| email | varchar(255) | | PRI | | |
| subject | varchar(255) | | | | |
| body | text | | | | |
| cache | text | | | | |
| domain | varchar(255) | | | | |
| created | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+---------+--------------+------+-----+---------------------+-------+
7 rows in set (0.06 sec)

mysql> \q
Bye
root@mx:~#

pindahkan direktory postfixadmin-2.0.4 ke home direktori dari apache anda misalkan ada /var/www
root@mx:~/src# mv postfixadmin-2.0.4 /var/www/postfix
pindah ke diretory /var/www/postfix
root@mx:~/src# cd /var/www/postfix
Copy file config.inc.php.sample menjadi config.inc.php
root@mx:~# cd /var/www/postfix
root@mx:~/var/www/postfix# cp config.inc.php.sample config.inc.php

Edit file config.inc.php dan sesuaikan dengan user postfixadmin di MySQL.
// Login information for the database
$db_host = "localhost";
$db_name = "postfix";
$db_user = "postfix";
$db_pass = "secret";
dst ...

dan paramater laen sesuaikan dengan selera anda.

Tentukan user dan group yang menjalankan proses apache :
root@mx:~# egrep '^(User|Group)' /usr/local/apache/conf/httpd.conf
User www
Group www

Dari perintah diatas kita peroleh user www dan group www, kemudian ganti kepemilikan direktori /var/www/postfix menjadi user www dan group www :
root@mx:~# chown -R www:www /var/www/postfix

ubah permisionnya (opsional)

root@mx:~/var/www/html/postfixadmin# chmod 640 *.php *.css
root@mx:~/var/www/html/postfixadmin# chmod 640 admin/*.php
root@mx:~/var/www/html/postfixadmin# chmod 640 users/*.php
root@mx:~/var/www/html/postfixadmin# chmod 640 templates/*.php


Edit file .htaccess di /var/www/postfix/admin, dan sesuaikan dengan keberadaan file .
htpasswd. Anda bisa menggunakan .htpasswd bawaan postfixadmin dengan user admin dan
password juga admin. Sehingga baris pertama dari file .htaccess sebagai berikut.
AuthUserFile /var/www/postfix/admin

Buka Browser Anda, dan isikan pada kotak address dengan
http://host.domain_anda.com/admin
Anda akan diminta mengisikan user name dan password.. Jika Anda menggunakan file passwd
bawaan postfixadmin, user dan passwordnya adalah admin.
Setelah Anda login yang harus Anda lakukan adalah:
- Menambah Virtual Domain dengan New Domain
lihat gambar
- Menambahkan Admin Virtual Domain berupa alamat email dengan New Admin
lihat gambar
- Melihat daftar domain dengan Domain List
lihat gambar
- Melihat daftar admin dengan Admin List
lihat gambar

Berikutnya pada kotak address ganti dengan http://host.domain_anda.com/
Anda akan ditanya username untuk admin virtual domain. Isikan user dengan email dari admin
dan passwordnya.
Setelah Anda login yang harus Anda lakukan adalah:
- Login dengan email admin domain yang sudah dibuat
Lihat gambar
- Menambah account untuk virtual domain dengan Add Mailbox
Lihat gambar
- Menambah alias yang akan diforward ke account di mailbox dengan Add Alias
Lihat gambar
- Melihat data alias dan mailbox dengan Overview
Lihat Gambar
- Setelah itu Anda bisa mengirim pesan dengan memilih Send Email.
Lihat gambar

root@mx:~# tail -f /var/log/maillog
Mar 27 16:34:57 mx postfix/pickup[10948]: 14A7046AD9: uid=1004 from=<www>
Mar 27 16:34:57 mx postfix/cleanup[11044]: 14A7046AD9: message-id=<20040327083457.14A7046AD9@mx.kepet.biz>
Mar 27 16:34:57 mx postfix/qmgr[10620]: 14A7046AD9: from=<www@kepet.biz>, size=319, nrcpt=1 (queue active)
Mar 27 16:34:57 mx postfix/virtual[11046]: 14A7046AD9: to=<me@kepet.biz>, relay=virtual, delay=0, status=sent (delivered to maildir)
Mar 27 16:34:57 mx postfix/qmgr[10620]: 14A7046AD9: removed

Jika proses pengiriman pesan berhasil, lihatlah isi dari direktori /home/vmail. Di dalam
direktori tersebut akan terdapat sebuah direktori yang sama dengan domain virtual yang sudah
ditambahkan. Dan di dalam direktori domain akan terdapat direktori mailbox dari account yang
sudah Anda tambahkan. Untuk itu lihatlah isi direktori “new” dari account yang sudah dikirimi
pesan. Jika benar, maka akan terdapat file yang berisi pesan.
Sampai di sini maka SMTP, MySQL, dan Potfixadmin sudah bekerja dengan baik...

Ada sedikit triks yg saya peroleh dari milis postfix-users@postfix.or.g, dimana default dr create mailbox pada postfix admin tidak akan terbentuk direktori Maildir,
seperti ini misalnya :
root@mx:~# ls /home/virtual/kepet.biz/me
cur/ new/ tmp/
padahal maunya menjadi
root@setda:/var/www/postfix# ls /home/virtual/kepet.biz/me/Maildir/
cur/ new/ tmp/

Nah untuk merubah hal itu anda perlu memodifikasi file create-mailbox.php pada postfixadmin :)

bagian ini dirubah :
{
$maildir = $fDomain . "/" . $fUsername . "/";
}
else
{
$maildir = $fDomain . "/" . $_POST['fUsername'] . "/";
}
}
else
{
$maildir = $fUsername . "/";
}

menjadi :

{
$maildir = $fDomain . "/" . $fUsername . "/Maildir/";
}
else
{
$maildir = $fDomain . "/" . $_POST['fUsername'] . "/Maildir/";
}
}
else
{
$maildir = $fUsername . "/Maildir/";
}

save dan exit
dan cobalah create mailbox baru, cek maildir anda, bagaimana pendapat anda ?? :-)
Note : ingat file create-maildir.php terdapat pada folder posfix dan admin, jadi kedua file itu hrs di ubah

Courier-imap

Courier-imap merupakan service yang menjalankan imap dan pop yang dapat medukung maildir.
Untuk instalasi courier-imap, download file tarbalnya di http://www.inter7.com/courierimap.
Dalam bahasan ini penulis menggunakan courier-imap versi 3.0.2

# tar jxf courier-imap-3.0.2.tar.bz2
# ./configure --disable-root-check \
--without-authdaemon --with-authmysql \
--enable-workarounds-for-imap-client-bugs
# make
#make install
#make install-strip
#make install-configure

masuk ke direktori courier-imap
# cd /usr/src/lib/courier-imap
# mv etc/authmysqlrc etc/authmysql.default
# mv etc/pop3d etc/pop3d.default

dan buat authmysqlrc anda seperti :

MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD secret
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
# MYSQL_CLEAR_PWFIELD clear
DEFAULT_DOMAIN kepet.biz
MYSQL_UID_FIELD 1009
MYSQL_GID_FIELD 108
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/home/vmail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
# MYSQL_DEFAULTDELIVERY defaultdelivery
MYSQL_QUOTA_FIELD quota


Note : Pada bagian MYSQL_GID_FIELD dan MYSQL_UID_FIELD sesuaikan dengan gid dan uid dari
vmail.

dan pop3d :

PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
AUTHMODULES="authmysql"
AUTHMODULES_ORIG="authmysql"
DEBUG_LOGIN=0
POP3AUTH="LOGIN"
POP3AUTH_ORIG="LOGIN"
# POP3AUTH_TLS="LOGIN PLAIN"
#POP3AUTH_TLS_ORIG="LOGIN PLAIN"
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
POP3DSTART=YES
MAILDIRPATH=Maildir

jalankan po3dnya
root@mx:~# /usr/lib/courier-imap/libexec/pop3d.rc start
root@mx:~# netstat -pln |grep LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 2028/couriertcpd

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user me
+OK Password required.
pass passwordku
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
.
quit
+OK Bye-bye.
Connection closed by foreign host.

Sekarang anda sudah mempunyai smtp postfix dan pop3d berbasis courier-imap dengan mailbox mysql

Good Luck

'CCARGS=-DHAS_MYSQL -I/usr/include/mysql' \
'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz –lm ‘