Postfix internal routing dilevery  

Postfix:Internal Routing Delivery

Ini adalah versi perbaikan dari thread yang ada dimilist postfix.or.id.
Kesalahan fatal pada penggunaan syntax canonical_maps adalah proses penukaran alamat email yang tidak terkendali, baik pada posisi sender dan recipient.
Untuk mengatasinya maka akan dipakai opsi recipient_canonical_maps, dan sender_canonical_maps dimana alamat yang akan ditukar pada saat receive atau sending dapat diatur.

Internal Routing Delivery, bisa dikatakan _salah satu_ solusi untuk membuat banyak server beda regional dengan 1 domain, dimana beberapa user pada domain tersebut ada dibeberapa server.

Software bantu dan kondisi

* Distro (wajib) Trustix Secure Linux 2.2 Cloud
* Postfix 2.1.5 (default instalasi rpm)
* Tpop3
* Fetchmail

Kondisi yang berlaku disini adalah memakai local user, belum diaplikasikan pada virtual-user.

Bayangkanlah...

Suatu perusahaan berpusat diJakarta, mempunyai 100 karyawan.
Semua aktivitas email (smtp dan pop3) dilakukan diserver jakarta. Dengan domain abc.com
Karyawan dijakarta diantara-nya ani,agnes,ayu,anto,ari,abu dan lain-lain

Karena kondisi bisnis yang bagus, perusahaan ini-pun membuka cabang di berbagai daerah. Anggap Bandung.
Dengan jumlah karyawan 30 orang, diantaranya, budi,badu,beni,beno,bejo.
Koneksi internet hanya memakai dial-up (melask�-tenan).
Karena berada pada 1 induk perusahaan maka format email karyawan diBandung-pun sama yaitu nama@abc.com
misal budi@abc.com,badu@abc.com, bejo@abc.com dan seterusnya.
Maka jumlah email user di server jakarta menjadi 130 user.
Diputuskan aktivitas smtp ikut pada smtp server dial-up isp, sedangkan pop3 tetap ikut pada server jakarta.

Setelah berjalan beberapa saat dirasakan ada satu kelemahan,yaitu :
Pada saat user dicabang ingin mengirim email kepada sesama user cabang 1 wilayah (misal budi@abc.com ke badu@abc.com),
maka harus menunggu hingga modem hidup.
Hal ini terjadi karena pada saat budi melakukan perintah send, MUA akan berusaha mengirimkan-nya ke server jakarta.
Dan badu-pun baru akan bisa mendonlot/menarik email tersebut bila sudah diterima server jakarta.
Dapat dibayangkan proses yang seharusnya bisa cepat menjadi lambat karena harus berputar di internet.
Atau mudah-nya disebut sebagai eksternal routing delivery, karena harus konek dulu ke server jakarta.

Anda sebagai Mailserver administrator diberi tugas untuk menyelesaikan masalah ini.

Solusi

1.

Membangun 1 buah mail server di cabang. Dengan nama bandung.abc.com.
Ini jelas bisa dibangun, tetapi sekarang bila budi ingin mengirimkan email ke badu maka akan ditulis badu@bandung.abc.com.
User komplain karena tidak sepraktis dulu, karena harus menambahkan bandung.
Pihak manajemen-pun tidak ingin penambahan cost untuk membuat kartu nama baru, karena perubahan ini.
Sedangkan bila ditulis badu@abc.com, maka email akan kembali diroutingkan ke internet.
Dan karena mempergunakan sistem dial-up maka domain bandung.abc.com tidak akan dikenali di internet
2.

Membangun 1 buah mail server di cabang. Dengan nama domain sama dengan domain induk abc.com.
Dengan cara begini, pada saat budi akan mengirimkan email ke badu cukup ditulis badu@abc.com.
User dan manajemen senang.
Tapi pada saat akan mengirimkan email ke user jakarta, misal ani@abc.com, permasalahan baru timbul.
Dari sisi server muncul pesan error bahwa user ani tidak ada.
Hal ini wajar karena user ani hanya dikenali diserver jakarta.
3.

Membangun 1 buah mail server di cabang. Dari pengalaman #2 maka dapat dipastikan nama domain harus beda dengan domain pusat.
Maka dipilih kembali bandung.abc.com.
Hanya saja kali ini mulai dimasukkan user domain user locak ke dalam file aliases. Dengan harapan bisa membelokkan delivery email. misal:

root@quad root# echo "badu@abc.com: badu" >> /etc/postfix/aliases
root@quad root# newaliases
postalias: warning: /etc/postfix/aliases, line 209: name must be local

Ups, ternyata aliases menolak jika di-isi dengan full dengan nama domain.

4.

Membangun 1 buah mail server di cabang. Dari pengalaman #2 maka dapat dipastikan nama domain harus beda dengan domain pusat.
Maka dipilih kembali bandung.abc.com.
Dari pengalaman #3 maka diketahui opsi aliases tidak dapat dipergunakan.
Untungnya postfix masih menyediakan opsi lain yang masih dapat dipergunakan. Yaitu canonical.

root@quad root# postconf -d | grep canonical
canonical_maps =
recipient_canonical_maps =
sender_canonical_maps =

root@quad root# man canonical
....
The optional canonical table specifies an address mapping for local and
non-local addresses. The mapping is used by the cleanup(8) daemon. The
address mapping is recursive.
....

Intinya canonical akan manipulasi alamat local dan non-local.
Proses mapping ini akan merubah fisik header dari email yang bersangkutan.

Misal, dibuat mapping badu@abc.com badu@bandung.abc.com
Dapat dibaca, bila ada email dengan tujuan badu@abc.com maka akan dirubah menjadi badu@bandung.abc.com.
Hal ini dapat dibuktikan pada MUA user, misal Lookout Express�, Eudora atau Kmail.
Untuk keperluan kasus perusahaan abc.com maka yang dilakukan adalah, tambahkan opsi berikut pada main.cf

root@quad root# cd /etc/postfix
root@quad postfix# echo "recipient_canonical_maps = hash:/etc/postfix/recipient_canonical" >> main.cf
root@quad postfix# echo "sender_canonical_maps = hash:/etc/postfix/sender_canonical" >> main.cf

recipient_canonical_maps dipergunakan untuk membelok-kan email bila sesama user local berkirim email.
sender_canonical_maps dipergunakan untuk mengembalikan alamat email ke alamat asli pada saat melakukan replay.
Pada /etc/postfix/recipient_canonical di-isikan sebagian/seluruh user local yang ada.

budi@abc.com budi@bandung.abc.com
badu@abc.com badu@bandung.abc.com
beni@abc.com beni@bandung.abc.com
beno@abc.com beno@bandung.abc.com
bejo@abc.com bejo@bandung.abc.com

Pada /etc/postfix/sender_canonical di-isikan.

@bandung.abc.com @abc.com

Lalu ubah menjadi file db dan reload postfix.

root@quad postfix# postmap recipient_canonical
root@quad postfix# postmap sender_canonical

root@quad postfix# postfix reload

root@quad postfix# postconf -n | grep canonical
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
sender_canonical_maps = hash:/etc/postfix/sender_canonical

Sekarang user local bisa saling berkirim email dengan domain tetap abc.com.
Agar user tidak perlu konek ke-dua pop3 (local dan pusat), maka alamat pop3 server-pun sebaiknya dipindah kan server local.
Dan dengan aplikasi fetchmail, secara periodic, akan mendolot email dari server pusat ke server local.

Karena pada sender_canonical_maps akan mengganti seluruh alamat sender, maka ada kemungkinan pada saat sistem akan mengirimkan email ke root/postmaster, email akan terkirim ke root/postmaster domain pusat.
Untuk menghindari hal ini maka set alias untuk postmaster dan/atau root pada file /etc/postfix/aliases.

root@quad postfix# echo "postmaster: root" >> /etc/postfix/aliases
root@quad postfix# echo "root: badu" >> /etc/postfix/aliases
root@quad postfix# newaliases

penutup

Mohon maaf beli judul artikelnya ndak match, masalahnya bingung mau dinamai apa.
Terimakasih untuk thexxxxx.net yang sudah memberikan ide untuk tulisan ini.

Tulisan Adi Sudana

11 komentar: to “ Postfix internal routing dilevery