Postfix: Internal Routing Delivery

By human

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 (melaske-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.

3 Comments

  • At 2008.10.23 21:36, Chris said:

    Mas Human, mas Asfik,

    Terima kasih sebelumnya atas tulisannya, yang mana tulisan ini sama seperti tulisan mas adi, dan sudah saya terapkan dulu tempat saya.

    Ada 1 kendala yang terjadi saat recipent_canonical ini di terapkan, yaitu pada client menggunakan mua utlook Express.

    Misalkan dari email luar budi@yahoo.com kirim ke anto@perusahaan.co.id di recipent_canonical_maps dirubah menjadi anto@bandung.perusahaan.co.id, maka pada saat email di terima di anto, yang masuk bukan alamat email anto@perusahaan.co.id melainkan anto@bandung.perusahaan.co.id.

    Jadi yang tersimpan di address book untuk user anto bukan anto@perusahaan.co.id melainkan anto@bandung.perusahaan.co.id

    Akibatnya saat hendak kirim mail, email yg dikirim ke anto menjadi reject.

    Untuk kasus diatas, apakah ada saran untuk saya.

    terim kasih dn salam,
    Chris

    • At 2008.10.24 16:44, human said:

      Yang di geocities/adilinux, itu site saya juga pak,
      karena ribet cara penulisan html.
      makanya tidak begitu update.

      Mengenai masalah bapak, saya akan coba carikan solusinya pak ( tapi ndak janji :D )

    • At 2009.11.11 14:42, Nibroza said:

      Informasinya jelas dan lengkap, keep up ngasih informasi tentang open source ya!

      (Required)
      (Required, will not be published)