Pada artikel sebelumnya, kami membahas cara mengatur server email Anda sendiri di Ubuntu 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 Ubuntu 20.04 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 lebih baik dilakukan di email web Roundcube)
- 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 untuk 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
Anda harus mengikuti bagian 1 dan bagian 2 dari seri tutorial ini sebelum melanjutkan membaca artikel ini. Jika Anda mengikuti tutorial server email di situs web lain, saya sarankan untuk menghapus konfigurasi Anda (sudo apt purge postfix dovecot-core
) dan mulai lagi 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
PostfixAdmin ditulis dalam PHP dan membutuhkan database (MySQL/MariaDB, PostgreSQL atau SQLite). Artikel ini akan menggunakan database 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 Ubuntu 20.04.
sudo apt install mariadb-server mariadb-client
Setelah terinstal, server MariaDB akan otomatis dimulai. Gunakan systemctl untuk memeriksa statusnya.
systemctl status mariadb
Keluaran:
● mariadb.service - MariaDB 10.3.22 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 9161 (mysqld) Status: "Taking your SQL requests now..." Tasks: 31 (limit: 9451) Memory: 64.7M CGroup: /system.slice/mariadb.service └─9161 /usr/sbin/mysqld
Jika tidak berjalan, mulai dengan perintah ini:
sudo systemctl start mariadb
Untuk mengaktifkan MariaDB agar mulai otomatis saat boot, jalankan
sudo systemctl enable mariadb
Sekarang jalankan skrip keamanan pasca-instalasi.
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 Y dikapitalisasi, yang berarti itu adalah jawaban default. )
Langkah 2:Instal PostfixAdmin di Server Ubuntu 20.04
Masuk ke server email Anda. Karena beberapa pembaca menggunakan server MariaDB, sementara yang lain menggunakan MySQL, yang membuat segalanya menjadi rumit, jadi sebelum menginstal PostfixAdmin, kami menginstal dbconfig-no-thanks
paket untuk mencegah postfixadmin
paket dari meluncurkan wizard konfigurasi database.
sudo apt install dbconfig-no-thanks
Kemudian instal PostfixAdmin dari repositori perangkat lunak default Ubuntu.
sudo apt install postfixadmin
Catatan :Jika sebelumnya Anda telah menginstal mysql-server
di Ubuntu, instalasi PostfixAdmin mungkin akan menghapus mysql-server
paket dari sistem Anda. Anda dapat menginstal ulang dengan menjalankan perintah berikut.
sudo apt install mysql-server
Sekarang kita perlu menghapus dbconfig-no-thanks
paket.
sudo apt remove dbconfig-no-thanks
Kemudian luncurkan wizard konfigurasi database untuk PostfixAdmin.
sudo dpkg-reconfigure postfixadmin
Selama instalasi, Anda akan ditanya apakah Anda ingin menginstal ulang database untuk PostfixAdmin. Ini berarti membuat database bernama postfixadmin
, itu tidak akan menghapus database Anda yang ada. Tekan tombol Tab untuk memilih Ya .
Kemudian pilih tipe database default:mysql
, jika Anda menggunakan MySQL atau MariaDB.
Selanjutnya, pilih metode koneksi default:Unix socket
.
Kemudian pilih plugin otentikasi default untuk MySQL/MariaDB.
Tekan Enter untuk memilih nama database default untuk PostfixAdmin.
Tekan Enter untuk memilih nama pengguna database default untuk PostfixAdmin.
Setelah itu, Anda perlu mengatur kata sandi untuk pengguna ini. Perhatikan bahwa kata sandi tidak boleh mengandung #
karakter, atau Anda mungkin tidak dapat masuk nanti.
Terakhir, pilih pengguna administratif database default.
Setelah PostfixAdmin terinstal, Anda dapat masuk ke konsol MySQL/MariaDB dengan perintah berikut. Anda harus memasukkan kata sandi untuk postfixadmin
pengguna.
mysql -u postfixadmin -p
Dan Anda dapat memeriksa database apa yang memiliki izin akses pengguna dengan perintah berikut.
SHOW DATABASES;
Keluaran:
+--------------------+ | Database | +--------------------+ | information_schema | | postfixadmin | +--------------------+ 2 rows in set (0.002 sec)
Secara default, postfixadmin
database tidak berisi tabel. Anda dapat keluar dari konsol MySQL/MariaDB dengan perintah berikut.
EXIT;
Instalasi juga akan membuat dua file konfigurasi:/etc/dbconfig-common/postfixadmin.conf
dan /etc/postfixadmin/dbconfig.inc.php
, keduanya berisi pengaturan akses basis data, termasuk nama pengguna dan kata sandi basis data. Kita perlu mengubah tipe database dari mysql
ke mysqli
di kedua file tersebut.
sudo nano /etc/dbconfig-common/postfixadmin.conf
Ubah
dbc_dbtype='mysql'
untuk
dbc_dbtype='mysqli'
Kemudian edit file kedua.
sudo nano /etc/postfixadmin/dbconfig.inc.php
Ubah
$dbtype='mysql';
untuk
$dbtype='mysqli';
File web diinstal di bawah /usr/share/postfixadmin/
direktori, yang dimiliki oleh root. PostfixAdmin membutuhkan templates_c
direktori, jadi buatlah.
sudo mkdir /usr/share/postfixadmin/templates_c
Kita perlu memberikan www-data
pengguna membaca, menulis, dan menjalankan izin pada direktori ini dengan perintah berikut.
sudo setfacl -R -m u:www-data:rwx /usr/share/postfixadmin/templates_c/
Jika sistem Anda tidak dapat menemukan setfacl
perintah, Anda perlu menginstal acl
paket.
sudo apt install acl
Langkah 3: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/apache2/sites-available/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 /usr/share/postfixadmin/public ErrorLog ${APACHE_LOG_DIR}/postfixadmin_error.log CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log combined <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /usr/share/postfixadmin/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Simpan dan tutup file. Kemudian aktifkan host virtual ini dengan:
sudo a2ensite postfixadmin.conf
Muat ulang Apache agar perubahan diterapkan.
sudo systemctl reload apache2
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/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/php7.4-fpm.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 4:Instal Modul PHP yang Diperlukan dan Direkomendasikan
Jalankan perintah berikut untuk menginstal modul PHP yang diperlukan atau direkomendasikan oleh PostfixAdmin.
sudo apt install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp
Kemudian restart Apache. (Jika Anda menggunakan Nginx, Anda tidak perlu memulai ulang Nginx.)
sudo systemctl restart apache2
Langkah 5:Mengaktifkan HTTPS
Untuk mengenkripsi lalu lintas HTTP, kita dapat mengaktifkan HTTPS dengan memasang sertifikat TLS gratis yang dikeluarkan dari Let's Encrypt. Jalankan perintah berikut untuk menginstal klien Let's Encrypt (certbot) di server Ubuntu 20.04.
sudo apt install certbot
Jika Anda menggunakan Apache, instal plugin Certbot Apache.
sudo apt install python3-certbot-apache
Dan 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, maka Anda juga perlu menginstal plugin Certbot Nginx.
sudo apt install python3-certbot-nginx
Selanjutnya, 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
--nginx
:Gunakan plugin nginx.--apache
:Gunakan plugin Apache.--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.
Sertifikat sekarang harus diperoleh dan diinstal secara otomatis, yang ditunjukkan oleh pesan di bawah ini.
Langkah 6:Gunakan Skema Kata Sandi yang Kuat di PostfixAdmin dan Dovecot
Secara default, PostfixAdmin dan Dovecot menggunakan MD5-CRYPT, yang merupakan skema sandi yang lemah. Anda dapat membuat daftar skema kata sandi yang tersedia di Dovecot dengan perintah berikut.
sudo doveadm pw -l
Contoh keluaran:
SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5
Argon2 adalah skema kata sandi yang cukup kuat. Untuk menggunakannya, kita perlu mengedit file konfigurasi PostfixAdmin, yang secara default adalah /usr/share/postfixadmin/config.inc.php
, tetapi kita dapat membuat file terpisah (config.local.php
) untuk menyimpan modifikasi kami, sehingga tidak akan ditimpa ketika versi baru PostfixAdmin diinstal di masa mendatang.
sudo nano /usr/share/postfixadmin/config.local.php
Tambahkan baris berikut dalam file untuk menggunakan skema sandi Argon2.
<?php $CONF['encrypt'] = 'dovecot:ARGON2I'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171 $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian }
Simpan dan tutup file. Kita juga bisa membuat symlink di /etc/postfixadmin/
direktori, untuk berjaga-jaga jika PostfixAdmin tidak dapat menemukan file tersebut.
sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php
Kami akan mengonfigurasi skema kata sandi untuk Dovecot di langkah 11.
Langkah 7: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 di akhir file ini.
service stats { unix_listener stats-reader { user = www-data group = www-data mode = 0660 } unix_listener stats-writer { user = www-data group = www-data mode = 0660 } }
Simpan dan tutup file. Kemudian tambahkan server web ke dovecot
grup.
sudo gpasswd -a www-data dovecot
Mulai ulang Dovecot.
sudo systemctl restart dovecot
Langkah 8:Selesaikan Instalasi di Web Browser
Buka postfixadmin.example.com/setup.php
untuk menjalankan wizard pengaturan berbasis web. Pertama, ia akan memeriksa apakah semua dependensi telah diinstal dan membuat tabel database.
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,
sudo mysql -u root
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. Setelah semua persyaratan terpenuhi, Anda dapat membuat kata sandi pengaturan untuk PostfixAdmin.
Setelah membuat hash kata sandi, Anda perlu membuka /usr/share/postfixadmin/config.local.php
file dan tambahkan hash kata sandi pengaturan di akhir file seperti di bawah ini. Tentu saja, Anda perlu menggunakan hash kata sandi Anda sendiri.
Selanjutnya, 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.
Jika Anda melihat kesalahan berikut saat mencoba membuat akun superadmin,
can’t encrypt password with dovecotpw, see error log for details
Itu karena www-data
pengguna tidak memiliki izin untuk membaca sertifikat Let's Encrypt TLS. Untuk memperbaikinya, jalankan perintah berikut untuk memberikan izin.
sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Setelah akun superadmin dibuat, Anda dapat masuk ke PostfixAdmin di postfixadmin.example.com/login.php
.
Langkah 9:Memeriksa Tabel di Database
Proses setup PostfixAdmin mengisi postfixadmin
database dengan beberapa tabel default. Sangat membantu bagi kita untuk mengetahui nama dan struktur tabel. Masuk ke konsol MySQL/MariaDB.
sudo mysql -u root
Pilih postfixadmin
basis data.
USE postfixadmin;
Daftar semua tabel dalam database ini.
SHOW TABLES;
Keluaran:
+------------------------+ | Tables_in_postfixadmin | +------------------------+ | admin | | alias | | alias_domain | | config | | domain | | domain_admins | | fetchmail | | log | | mailbox | | quota | | quota2 | | vacation | | vacation_notification | +------------------------+ 13 rows in set (0.001 sec)
3 tabel terpenting adalah:
domain
:berisi informasi tentang domain yang menggunakan server email Anda untuk mengirim dan menerima email.mailbox
:berisi informasi tentang setiap alamat email, termasuk sandi hash dan lokasi file email.alias
:berisi alias dari setiap alamat email.
Jika Anda tertarik, Anda dapat memeriksa kolom apa yang ada di setiap tabel. Misalnya, perintah berikut akan menunjukkan kepada kita kolom di domain
tabel.
DESCRIBE domain;
Keluaran:
+-------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------------------+-------+ | domain | varchar(255) | NO | PRI | NULL | | | description | varchar(255) | NO | | NULL | | | aliases | int(10) | NO | | 0 | | | mailboxes | int(10) | NO | | 0 | | | maxquota | bigint(20) | NO | | 0 | | | quota | bigint(20) | NO | | 0 | | | transport | varchar(255) | NO | | NULL | | | backupmx | tinyint(1) | NO | | 0 | | | created | datetime | NO | | 2000-01-01 00:00:00 | | | modified | datetime | NO | | 2000-01-01 00:00:00 | | | active | tinyint(1) | NO | | 1 | | +-------------+--------------+------+-----+---------------------+-------+
Keluar dari konsol MySQL/MariaDB.
EXIT;
Langkah 10: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 apt install postfix-mysql
Kemudian edit file konfigurasi utama Postfix.
sudo nano /etc/postfix/main.cf
Tambahkan baris berikut di akhir file ini.
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 password
dengan kata sandi postfixadmin yang Anda atur di Langkah 2.
user = postfixadmin password = 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 = 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 = 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 = 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 = 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 = 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 = $myhostname, linuxbabe.com, 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 --group --uid 2000 --disabled-login --no-create-home
Buat lokasi basis surat.
sudo mkdir /var/vmail/
Buat vmail
sebagai pemilik.
sudo chown vmail:vmail /var/vmail/ -R
Langkah 11:Konfigurasi 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 apt 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 ini, sehingga Dovecot dapat meminta informasi pengguna dari database MySQL/MariaDB.
!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/mail.log
mengajukan. (Setelah pengguna dapat masuk tanpa masalah, Anda dapat mengomentari dua baris berikut.)
auth_debug = yes auth_debug_passwords = yes
Simpan dan tutup file.
Edit dovecot-sql.conf.ext
berkas.
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Berikut adalah konten yang harus Anda miliki dalam file ini. Secara default, semua baris dalam file ini dikomentari, jadi Anda cukup menyalin dan menempelkannya di bagian bawah. Ganti password
dengan kata sandi postfixadmin yang Anda atur di Langkah 2.
driver = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin password=password default_pass_scheme = ARGON2I 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
Mulai ulang Dovecot.
sudo systemctl restart dovecot
Saat pengguna mencoba masuk, Dovecot akan menggunakan algoritme Argon2 untuk menghasilkan hash kata sandi dari kata sandi yang dimasukkan oleh pengguna, lalu membandingkannya dengan hash kata sandi yang tersimpan di database.
Langkah 12: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.
Selanjutnya, Anda dapat membuka klien email desktop seperti Mozilla Thunderbird dan menambahkan akun email.
- 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! Perhatikan bahwa Anda tidak dapat menggunakan akun Unix lokal untuk masuk sekarang. Anda harus masuk dengan pengguna virtual yang dibuat dari antarmuka web PostfixAdmin.
Kiat Pemecahan Masalah
Sebagai aturan praktis, Anda harus selalu memeriksa log email (/var/log/mail.log
) 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/mail.log
), yang mungkin memberi Anda beberapa petunjuk. Jika Dovecot gagal memulai, kesalahan mungkin tidak dicatat ke /var/log/mail.log
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
Seperti yang saya katakan di bagian 1, jika Anda menggunakan layanan DNS Cloudflare, Anda tidak boleh mengaktifkan fitur CDN (proxy) saat membuat catatan DNS A dan catatan AAAA untuk nama host server email Anda. Cloudflare tidak mendukung proxy SMTP atau IMAP.
Akses Relai Ditolak
Jika Anda melihat "akses relai ditolak ” ketika mencoba mengirim email dari klien email, kemungkinan besar Anda menggunakan port 25 sebagai port SMTP di klien email Anda. Seperti yang saya katakan beberapa waktu lalu, Anda harus menggunakan port 587 atau 465 sebagai port SMTP di klien email (Mozilla Thunberbird, Microsoft Outlook, dll) untuk mengirimkan email keluar. Port 25 harus digunakan untuk komunikasi server SMTP ke server SMTP.
Aplikasi Email iOS
Jika Anda menggunakan aplikasi Mail iOS untuk masuk ke server email Anda dan mengalami kesalahan berikut.
Anda dapat mencoba memperbaikinya dengan menerapkan enkripsi SSL, baik untuk SMTP maupun IMAP.
Fakta menyenangkan :Tampaknya aplikasi iOS Mail mengalami kesulitan dalam mendukung STARTTLS pada port IMAP 143, tetapi mendukung STARTTLS pada port pengiriman 587.
Kegagalan Pencarian Sementara
Jika server email Anda berfungsi dengan baik untuk beberapa waktu, tetapi tiba-tiba Anda menemukan kesalahan berikut di log email,
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
Sepertinya database MariaDB/MySQL Anda entah bagaimana berhenti. Anda dapat menggunakan perintah berikut untuk memeriksa kapan server database Anda berhenti.
sudo journalctl -eu mariadb
atau
sudo journalctl -eu mysql
Penyebab umum untuk situasi ini adalah server Anda kehabisan memori. Periksa apakah server Anda memiliki cukup memori.
htop
atau
free -m
Otomatis Membersihkan Folder Sampah dan Folder Sampah
Untuk menghapus email di folder Sampah untuk semua pengguna, Anda dapat menjalankan
sudo doveadm expunge -A mailbox Junk all
Untuk menghapus email di folder Sampah, jalankan
sudo doveadm expunge -A mailbox Junk all
Menurut saya lebih baik membersihkan email yang telah berada di folder Sampah atau Sampah selama lebih dari 2 minggu, daripada membersihkan semua email.
sudo doveadm expunge -A mailbox Junk savedbefore 2w
Kemudian tambahkan tugas cron untuk mengotomatiskan tugas.
sudo crontab -e
Tambahkan baris berikut untuk membersihkan folder Junk and Trash setiap hari.
@daily doveadm expunge -A mailbox Junk savedbefore 2w;doveadm expunge -A mailbox Trash savedbefore 2w
Untuk menerima laporan ketika pekerjaan Cron menghasilkan kesalahan, Anda dapat menambahkan baris berikut di atas semua pekerjaan Cron.
MAILTO="[email protected]"
Simpan dan tutup file. Dan selesai.
Ubah Kata Sandi Pengguna di PostfixAdmin
Pengguna dapat masuk ke PostfixAdmin di https://postfixadmin.example.com/users/login.php
, lalu ubah sandinya.
Membatasi Akses ke Sendmail
Secara default, setiap pengguna lokal dapat menggunakan sendmail
biner untuk mengirimkan email keluar. Sekarang setelah server email Anda menggunakan kotak surat virtual, Anda mungkin ingin membatasi akses ke sendmail
biner hanya untuk pengguna lokal tepercaya, sehingga pengguna jahat tidak dapat menggunakannya untuk mengirim email dalam jumlah besar untuk merusak reputasi server email Anda. Edit file konfigurasi utama Postfix.
sudo nano /etc/postfix/main.cf
Tambahkan baris berikut di akhir file ini, sehingga hanya pengguna root dan www-data yang dapat mengirimkan email melalui sendmail. Anda juga dapat menambahkan nama pengguna lain.
authorized_submit_users = root,www-data
Simpan dan tutup file. Kemudian restart Postfix.
sudo systemctl restart postfix
Langkah Selanjutnya
Saya harap tutorial ini membantu Anda menginstal dan menggunakan PostfixAdmin di Ubuntu 20.04 untuk membuat kotak surat virtual. Di bagian 4, saya akan menunjukkan cara menyiapkan SPF dan DKIM dengan Postfix untuk meningkatkan kemampuan pengiriman email dan di tutorial mendatang, saya akan menunjukkan cara menghosting beberapa domain dengan PostfixAdmin.
Jika Anda ingin mengakses email dari browser web, maka saya merekomendasikan Roundcube, yang merupakan klien webmail open-source yang sangat populer dan kaya fitur. Seperti biasa, jika menurut Anda postingan ini bermanfaat, berlangganan newsletter gratis kami untuk mendapatkan lebih banyak tips dan trik. Hati-hati