GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagian 3:PostfixAdmin – Membuat Kotak Surat Virtual di Server Surat Ubuntu 20.04

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. 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! 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


Ubuntu
  1. Cara menginstal DKIM di server Ubuntu

  2. Instal server web Apache di Ubuntu 12.10

  3. Siapkan server email dengan PostfixAdmin dan MariaDB di CentOS 7

  1. Cara Setup Zimbra Mail Server di Ubuntu 16

  2. Server Ftp Ubuntu Dasar?

  3. Cara Menginstal Server Mail dengan PostfixAdmin di Ubuntu 20.04

  1. Cara membuat server repositori Ubuntu

  2. Siapkan server email dengan PostfixAdmin

  3. Cara Membuat Lingkungan Virtual Python di Ubuntu 18.04