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. Pilihnormal password
sebagai metode otentikasi. - Di bagian keluar, pilih protokol SMTP, masukkan
mail.your-domain.com
sebagai nama server, pilih port 587 dan STARTTLS. Pilihnormal 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 🙂