GNU/Linux >> Belajar Linux >  >> Cent OS

Bagian 3:PostfixAdmin – Membuat Kotak Surat Virtual di Server Surat CentOS 8/RHEL 8

Pada artikel sebelumnya, kami membahas cara mengatur server email Anda sendiri di CentOS 8/RHEL 8 dari awal. Di bagian 1 dan bagian 2 dari seri tutorial ini, kami mempelajari cara menyiapkan server SMTP Postfix dan Server IMAP Dovecot , tetapi sejauh ini kami hanya dapat memiliki alamat email untuk pengguna dengan akun Unix lokal. Tutorial ini akan menunjukkan cara membuat kotak surat virtual di server surat CentOS 8/RHEL 8 dengan PostfixAdmin , yang merupakan antarmuka berbasis web sumber terbuka untuk mengkonfigurasi dan mengelola server email berbasis Postfix untuk banyak domain dan pengguna.

Dengan kotak surat virtual , kita tidak perlu membuat akun Unix lokal untuk setiap alamat email. Jika Anda akan menyiapkan server surat untuk perusahaan atau organisasi, selalu lebih baik untuk memiliki cara mudah untuk membuat kotak surat virtual di antarmuka berbasis web, yang juga memungkinkan pengguna untuk mengubah kata sandi mereka. Di situlah PostfixAdmin masuk.

Fitur PostfixAdmin

  • mengelola kotak surat, domain virtual, dan alias
  • pesan liburan/keluar kantor (Secara pribadi menurut saya fitur ini lebih baik dilakukan di Roundcube Webmail.)
  • domain alias (meneruskan satu domain ke domain lain dengan validasi penerima)
  • pengguna dapat mengelola kotak surat mereka sendiri (mengubah alias, sandi, dan pesan liburan)
  • dukungan kuota untuk kotak surat tunggal dan kuota total domain
  • integrasi fetchmail:Anda dapat mengambil email dari alamat email asli Anda ke alamat email baru Anda.
  • klien baris perintah postfixadmin-cli bagi mereka yang tidak ingin mengeklik antarmuka web

Catatan :Setelah Anda menyelesaikan bagian 3, Anda tidak dapat lagi menggunakan akun Unix lokal sebagai alamat email. Anda harus membuat alamat email dari antarmuka web PostfixAdmin.

Prasyarat

Saya berasumsi bahwa Anda telah mengikuti bagian 1 dan bagian 2 dari seri tutorial ini. Jika Anda mengikuti tutorial server email di situs web lain, saya sarankan untuk menghapus konfigurasi Anda dan memulai kembali dengan seri tutorial saya, jadi Anda tidak akan bingung dengan proses penyiapan yang berbeda.

Setelah persyaratan di atas terpenuhi, mari instal dan konfigurasikan PostfixAdmin.

Langkah 1:Instal Server Database MariaDB di CentOS 8/RHEL 8

PostfixAdmin ditulis dalam PHP dan membutuhkan database (MySQL/MariaDB, PostgreSQL atau SQLite). Artikel ini akan menggunakan MariaDB, yang merupakan pengganti drop-in untuk MySQL. Ini dikembangkan oleh mantan anggota tim MySQL yang khawatir bahwa Oracle mungkin mengubah MySQL menjadi produk sumber tertutup. Masukkan perintah berikut untuk menginstal MariaDB di CentOS 8/RHEL 8.

sudo dnf install mariadb-server mariadb -y

Setelah terinstal, kita harus memulainya.

sudo systemctl start mariadb

Aktifkan mulai otomatis pada waktu boot sistem.

sudo systemctl enable mariadb

Periksa status:

systemctl status mariadb

keluaran:

● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 18608 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 5092)
   Memory: 77.0M
   CGroup: /system.slice/mariadb.service
           └─18608 /usr/libexec/mysqld --basedir=/usr

Diaktifkan ” menunjukkan bahwa mulai otomatis saat boot diaktifkan dan kita dapat melihat bahwa server MariaDB sedang berjalan. Sekarang kita perlu menjalankan skrip keamanan.

sudo mysql_secure_installation

Saat diminta untuk memasukkan kata sandi root MariaDB, tekan tombol Enter karena kata sandi root belum disetel. Kemudian masukkan y untuk mengatur kata sandi root untuk server MariaDB.

Selanjutnya, Anda dapat menekan Enter untuk menjawab semua pertanyaan yang tersisa, yang akan menghapus pengguna anonim, menonaktifkan login root jarak jauh, dan menghapus database pengujian. Langkah ini merupakan persyaratan dasar untuk keamanan database MariaDB. (Perhatikan bahwa huruf Y dikapitalisasi, yang berarti itu adalah jawaban default.)

Langkah 2:Unduh PostfixAdmin di Server CentOS 8/RHEL 8

Masuk ke server email Anda, lalu unduh file instalasi PostfixAdmin ke server Anda. Buka halaman Gitbub PostfixAdmin untuk mengunduh versi terbaru. Anda dapat menggunakan wget alat untuk mengunduhnya dari baris perintah. Tautan unduhan selalu tersedia dalam format di bawah ini. Jika versi baru keluar, cukup ganti 3.3.8 dengan nomor versi baru.

sudo dnf install wget

wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz

Setelah diunduh, ekstrak arsipnya.

Jika Anda menggunakan Apache, ekstrak ke /var/www/ direktori dan ganti namanya menjadi postfixadmin .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/
sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin

Jika Anda menggunakan Nginx, ekstrak ke /usr/share/nginx/ direktori dan ganti namanya menjadi postfixadmin .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/
sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin

Langkah 3:Menyiapkan Izin

PostfixAdmin membutuhkan templates_c direktori, dan server web memerlukan akses baca dan tulis ke direktori ini. Kita juga perlu mengubah konteks SELinux agar dapat ditulis. Jadi jalankan perintah berikut.

Apache

sudo mkdir /var/www/postfixadmin/templates_c
sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R

Nginx

sudo mkdir /usr/share/nginx/postfixadmin/templates_c
sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R

Secara default, SELinux melarang Apache/Nginx untuk membuat permintaan jaringan ke server lain, tetapi kemudian Apache/Nginx perlu meminta status sertifikat TLS dari server Let's Encrypt CA untuk stapel OCSP, jadi kami perlu memberi tahu SELinux untuk mengizinkan Apache/Nginx dengan yang berikut ini perintah.

sudo setsebool -P httpd_can_network_connect 1

Jika Anda menggunakan Nginx, maka Anda juga perlu menjalankan perintah berikut untuk memberikan izin baca dan tulis kepada pengguna nginx ke 3 direktori.

sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/

Mulai ulang Apache/Nginx.

sudo systemctl restart httpd

sudo systemctl restart nginx

Dimulai dengan Dovecot 2.3.11, pengguna server web memerlukan izin untuk membaca sertifikat Let's Encrypt TLS untuk melakukan hashing kata sandi. Jalankan dua perintah berikut untuk memberikan izin.

Apache

sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Nginx

sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Langkah 4:Buat Database dan Pengguna untuk PostfixAdmin

Masuk ke shell MySQL/MariaDB sebagai root dengan perintah berikut. Anda harus memasukkan kata sandi root MySQL/MariaDB.

mysql -u root -p

Setelah Anda login, buat database untuk PostfixAdmin menggunakan perintah berikut. Saya menamakannya postfixadmin , tetapi Anda dapat menggunakan nama apa pun yang Anda suka. (Jangan tinggalkan titik koma.)

create database postfixadmin;

Kemudian masukkan perintah di bawah ini untuk membuat pengguna database untuk PostfixAdmin. Perintah ini juga memberikan semua hak istimewa database postfixadmin kepada pengguna. Ganti postfixadmin_password dengan kata sandi pilihan Anda. Perhatikan bahwa kata sandi tidak boleh mengandung # karakter, atau Anda mungkin tidak dapat masuk nanti.

grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';

Bersihkan tabel hak istimewa agar perubahan diterapkan, lalu keluar dari shell MariaDB.

flush privileges;

exit;

Langkah 5:Konfigurasi PostfixAdmin

File konfigurasi PostfixAdmin default adalah config.inc.php . Kita perlu membuat config.local.php file dan tambahkan konfigurasi khusus.

Apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

sudo nano /usr/share/nginx/postfixadmin/config.local.php

Tambahkan baris berikut dalam file, sehingga PostfixAdmin dapat terhubung ke database MySQL/MariaDB. Ganti postfixadmin_password dengan kata sandi PostfixAdmin asli yang dibuat pada langkah 4.

<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['encrypt'] = 'dovecot:BLF-CRYPT';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";

Simpan dan tutup file. Perhatikan bahwa kita akan menggunakan skema sandi BLF-CRYPT.

Langkah 6:Buat Apache Virtual Host atau File Konfigurasi Nginx untuk PostfixAdmin

Apache

Jika Anda menggunakan server web Apache, buat host virtual untuk PostfixAdmin.

sudo nano /etc/httpd/conf.d/postfixadmin.conf

Masukkan teks berikut ke dalam file. Ganti postfixadmin.example.com dengan nama domain asli Anda dan jangan lupa untuk mengatur catatan DNS A untuk itu.

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /var/www/postfixadmin/public/

  ErrorLog /var/log/httpd/postfixadmin_error.log
  CustomLog /var/log/httpd/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /var/www/postfixadmin/public/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Simpan dan tutup file. Muat ulang Apache agar perubahan diterapkan.

sudo systemctl reload httpd

Sekarang Anda seharusnya dapat melihat wizard pemasangan berbasis web PostfixAdmin di http://postfixadmin.example.com/setup.php .

Nginx

Jika Anda menggunakan server web Nginx, buat host virtual untuk PostfixAdmin.

sudo nano /etc/nginx/conf.d/postfixadmin.conf

Masukkan teks berikut ke dalam file. Ganti postfixadmin.example.com dengan nama domain asli Anda dan jangan lupa untuk mengatur catatan DNS A untuk itu.

server {
   listen 80;
   listen [::]:80;
   server_name postfixadmin.example.com;

   root /usr/share/nginx/postfixadmin/public/;
   index index.php index.html;

   access_log /var/log/nginx/postfixadmin_access.log;
   error_log /var/log/nginx/postfixadmin_error.log;

   location / {
       try_files $uri $uri/ /index.php;
   }

   location ~ ^/(.+\.php)$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
   }
}

Simpan dan tutup file. Kemudian uji konfigurasi Nginx.

sudo nginx -t

Jika pengujian berhasil, muat ulang Nginx agar perubahan diterapkan.

sudo systemctl reload nginx

Sekarang Anda seharusnya dapat melihat wizard pemasangan berbasis web PostfixAdmin di http://postfixadmin.example.com/setup.php .

Langkah 7:Instal Modul PHP yang Diperlukan dan Direkomendasikan

PostfixAdmin membutuhkan php-imap modul untuk membuat subfolder di kotak surat, tetapi php-imap tidak disertakan dalam repositori default CentOS 8/RHEL 8, jadi kita perlu menggunakan repo Remi untuk menginstal modul PHP ini.

Instal Remi Repo.

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Kemudian setel ulang aliran modul PHP.

sudo dnf module reset php

Aktifkan php:remi-7.4 aliran modul.

sudo dnf module enable php:remi-7.4 -y

Kemudian Anda dapat menjalankan perintah berikut untuk menginstal modul PHP yang diperlukan atau direkomendasikan oleh PostfixAdmin.

sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp

Kita perlu menjalankan perintah berikut untuk memberi tahu SELinux agar mengizinkan Apache untuk mengeksekusi kode PHP melalui PHP-FPM.

sudo setsebool -P httpd_execmem 1

Jika Anda menggunakan Nginx , edit file konfigurasi PHP-FPM:

nano /etc/php-fpm.d/www.conf

Secara default, PHP-FPM berjalan sebagai apache pengguna. Karena Anda menggunakan server web Nginx, kami perlu mengubahnya. Temukan dua baris berikut.

user = apache
group = apache

Ubah ke

user = nginx
group = nginx

Simpan dan tutup file. Kemudian mulai PHP-FPM.

sudo systemctl start php-fpm

Aktifkan mulai otomatis pada waktu boot sistem.

sudo systemctl enable php-fpm

Mulai ulang Apache atau Nginx.

sudo systemctl restart httpd

sudo systemctl restart nginx

Langkah 8:Mengaktifkan HTTPS

Untuk mengenkripsi lalu lintas HTTP, kita dapat mengaktifkan HTTPS dengan memasang sertifikat TLS gratis yang dikeluarkan dari Let's Encrypt.

Jika Anda menggunakan Apache, jalankan perintah ini untuk mendapatkan dan menginstal sertifikat TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Jika Anda menggunakan Nginx,  jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Dimana:

  • --apache :Gunakan plugin Apache.
  • --nginx :Gunakan plugin nginx.
  • --agree-tos :Menyetujui persyaratan layanan.
  • --redirect :Memaksa HTTPS dengan pengalihan 301.
  • --hsts : Tambahkan header Strict-Transport-Security ke setiap respons HTTP. Memaksa browser untuk selalu menggunakan TLS untuk domain. Mempertahankan dari SSL/TLS Stripping.
  • --staple-ocsp : Mengaktifkan Stapel OCSP. Respons OCSP yang valid ditempelkan ke sertifikat yang ditawarkan server selama TLS.
  • --email :Email yang digunakan untuk pendaftaran dan kontak pemulihan.
  • -d flag diikuti oleh daftar nama domain, dipisahkan dengan koma. Anda dapat menambahkan hingga 100 nama domain.

Sertifikat sekarang harus diperoleh dan diinstal secara otomatis, yang ditunjukkan oleh pesan di bawah ini.

Langkah 9:Buat Kebijakan SELinux Kustom untuk Server Web

Selama instalasi, PostfixAdmin perlu membaca file konfigurasi Dovecot untuk membuat kata sandi. Secara default, SELinux tidak mengizinkan server web untuk membaca file konfigurasi Dovecot. Kita perlu membuat kebijakan SELinux khusus untuk mengizinkan tindakan ini.

Instal paket yang diperlukan.

sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel

Buat kebijakan khusus untuk httpd. (Jika Anda menggunakan Nginx, ganti httpd dengan nginx .)

sudo sepolicy generate --init /usr/sbin/httpd

Edit file penegakan jenis.

sudo nano httpd.te

Tambahkan baris berikut di akhir file ini, sehingga Apache/Nginx dapat membaca file konfigurasi Dovecot.

dovecot_read_config(httpd_t)

Simpan dan tutup file. Kemudian instal kebijakan SELinux yang baru.

sudo ./httpd.sh

Sekarang Apache/Nginx seharusnya dapat membaca file konfigurasi Dovecot.

Jika Anda tidak tahu apa yang harus ditambahkan ke httpd.te file, jalankan perintah berikut setelah penolakan SELinux terjadi.

sudo ausearch -m AVC -ts recent | audit2allow -R

audit2allow akan menyarankan perubahan.

Langkah 10:Aktifkan Statistik di Dovecot

PostfixAdmin perlu membaca statistik Dovecot. Edit file konfigurasi Dovecot.

sudo nano /etc/dovecot/conf.d/10-master.conf

Tambahkan baris berikut ke akhir file ini. Jika Anda menggunakan Nginx, ubah apache ke nginx .

service stats {
    unix_listener stats-reader {
    user = apache
    group = apache
    mode = 0660
}

unix_listener stats-writer {
    user = apache
    group = apache
    mode = 0660
  }
}

Simpan dan tutup file. Kemudian tambahkan server web ke dovecot grup.

Apache

sudo gpasswd -a apache dovecot

NGinx

sudo gpasswd -a nginx dovecot

Mulai ulang Dovecot.

sudo systemctl restart dovecot

Langkah 11:Selesaikan Instalasi di Web Browser

Buka postfixadmin.example.com/setup.php untuk menjalankan wizard pengaturan berbasis web. Pertama, Anda perlu membuat kata sandi pengaturan untuk PostfixAdmin.

Setelah membuat hash password, PostfixAdmin akan menampilkan baris seperti di bawah ini.

$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';

Anda perlu membuka config.local.php berkas.

Apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

sudo nano /usr/share/nginx/postfixadmin/config.local.php

Tambahkan tampilan baris pada halaman setup PostfixAdmin di akhir file seperti di bawah ini.

Setelah menyimpan file, Anda perlu me-refresh halaman pengaturan PostfixAdmin dan memasukkan kembali kata sandi pengaturan, lalu buat akun admin. Harap jangan gunakan alamat email Gmail, Yahoo Mail, atau Microsoft untuk akun admin, atau Anda mungkin tidak dapat masuk nanti. Gunakan alamat email di domain Anda sendiri. Anda dapat membuat alamat email nanti di PostfixAdmin.

Setelah akun superadmin dibuat, Anda dapat login ke PostfixAdmin di postfixadmin.example.com/login.php .

Jika Anda melihat kesalahan berikut saat mencoba membuat akun superadmin,

can’t encrypt password with dovecotpw, see error log for details

Itu karena pengguna server web tidak memiliki izin untuk membaca sertifikat Let's Encrypt TLS. Untuk memperbaikinya, jalankan dua perintah berikut untuk memberikan izin.

Apache

sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/archive/

Nginx

sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/archive/

Jika Anda melihat kesalahan berikut,

Invalid query: Specified key was too long; max key length is 1000 bytes

Kemudian Anda perlu masuk ke server database MySQL/MariaDB sebagai root dari baris perintah,

mysql -u root -p

dan ubah susunan default dari utf8mb4_general_ci ke utf8_general_ci .

MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';

Keluar dari konsol MySQL/MariaDB dan muat ulang halaman setup.php.

Langkah 12:Konfigurasi Postfix untuk Menggunakan Database MySQL/MariaDB

Secara default, Postfix mengirimkan email hanya kepada pengguna dengan akun Unix lokal. Untuk membuatnya mengirimkan email ke pengguna virtual yang informasinya disimpan dalam database, kita perlu mengkonfigurasi Postfix untuk menggunakan domain kotak surat virtual.

Pertama, kita perlu menambahkan dukungan peta MySQL untuk Postfix dengan menginstal postfix-mysql paket.

sudo dnf install postfix-mysql

Kemudian edit file konfigurasi utama Postfix.

sudo nano /etc/postfix/main.cf

Tambahkan baris berikut di akhir file ini. (Di editor teks Nano, Anda dapat menekan Ctrl+W , lalu Ctrl+V untuk melompat ke akhir file.)

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Dimana:

  • virtual_mailbox_domains menunjuk ke file yang akan memberi tahu Postfix cara mencari informasi domain dari database.
  • virtual_mailbox_maps menunjuk ke file yang akan memberitahu Postfix cara mencari alamat email dari database.
  • virtual_alias_maps menunjuk ke file yang akan memberi tahu Postfix cara mencari alias dari database.

Kami ingin menggunakan dovecot untuk mengirimkan email masuk ke penyimpanan pesan pengguna virtual, jadi tambahkan juga baris berikut di akhir file ini.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Simpan dan tutup file. Selanjutnya, kita perlu membuat .cf file satu per satu. Buat direktori sql.

sudo mkdir /etc/postfix/sql/

Buat mysql_virtual_domains_maps.cf berkas.

sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf

Tambahkan konten berikut. Ganti postfixadmin_password dengan kata sandi postfixadmin yang Anda atur di Langkah 4.

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100

Buat mysql_virtual_mailbox_maps.cf berkas.

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Tambahkan konten berikut.

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100

Buat mysql_virtual_alias_domain_mailbox_maps.cf berkas.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Tambahkan konten berikut.

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

Buat mysql_virtual_alias_maps.cf berkas.

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

Tambahkan konten berikut.

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

Buat mysql_virtual_alias_domain_maps.cf berkas.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

Tambahkan konten berikut.

user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Buat mysql_virtual_alias_domain_catchall_maps berkas.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Tambahkan konten berikut.

# handles catch-all settings of target-domain
user = postfixadmin
password = postfixadmin_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Karena kata sandi basis data disimpan dalam teks biasa sehingga hanya dapat dibaca oleh postfix dan root pengguna, yang dilakukan dengan menjalankan dua perintah berikut.

sudo chmod 0640 /etc/postfix/sql/*
sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/

Selanjutnya, kita perlu mengubah nilai mydestination parameter di Postfix. Tampilkan nilai saat ini:

postconf mydestination

Contoh keluaran:

mydestination = linuxbabe.com, $myhostname, localhost.$mydomain, localhost

mydestination parameter berisi daftar nama domain yang akan menerima email yang dikirimkan ke akun Unix lokal. Di bagian 1, kami menambahkan nama domain apex (seperti linuxbabe.com) ke mydestination . Karena kita akan menggunakan kotak surat virtual, kita perlu menghapus nama domain apex dari daftar dengan mengeluarkan perintah berikut.

sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"

Sekarang mari kita buka lagi file konfigurasi utama Postfix.

sudo nano /etc/postfix/main.cf

Tambahkan baris berikut di akhir file ini.

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

Baris pertama mendefinisikan lokasi dasar file email. 3 baris sisanya menentukan ID pengguna dan ID grup mana yang akan digunakan Postfix saat mengirimkan email masuk ke kotak surat. Kami menggunakan ID pengguna 2000 dan ID grup 2000.

Simpan dan tutup file. Mulai ulang Postfix agar perubahan diterapkan.

sudo systemctl restart postfix

Selanjutnya, kita perlu membuat pengguna bernama vmail dengan ID 2000 dan grup dengan ID 2000.

sudo adduser vmail --system --uid 2000 --user-group --no-create-home

Buat lokasi basis surat.

sudo mkdir /var/vmail/

Buat vmail sebagai pemilik.

sudo chown vmail:vmail /var/vmail/ -R

Kita juga perlu mengubah konteks SELinux agar dapat ditulis.

sudo chcon -t mail_spool_t /var/vmail/ -R

Langkah 13:Konfigurasikan Dovecot untuk Menggunakan Database MySQL/MariaDB

Kita juga perlu mengkonfigurasi server IMAP Dovecot untuk menanyakan informasi pengguna dari database. Pertama, jalankan perintah berikut untuk menambahkan dukungan MySQL untuk Dovecot.

sudo dnf install dovecot-mysql

Kemudian edit 10-mail.conf berkas.

sudo nano /etc/dovecot/conf.d/10-mail.conf

Di bagian 2, kami menggunakan mail_location berikut . Pesan email disimpan di bawah Maildir direktori di bawah direktori home setiap pengguna.

mail_location = maildir:~/Maildir

Karena kita menggunakan domain kotak surat virtual sekarang, kita perlu mengaktifkan mail_home untuk pengguna virtual dengan menambahkan baris berikut dalam file, karena pengguna virtual tidak memiliki direktori home secara default.

mail_home = /var/vmail/%d/%n

Simpan dan tutup file. Kemudian edit 10-auth.conf berkas.

sudo nano /etc/dovecot/conf.d/10-auth.conf

Di bagian 2, kami menggunakan nilai berikut untuk auth_username_format .

auth_username_format = %n

%n akan menjatuhkan domain jika diberikan. Karena di part 2 kita menggunakan akun Unix lokal untuk username setiap alamat email, kita harus menggunakan %n untuk menghapus domain, sehingga pengguna dapat masuk dengan alamat email lengkap.

Sekarang kita menggunakan domain kotak surat virtual, yang berarti nama pengguna dari setiap alamat email menyertakan bagian domain, jadi kita perlu mengubah auth_username_format sebagai berikut. %u tidak akan menghapus domain. Ini memungkinkan pengguna untuk masuk dengan alamat email lengkap.

auth_username_format = %u

Batalkan komentar pada baris berikut di akhir file, sehingga Dovecot dapat meminta informasi pengguna dari database.

!include auth-sql.conf.ext

Sekarang Anda mungkin tidak ingin pengguna Unix lokal mengirim email tanpa mendaftarkan alamat email di PostfixAdmin, lalu beri komentar pada baris berikut dengan menambahkan karakter # di awal, jadi Dovecot tidak akan menanyakan /etc/passwd atau /etc/shadow berkas.

#!include auth-system.conf.ext

Akan sangat membantu untuk menambahkan dua baris berikut dalam file ini untuk men-debug masalah login. Kesalahan login akan masuk ke /var/log/maillog mengajukan. (Setelah pengguna dapat masuk tanpa masalah, Anda dapat mengomentari dua baris berikut.)

auth_debug = yes
auth_debug_passwords = yes

Simpan dan tutup file.

Buat dovecot-sql.conf.ext berkas.

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Berikut adalah konten yang harus Anda miliki. Ganti postfixadmin_password dengan kata sandi postfixadmin yang Anda atur di Langkah 4.

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password

default_pass_scheme = BLF-CRYPT

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

iterate_query = SELECT username AS user FROM mailbox

Simpan dan tutup file. Dan mulai ulang Dovecot.

sudo systemctl restart dovecot

Saat pengguna mencoba masuk, Dovecot akan menghasilkan hash BLF-CRYPT dari kata sandi yang dimasukkan oleh pengguna, lalu membandingkannya dengan hash kata sandi yang tersimpan di database.

Langkah 14:Tambahkan Domain dan Kotak Surat di PostfixAdmin

Masuk ke antarmuka web PostfixAdmin sebagai admin. Klik Domain List tab dan pilih New Domain untuk menambahkan domain. Anda dapat memilih berapa banyak alias dan kotak surat yang diizinkan untuk domain ini.

Kemudian klik Virtual List tab dan pilih Add Mailbox untuk menambahkan alamat email baru untuk domain Anda.

Sekarang jalankan klien email desktop Anda seperti Mozilla Thunderbird dan tambahkan akun email. Jika Thunderbird menemukan konfigurasi server email Anda seperti di bawah ini, cukup klik Selesai dan Anda akan dapat membaca dan mengirim email.

Jika Thunderbird tidak menemukan konfigurasi server email Anda, klik Konfigurasi manual untuk memasukkan detail server email Anda.

  • Di bagian server masuk, pilih protokol IMAP, masukkan mail.your-domain.com sebagai nama server, pilih port 143 dan STARTTLS. Pilih normal password sebagai metode otentikasi.
  • Di bagian keluar, pilih protokol SMTP, masukkan mail.your-domain.com sebagai nama server, pilih port 587 dan STARTTLS. Pilih normal password sebagai metode otentikasi.

Petunjuk :Anda juga dapat menggunakan port 993 dengan enkripsi SSL/TLS untuk IMAP, dan menggunakan port 465 dengan enkripsi SSL/TLS untuk SMTP. Anda seharusnya tidak gunakan port 25 sebagai port SMTP di klien email untuk mengirimkan email keluar.

Anda sekarang seharusnya dapat terhubung ke server email Anda sendiri dan juga mengirim dan menerima email dengan klien email desktop Anda!

Kiat Pemecahan Masalah

Sebagai aturan praktis, Anda harus selalu memeriksa log email (/var/log/maillog ) di server email Anda saat terjadi kesalahan. Berikut adalah daftar kesalahan khusus dan kiat pemecahan masalah.

Tidak dapat masuk dari Klien Email

Jika Anda tidak dapat masuk ke server email Anda dari klien email desktop, pindai server email Anda untuk mengetahui apakah port terbuka. Perhatikan bahwa Anda harus menjalankan perintah berikut dari komputer atau server Linux lain. Jika Anda menjalankannya di server email Anda, port akan selalu tampak terbuka.

sudo nmap mail.your-domain.com

Dan periksa apakah Dovecot sedang berjalan.

systemctl status dovecot

Anda juga dapat memeriksa log email (/var/log/maillog ), yang mungkin memberi Anda beberapa petunjuk. Jika Dovecot gagal memulai, kesalahan mungkin tidak dicatat ke /var/log/maillog file, Anda dapat menjalankan perintah berikut untuk melihat apa yang salah.

sudo journalctl -eu dovecot

Jika Anda melihat kesalahan berikut di log email, kemungkinan Anda tidak menyetel sandi yang benar di .cf file di bawah /etc/postfix/sql/ direktori.

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure

Jika Anda melihat kesalahan berikut di log email, itu karena Anda lupa menambahkan mail_location = maildir:~/Maildir di /etc/dovecot/conf.d/10-mail.conf berkas.

open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775

Cloudflare DNS

As I said in part 1, if you use Cloudflare DNS service, you should not enable the CDN (proxy) feature when creating DNS A record and AAAA record for the hostname of your mail server. Cloudflare doesn’t support SMTP or IMAP proxy.

Relay Access Denied

If you see the “relay access denied ” error when trying to send emails from a mail client, it’s most likely that you use port 25 as the SMTP port in your mail client. As I said a while ago, you should use port 587 or 465 as the SMTP port in mail clients (Mozilla Thunberbird, Microsoft Outlook, etc) to submit outgoing emails. Port 25 should be used for SMTP server to SMTP server communications.

iOS Mail App

If you use the iOS Mail app to log into your mail server and encounter the following error.

You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.

Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.

Temporary Lookup Failure

If your mail server was working fine for some time, but suddenly you find the following error in the mail log,

Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure;  proto=ESMTP
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure

It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.

sudo journalctl -eu mariadb

atau

sudo journalctl -eu mysql

A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.

htop

atau

free -m

Change User Password in PostfixAdmin

Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php , then change their passwords.

Automatically Clean the Junk Folder and Trash Folder

To delete emails in Junk folder for all users, you can run

sudo doveadm expunge -u *@example.com mailbox Junk all

To delete emails in Trash folder for all users, run

sudo doveadm expunge -u *@example.com mailbox Trash all

I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.

sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w

Then add a cron job to automate the job.

sudo crontab -e

Add the following line to clean Junk and Trash folder every day

@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w

Restricting Access to Sendmail

By default, any local user can use the sendmail binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.

sudo nano /etc/postfix/main.cf

Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.

authorized_submit_users = root,www-data

Simpan dan tutup file. Then restart Postfix.

sudo systemctl restart postfix

Langkah Selanjutnya

I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.

If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful,  subscribe to our free newsletter to get more tips and tricks. Take care 🙂


Cent OS
  1. Siapkan server email dengan PostfixAdmin dan MariaDB di CentOS 7

  2. Cara mengatur server email dengan PostfixAdmin di CentOS 7

  3. Cara Membuat Spanduk SSH di Server CentOS/RHEL

  1. Cara Mengatur Virtual Host Nginx (Blok Server) di CentOS 7

  2. Instal server web Apache CentOS 6 / RHEL 6

  3. Cara menginstal Wayang di RHEL 8/CentOS 8

  1. Cara menginstal server email postfix di RHEL 8 / CentOS 8

  2. Cara Install iRedMail (Mail Server) di CentOS 7 / RHEL 7

  3. Cara Menginstal OpenLiteSpeed ​​Web Server di CentOS 8/RHEL 8