Cara Konfigurasi Postfix dan Dovecot dengan Pengguna Domain Virtual di Linux - Part 2


Pada artikel sebelumnya di seri ini kami telah menjelaskan cara mengatur dan mengelola database server email dengan aman menggunakan phpMyAdmin.

Persyaratan:

  1. Instal Server Email Postfix dan Dovecot dengan MariaDB – Bagian 1

Sekarang saatnya mengkonfigurasi program internal yang akan membuat pengiriman dan penerimaan email menjadi kenyataan: Postfix dan Dovecot (masing-masing untuk menangani email keluar dan masuk).

Mengonfigurasi Server Email Postfix

Sebelum Anda mulai mengonfigurasi Postfix, ada baiknya Anda melihat halaman manualnya di sini, dengan memberikan penekanan khusus pada bagian berjudul “Informasi untuk pengguna baru Postfix“ . Jika ya, Anda akan lebih mudah mengikuti tutorial ini.

Singkatnya, Anda harus tahu bahwa ada dua file konfigurasi untuk Postfix:

  1. /etc/postfix/main.cf (Parameter konfigurasi Postfix, lihat man 5 postconf untuk detail lebih lanjut).
  2. /etc/postfix/master.cf (Konfigurasi daemon master Postfix, lihat man 5 master untuk rincian lebih lanjut).

Di /etc/postfix/main.cf, cari (atau tambahkan, jika perlu) baris berikut dan pastikan baris tersebut cocok dengan nilai yang ditunjukkan di bawah ini:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Tiga pengaturan berikutnya sangat penting. Pada file yang ditandai dengan warna kuning, kita akan mengkonfigurasi akses Postfix ke tabel Domains_tbl, Users_tbl, dan Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Perhatikan bahwa Anda dapat memilih nama file yang berbeda di atas, selama Anda memastikan untuk membuatnya dan memasukkan konten berikut ke dalamnya. Dalam setiap kasus, ganti Kata Sandi Anda dengan kata sandi yang Anda pilih untuk pengguna dba di Bagian 1, atau Anda juga dapat menggunakan MariaDB kredensial root untuk pengguna dan kata sandi di bawah.

Selain itu, pastikan Anda menggunakan nama database server email dan tabel yang sama persis yang dibuat di Bagian 1.

Di /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

Di /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

Di /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Terakhir, jangan lupa untuk mengubah izin file ini menjadi 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

Dan kepemilikan kepada pengguna root dan grup postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

Selanjutnya, untuk mengaktifkan koneksi aman kita perlu memastikan pengaturan berikut tidak dikomentari (atau ditambahkan, jika perlu) di /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Catatan: Indentasi pada baris yang diawali dengan opsi -o sangat penting; jika tidak, pemeriksaan postfix akan menghasilkan kesalahan:

Sebelum Anda menyimpan perubahan, tambahkan baris berikut di bagian bawah file:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Pada titik ini penting untuk memeriksa apakah Postfix memiliki akses ke tabel database dan domain, akun, dan alias yang kita buat di Bagian 1.

Untuk melakukannya, kita akan menggunakan perintah postmap, sebuah utilitas untuk menguji komunikasi dengan tabel yang akan dicari Postfix selama pengoperasian, namun pertama-tama kita harus memulai ulang postfix:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

Pada gambar di bawah kita dapat melihat bahwa untuk record yang ada di database, 1 dikembalikan. Jika tidak, tidak ada yang ditampilkan kembali ke layar. Dalam kasus pemeriksaan alias, perhatikan bahwa akun email sebenarnya yang dipetakan ke alias dikembalikan:

Perhatikan bahwa kami TIDAK mengautentikasi terhadap kredensial yang ditetapkan untuk setiap akun email, kami hanya menguji kemampuan Postfix untuk mendeteksi catatan tersebut dalam database.

Jadi, jika Anda mendapatkan keluaran yang berbeda dari di atas, pastikan Anda menggunakan pasangan pengguna/kata sandi yang valid di mariadb-vdomains.cf, mariadb-vusers.cf, dan mariadb-valias.cf (atau apa pun nama file tersebut).

Mengonfigurasi Dovecot

Sebagai server IMAP/POP3, Dovecot menyediakan cara bagi pengguna melalui Agen Pengguna Email (MUA, atau juga dikenal sebagai klien), seperti Thunderbird atau Outlook, adalah beberapa contoh untuk mengakses email mereka.

Untuk memulai, mari buat pengguna dan grup untuk menangani email (kita memerlukan ini karena akun email kita tidak dikaitkan dengan pengguna sistem). Anda dapat menggunakan UID dan GID lain (selain 5000 seperti yang kami lakukan di bawah) asalkan tidak digunakan dan jumlahnya banyak:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Pengaturan untuk Dovecot dibagi menjadi beberapa file konfigurasi (pastikan baris berikut tidak diberi komentar dan/atau edit agar sesuai dengan pengaturan yang ditunjukkan di bawah).

Di /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

Di /etc/dovecot/conf.d/10-auth.conf (hanya aktifkan autentikasi melalui SQL dan tinggalkan komentar pada metode autentikasi lainnya):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

Di /etc/dovecot/conf.d/auth-sql.conf.ext (perhatikan bahwa kami akan menyimpan email dalam direktori bernama domainanda.com di dalam / home/vmail, yang perlu Anda buat jika tidak ada. Dalam kasus kami, kami melakukan mkdir /home/vmail/linuxnewz.com untuk mengelola email untuk domain tersebut):


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Kotak masuk individual untuk akun pengguna akan dibuat saat email untuk akun tersebut pertama kali diterima.

Di /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

Di /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

Di /etc/dovecot/conf.d/10-ssl.conf (ganti sertifikat dan jalur kunci jika Anda berencana menggunakan sertifikat yang ditandatangani oleh CA):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

Di /etc/dovecot/dovecot-sql.conf.ext masukkan informasi database Anda dan kredensial pengguna administratif yang dibuat di Bagian 1.

Penting: jika kata sandi Anda berisi (#) tanda bintang, Anda harus menyertakan string penghubung seperti yang ditunjukkan dalam contoh di bawah:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Selain itu, Anda dapat mengonfigurasi logging untuk Dovecot agar terpisah dari Postfix di /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Terakhir, pastikan log Dovecot dapat diakses oleh pengguna dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Verifikasi dan Perbaiki Konfigurasi Postifix dan Aktifkan SMTP, POP3, dan IMAP di Firewall

Jika Anda mengalami masalah apa pun saat mengonfigurasi Postfix dan/atau Dovecot, alih-alih mengirimkan semua file konfigurasi untuk meminta bantuan, Anda bisa mendapatkan ringkasan konfigurasi (hanya baris yang tidak diberi komentar) dengan:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

Selain itu, pastikan kotak masuk email hanya dapat dibaca oleh vmail:


chown –R vmail:vmail /home/vmail

File konfigurasi juga harus dapat dibaca oleh pengguna vmail dan dovecot:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Terakhir, pastikan Anda mengaktifkan SMTP, POP3, dan IMAP melalui firewall:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Konfigurasikan Thunderbird sebagai Klien Email untuk Postfix

Setelah mengamankan akses melalui firewall untuk port yang digunakan dalam komunikasi email, sekarang saatnya mengkonfigurasi klien email. Dengan menggunakan [email  dan kata sandinya yang sesuai, bersama dengan mail.linuxnewz.com sebagai server IMAP (atau POP3) dan SMTP, kami siap untuk mulai mengirim dan menerima email ke dan dari akun tersebut:

Anda dapat dengan aman mengabaikan pesan peringatan yang ditampilkan karena Anda menggunakan sertifikat yang tidak ditandatangani oleh CA pihak ketiga yang tepercaya:

Mari buat email percobaan singkat dan klik Kirim:

Saat diminta untuk menerima sertifikat yang ditandatangani sendiri untuk server keluar, konfirmasikan sebelumnya seperti sebelumnya:

Terakhir, masuk ke email tujuan untuk melihat apakah Anda menerima email yang baru saja dikirim. Jika ya, balas pesan tersebut dan lihat apakah email tersebut dikirimkan kembali ke kotak masuk email sumber (jika tidak, lihat log Postfix di /var/log/maillog atau log Dovecot di /var /log/dovecot.log untuk informasi pemecahan masalah):

Anda sekarang memiliki server email Postfix dan Dovecot yang berfungsi dan dapat mulai mengirim dan menerima email.

Ringkasan

Pada artikel ini kami telah menjelaskan cara mengkonfigurasi Postfix dan Dovecot untuk menangani lalu lintas email di server Linux Anda. Jika ada sesuatu yang tidak berfungsi seperti yang ditunjukkan dalam artikel ini, pastikan Anda meluangkan waktu untuk memeriksa dokumentasi Postfix dan Dovecot.

Harap dicatat bahwa meskipun menyiapkan server email Postfix bukanlah tugas yang mudah, ini merupakan pengalaman berharga bagi setiap administrator sistem.

Jika setelah membaca dokumen Anda masih kesulitan dengan Postfix dan/atau Dovecot, silakan kirimkan pesan kepada kami menggunakan formulir komentar di bawah dan kami akan dengan senang hati melakukannya membantu Anda (jangan lupa untuk mengunggah ke layanan penyimpanan online konfigurasi Postfix dan Dovecot seperti yang diambil menggunakan postconf dan doveconf sebagaimana diuraikan dalam artikel ini).