Cara Mengatur Server Email Postfix dan Dovecot dengan Database (MariaDB) dengan Aman - Bagian 1


Dalam seri 3 artikel ini kita akan membahas cara menyiapkan server email Postfix dengan perlindungan antivirus dan spam di kotak CentOS 7. Harap diperhatikan bahwa petunjuk ini juga dapat digunakan pada distribusi lain seperti RHEL/Fedora dan Debian/Ubuntu.

Rencana kami terdiri dari penyimpanan akun email dan alias dalam database MariaDB yang demi kenyamanan kami, akan dikelola melalui phpMyAdmin.

Jika Anda memilih untuk tidak menginstal phpMyAdmin, atau berurusan dengan server khusus CLI, kami juga akan memberikan kode yang setara untuk membuat tabel database yang akan digunakan di seluruh rangkaian ini.

Karena menjaga dan menjalankan server email adalah salah satu tugas penting yang biasanya ditugaskan kepada administrator dan teknisi sistem, kami juga akan memberikan beberapa tips untuk menjalankan layanan penting ini secara efisien dalam lingkungan produksi.

Buat Data A dan MX untuk Domain di DNS

Sebelum melangkah lebih jauh, ada beberapa prasyarat yang harus dipenuhi:

1. Anda memerlukan domain valid yang didaftarkan melalui pencatatan domain. Dalam seri ini kita akan menggunakan www.linuxnewz.com, yang didaftarkan melalui GoDaddy.

2. Domain tersebut harus diarahkan ke IP eksternal penyedia VPS atau hosting awan Anda. Jika Anda menghosting sendiri server email Anda, Anda dapat menggunakan layanan yang ditawarkan oleh FreeDNS (memerlukan registrasi).

Bagaimanapun, Anda juga harus menyiapkan data A dan MX untuk domain Anda (Anda dapat mempelajari lebih lanjut tentang data MX di FAQ dari Google ini).

Setelah ditambahkan, Anda dapat mencarinya menggunakan alat online seperti MxToolbox atau ViewDNS untuk memastikan semuanya telah disiapkan dengan benar.

Penting: Harap perhatikan bahwa mungkin diperlukan waktu beberapa saat (1-2 hari) hingga data DNS disebarkan dan domain Anda tersedia. Sementara itu, Anda dapat mengakses VPS Anda melalui alamat IP-nya untuk melakukan tugas-tugas yang ditunjukkan di bawah ini.

3. Konfigurasikan FQDN (Nama Domain Sepenuhnya Memenuhi Syarat) VPS Anda:

hostnamectl set-hostname yourhostname

untuk menyetel nama host sistem, lalu edit /etc/hosts sebagai berikut (ganti AAA.BBB.CCC.DDD, namahostanda, dan domainAnda dengan IP publik server Anda, nama host Anda, dan domain terdaftar Anda):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       yourhostname

dimana namahostanda adalah nama host sistem yang telah ditetapkan sebelumnya menggunakan perintah hostnamectl.

Menginstal Paket Perangkat Lunak yang Diperlukan

4. Untuk menginstal paket perangkat lunak yang diperlukan seperti Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, dll, Anda perlu mengaktifkan repositori EPEL:

yum install epel-release

5. Setelah Anda mengikuti langkah-langkah di atas, instal paket yang diperlukan:

Dalam Sistem berbasis CentOS:

yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin

Di Debian dan turunannya:

aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php5 phpMyAdmin

6. Mulai dan aktifkan server web dan database:

Dalam Sistem berbasis CentOS:

systemctl enable httpd mariadb
systemctl start httpd mariadb

Di Debian dan turunannya:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Ketika instalasi selesai dan layanan di atas diaktifkan dan berjalan, kita akan memulai dengan menyiapkan database dan tabel untuk menyimpan informasi tentang akun email Postfix.

Membuat Database Akun Email Postfix

Untuk mempermudah, kita akan menggunakan phpMyAdmin, sebuah alat yang dimaksudkan untuk menangani administrasi database MySQL/MariaDB melalui antarmuka web, untuk membuat dan mengelola basis data email.

Namun, untuk masuk dan menggunakan alat ini, kita perlu mengikuti langkah-langkah berikut:

7. Aktifkan akun MariaDB (Anda dapat melakukannya dengan menjalankan utilitas mysql_secure_installation dari baris perintah, menetapkan kata sandi untuk root pengguna, dan mengatur pengaturan default yang diusulkan oleh alat ini KECUALI “Larang login root dari jarak jauh?“:

atau buat pengguna basis data baru:

MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

Amankan Apache dengan Sertifikat

8. Karena kita akan menggunakan aplikasi web untuk mengelola database server email, kita perlu mengambil tindakan pencegahan yang diperlukan untuk melindungi koneksi ke server. Jika tidak, kredensial phpMyAdmin kami akan dikirimkan dalam bentuk teks biasa melalui kabel.

Untuk menyiapkan Transport Layer Security (TLS) di server Anda, ikuti langkah-langkah yang dijelaskan di Bagian 8 dari seri RHCE: Menerapkan HTTPS melalui TLS menggunakan Network Security Service (NSS) untuk Apache sebelum melanjutkan lebih jauh.

Catatan: jika Anda tidak memiliki akses ke konsol server, Anda perlu mencari cara lain untuk menghasilkan entropi yang diperlukan selama pembuatan kunci. Dalam hal ini, Anda mungkin ingin mempertimbangkan untuk menginstal rng-tools dan menjalankan rngd -r /dev/urandom.

Konfigurasikan dan Amankan PhpMyAdmin

9. Di /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) atau /etc/phpmyadmin/Apache. conf (Debian dan turunannya), temukan semua kemunculan baris berikut dan pastikan baris tersebut mengarah ke IP publik server Anda:

Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD

Selain itu, nonaktifkan alias default dan buat yang baru untuk mengakses halaman login phpMyAdmin Anda. Hal ini akan membantu mengamankan situs dari bot dan penyerang eksternal yang menargetkan www.domainanda.com/phpmyadmin atau www.domainanda.com/phpMyAdmin.

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin

Tambahkan juga baris berikut di dalam :

Require all granted

Buat Apache VirtualHost untuk Domain

10. Pastikan domain Anda ditambahkan ke situs yang diaktifkan. Buat /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) atau /etc/apache2/sites-available/linuxnewz.com (Debian) dengan konten berikut (pastikan DocumentRoot, sites-available, dan sites-enabled direktori ada):

<VirtualHost *:80>
    ServerName www.linuxnewz.com
    ServerAlias linuxnewz.com
    DocumentRoot /var/www/linuxnewz.com/public_html
    ErrorLog /var/www/linuxnewz.com/error.log
    CustomLog /var/www/linuxnewz.com/requests.log combined
    Options Indexes FollowSymLinks
</VirtualHost>

dan tautan simbolik:

Di CentOS:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
Di Debian:
a2ensite linuxnewz.com

dan kamu sudah selesai.

Siapkan Basis Data Email Postfix

11. Sekarang Anda dapat membuka antarmuka phpMyAdmin di https://www.yourdomain.com/managedb (perhatikan bahwa managedb< adalah alias yang kita siapkan tadi untuk direktori data phpMyAdmin).

Jika cara ini tidak berhasil (yang mungkin disebabkan oleh keterlambatan propagasi atau kurangnya konfigurasi data DNS) untuk saat ini, Anda dapat mencoba menggunakan alamat IP publik server Anda alih-alih www.domainanda.com :

Bagaimanapun, setelah Anda masuk ke phpMyAdmin Anda akan melihat antarmuka berikut. Klik Baru di bagian kiri:

Masukkan nama untuk database (EmailServer_db dalam hal ini, tidak perlu memilih Kolasi) dan klik Buat:

12. Pada layar berikutnya, pilih nama untuk tabel pertama (di mana kita akan menyimpan domain yang akan dikelola oleh server email ini.

Perlu diingat bahwa meskipun dalam rangkaian ini kami hanya akan mengelola satu domain, Anda dapat menambahkan lebih banyak lagi nanti) dan jumlah bidang yang Anda inginkan di dalamnya, lalu klik Mulai. Anda akan diminta untuk memberi nama dan mengonfigurasi kedua bidang tersebut, sehingga Anda dapat melanjutkan dengan aman seperti yang ditunjukkan pada gambar berikut:

Bila Anda memilih PRIMARY pada Indeks untuk DomainId, terima nilai default dan klik Mulai:

Alternatifnya, Anda dapat mengklik Pratinjau SQL untuk melihat kode di baliknya:

CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

Jika Anda sudah siap, klik Simpan untuk mengonfirmasi perubahan. Anda kemudian dapat mengklik Baru di bawah EmailServer_db untuk melanjutkan membuat tabel:

13. Sekarang ikuti langkah-langkah berikut untuk membuat tabel lainnya. Klik pada tab SQL dan masukkan kode yang ditunjukkan untuk setiap objek database.

Perhatikan bahwa dalam kasus ini kami memilih untuk membuat tabel menggunakan query SQL karena hubungan yang harus dibuat antara tabel yang berbeda:

Pengguna_tbl

CREATE TABLE `Users_tbl` ( 
    `UserId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(100) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`UserId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB; 

Anda akan mendapatkan pesan konfirmasi (jika tidak, phpMyAdmin akan menampilkan kesalahan sintaksis):

Alias_tbl

CREATE TABLE `Alias_tbl` (
    `AliasId` INT NOT NULL AUTO_INCREMENT, 
    `DomainId` INT NOT NULL, 
    `Source` varchar(100) NOT NULL, 
    `Destination` varchar(100) NOT NULL, 
    PRIMARY KEY (`AliasId`), 
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

(Klik Buka di bagian bawah untuk melanjutkan pembuatan tabel).

Hingga titik ini, Anda harus memiliki struktur database berikut:

Artinya Anda siap untuk mulai menambahkan beberapa catatan di bagian berikutnya.

Membuat Domain Postfix, Pengguna dan Alias

14. Sekarang kita akan memasukkan catatan berikut ke dalam tiga tabel. Sandi untuk [email  dan [email  akan dienkripsi dan pernyataan INSERT INTO Users_tbl.

Perlu diperhatikan juga bahwa email yang dikirim ke [email  akan dialihkan ke [email :

INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');

Setelah menambahkan domain, dua akun pengguna, dan alias email, kami siap untuk melanjutkan menyiapkan server email di artikel berikutnya dalam seri ini, di mana kami akan mengonfigurasi Dovecot dan Postfix.

Ringkasan

Pada artikel ini kami telah mencantumkan paket-paket yang diperlukan untuk menginstal server email Postfix di VPS CentOS 7, dan menjelaskan cara mengelola database yang mendasarinya menggunakan phpMyAdmin.

Dalam dua artikel berikutnya kami akan meninjau konfigurasi kedua program yang akan menangani distribusi email untuk domain kami (Bagian 2) dan menunjukkan kepada Anda cara menambahkan perlindungan terhadap spam dan virus (Bagian 3) untuk server Anda.

Sampai saat itu tiba, jangan ragu untuk menghubungi kami menggunakan formulir di bawah ini jika Anda memiliki pertanyaan atau komentar.