04-06-2026, 10:41 AM
Cara Mudah & Cepat Membuat server email dengan domain sendiri di VPS (ubuntu/debian/linux) Tutorial ini menggunakan Ubuntu VPS.
Pertama Set hostname VPS.
Jangan lupa juga pointing domain via cloudflare/dns andalanmu
mail.domainmu.xyz ke ip vps mu.
Lalu install App yand dibutuhkan
Ketika Muncul Pop Up pengaturan Postfix, Pilih
=====================
Lanjut Tahap Selanjutnya
====================
Berhubung Spec VPS hanya ram 512Mb, disini saya gunakan sqlite. Untuk rekomendasi, harusnya menggunakan MySql atau MariaDB
kita membuat virtual user, domain, email alias dan database sqlite
Buat Password Hash untuk user email
Lanjut Setting POSTFIX
Backup dulu Config Aslinya buat jaga - jaga
Setting postfix
Setting sqlite Postfix
Buat Struktur Folder
Lalu Atur Dovecot Main dengan sqlite
setting Dovecot
Setting auth Dovecot
Setting Lokasi Folder (?) Email
juga Namespaces
setting protocol (IMAP & POP3)
Juga LMTP
Setting SSL sementara, Nanti Diganti Ke Letsencrypt SSL Gratis
lalu tambah user vmail ke Group mail
==========================
Lanjut SSL Lets Encrypt
==========================
Hentikan Dulu apache & nginx Buat ngebebasin port 80
Jalankan Certbot buat dapetin Cert Lets Encrypt
Biar Auto Update Ketika Expired
atau pake nano buat bikin file tersebut, lalu isi ini
Setting dovecot biar pake Cert Letsencrypt Tadi
Juga Posttfixnya
Tambahkan SASL Auth Postfix
Juga Dovecot SASL Auth nya
Yooooooooo Sudah 90% Perjalanan!!!!
langsung mulai!!
Kalo pake Firewall, open portnya
Finnally, langsung coba login dong
Di settingan mail client mu Seperti Thunderbird / k9-mail atau Mail client lain yang Support SMTP
Kalo mau nambah user email,
Konek dulu ke sqlite database nya
sudo sqlite3 /etc/mail/sqlite/mailserver.db
lalu
dapetin/bikin lagi Hash Password kyk kode diatas sebelume.
Lalu bikinin Lokasi Folder Buat inbox & attachment
Lalu coba Login
SELESAI. . . . Selamat Mengirim Email
Pertama Set hostname VPS.
Code:
sudo hostnamectl set-hostname mail.domainmu.xyz
echo "127.0.0.1 mail.domainmu.xyz localhost" | sudo tee -a /etc/hosts
sudo apt update && sudo apt upgrade -yJangan lupa juga pointing domain via cloudflare/dns andalanmu
mail.domainmu.xyz ke ip vps mu.
Lalu install App yand dibutuhkan
Code:
sudo apt install -y postfix dovecot-core dovecot-imapd dovecot-pop3d \
dovecot-lmtpd dovecot-sqlite sqlite3 certbot python3-certbot-apache \
opendkim opendkim-tools mailutilsKetika Muncul Pop Up pengaturan Postfix, Pilih
- Internet Site
- mail.domainmu.xyz
=====================
Lanjut Tahap Selanjutnya
====================
Berhubung Spec VPS hanya ram 512Mb, disini saya gunakan sqlite. Untuk rekomendasi, harusnya menggunakan MySql atau MariaDB
kita membuat virtual user, domain, email alias dan database sqlite
Code:
sudo mkdir -p /etc/mail/sqlite
sudo sqlite3 /etc/mail/sqlite/mailserver.db <<EOF
CREATE TABLE virtual_domains (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE virtual_users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
domain_id INTEGER NOT NULL,
email TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id)
);
CREATE TABLE virtual_aliases (
id INTEGER PRIMARY KEY AUTOINCREMENT,
domain_id INTEGER NOT NULL,
source TEXT NOT NULL,
destination TEXT NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id)
);
INSERT INTO virtual_domains (name) VALUES ('domainmu.xyz');
-- Create a user (change password after generating hash)
INSERT INTO virtual_users (domain_id, email, password)
VALUES (1, 'admin@domainmu.xyz', 'passwordkeren123789!_');
INSERT INTO virtual_aliases (domain_id, source, destination)
VALUES (1, 'postmaster@domainmu.xyz', 'admin@domainmu.xyz');
.exit
EOF
sudo chmod 640 /etc/mail/sqlite/mailserver.db
sudo chown root:postfix /etc/mail/sqlite/mailserver.dbBuat Password Hash untuk user email
Code:
# membuat password untuk user email
sudo doveadm pw -s SHA512-CRYPT
# Masukan Password email mu (e.g., sayaganteng123)
# Copy hasilnya (diawali {SHA512-CRYPT}...)
# Update ke db sqlite dengan hasil tadi
sudo sqlite3 /etc/mail/sqlite/mailserver.db <<EOF
UPDATE virtual_users SET password = '{SHA512-CRYPT}HASH_PASSWORD_TADI'
WHERE email = 'admin@domainmu.xyz';
.exit
EOFLanjut Setting POSTFIX
Backup dulu Config Aslinya buat jaga - jaga
Code:
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backupSetting postfix
Code:
sudo postconf -e "myhostname = mail.domainmu.xyz"
sudo postconf -e "mydomain = domainmu.xyz"
sudo postconf -e "myorigin = \$mydomain"
sudo postconf -e "inet_interfaces = all"
sudo postconf -e "inet_protocols = ipv4"
sudo postconf -e "mydestination = localhost"
sudo postconf -e "local_recipient_maps ="
sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
sudo postconf -e "virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_virtual_domains.cf"
sudo postconf -e "virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_mailboxes.cf"
sudo postconf -e "virtual_alias_maps = sqlite:/etc/postfix/sqlite_virtual_aliases.cf"Setting sqlite Postfix
Code:
sudo tee /etc/postfix/sqlite_virtual_domains.cf <<EOF
dbpath = /etc/mail/sqlite/mailserver.db
query = SELECT name FROM virtual_domains WHERE name='%s'
EOF
sudo tee /etc/postfix/sqlite_virtual_mailboxes.cf <<EOF
dbpath = /etc/mail/sqlite/mailserver.db
query = SELECT email FROM virtual_users WHERE email='%s'
EOF
sudo tee /etc/postfix/sqlite_virtual_aliases.cf <<EOF
dbpath = /etc/mail/sqlite/mailserver.db
query = SELECT destination FROM virtual_aliases WHERE source='%s'
EOF
# Set permissions
sudo chmod 640 /etc/postfix/sqlite_*.cf
sudo chown root:postfix /etc/postfix/sqlite_*.cfBuat Struktur Folder
Code:
sudo mkdir -p /var/mail/vhosts/domainmu.xyz
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail -m
sudo chown -R vmail:vmail /var/mailLalu Atur Dovecot Main dengan sqlite
Code:
sudo tee /etc/dovecot/dovecot-sqlite.conf.ext <<EOF
driver = sqlite
connect = /etc/mail/sqlite/mailserver.db
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'
user_query = SELECT '/var/mail/vhosts/%d/%n' as home, 'vmail' as uid, 'vmail' as gidsetting Dovecot
Code:
sudo sed -i 's/#disable_plaintext_auth = yes/disable_plaintext_auth = yes/' /etc/dovecot/conf.d/10-auth.conf
sudo sed -i 's/auth_mechanisms = plain/auth_mechanisms = plain login/' /etc/dovecot/conf.d/10-auth.conf
sudo sed -i 's/!include auth-system.conf.ext/#!include auth-system.conf.ext/' /etc/dovecot/conf.d/10-auth.conf
sudo sed -i 's/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/' /etc/dovecot/conf.d/10-auth.confSetting auth Dovecot
Code:
sudo tee /etc/dovecot/conf.d/auth-sql.conf.ext <<EOF
passdb {
driver = sql
args = /etc/dovecot/dovecot-sqlite.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}Setting Lokasi Folder (?) Email
Code:
sudo sed -i 's|^mail_location = .*|mail_location = maildir:/var/mail/vhosts/%d/%n|' /etc/dovecot/conf.d/10-mail.conf
sudo sed -i 's/^mail_privileged_group =.*/mail_privileged_group = mail/' /etc/dovecot/conf.d/10-mail.confjuga Namespaces
Code:
sudo sed -i 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins/' /etc/dovecot/conf.d/10-mail.confsetting protocol (IMAP & POP3)
Code:
sudo sed -i 's/^protocols = .*/protocols = imap pop3 lmtp/' /etc/dovecot/dovecot.confJuga LMTP
Code:
sudo tee /etc/dovecot/conf.d/15-lmtp.conf <<EOF
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
protocol lmtp {
postmaster_address = postmaster@domainmu.xyz
}Setting SSL sementara, Nanti Diganti Ke Letsencrypt SSL Gratis
Code:
sudo mkdir -p /etc/dovecot/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/dovecot/ssl/dovecot.key \
-out /etc/dovecot/ssl/dovecot.crt \
-subj "/CN=mail.domainmu.xyz"
sudo tee -a /etc/dovecot/conf.d/10-ssl.conf <<EOF
ssl = required
ssl_cert = </etc/dovecot/ssl/dovecot.crt
ssl_key = </etc/dovecot/ssl/dovecot.keylalu tambah user vmail ke Group mail
Code:
sudo usermod -aG mail vmail==========================
Lanjut SSL Lets Encrypt
==========================
Hentikan Dulu apache & nginx Buat ngebebasin port 80
Code:
sudo systemctl stop nginx apache2 2>/dev/null || trueJalankan Certbot buat dapetin Cert Lets Encrypt
Code:
sudo certbot certonly --standalone -d mail.neomovie.qzz.io --non-interactive \
--agree-tos --email admin@domainmu.xyzBiar Auto Update Ketika Expired
Code:
sudo mkdir -p /etc/letsencrypt/renewal-hooks/post
sudo tee /etc/letsencrypt/renewal-hooks/post/dovecot-postfix.shatau pake nano buat bikin file tersebut, lalu isi ini
Code:
#!/bin/bash
systemctl restart dovecot postfix
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/dovecot-postfix.shSetting dovecot biar pake Cert Letsencrypt Tadi
Code:
sudo sed -i 's|ssl_cert = .*|ssl_cert = </etc/letsencrypt/live/mail.domainmu.xyz/fullchain.pem|' /etc/dovecot/conf.d/10-ssl.conf
sudo sed -i 's|ssl_key = .*|ssl_key = </etc/letsencrypt/live/mail.domainmu.xyz/privkey.pem|' /etc/dovecot/conf.d/10-ssl.confJuga Posttfixnya
Code:
sudo postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.domainmu.xyz/fullchain.pem"
sudo postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.domainmu.xyz/privkey.pem"
sudo postconf -e "smtpd_use_tls = yes"
sudo postconf -e "smtpd_tls_security_level = may"
sudo postconf -e "smtpd_tls_auth_only = yes"Tambahkan SASL Auth Postfix
Code:
sudo postconf -e "smtpd_sasl_type = dovecot"
sudo postconf -e "smtpd_sasl_path = private/auth"
sudo postconf -e "smtpd_sasl_auth_enable = yes"
sudo postconf -e "smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"Juga Dovecot SASL Auth nya
Code:
sudo tee /etc/dovecot/conf.d/10-master.conf <<EOF
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}Yooooooooo Sudah 90% Perjalanan!!!!
langsung mulai!!
Code:
sudo systemctl restart postfix dovecot
sudo systemctl enable postfix dovecot
sudo systemctl status postfix dovecotKalo pake Firewall, open portnya
Code:
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 143/tcp # IMAP
sudo ufw allow 993/tcp # IMAPS (secure)
sudo ufw allow 110/tcp # POP3
sudo ufw allow 995/tcp # POP3S (secure)
sudo ufw allow 587/tcp # SMTP submission
sudo ufw reloadFinnally, langsung coba login dong
Di settingan mail client mu Seperti Thunderbird / k9-mail atau Mail client lain yang Support SMTP
Code:
Konfigurasikan mail client:
IMAP Server: mail.domainmu.xyz (Port 993, SSL/TLS)
SMTP Server: mail.domainmu.xyz (Port 587, STARTTLS)
Username: admin@domainmu.xyz
Password: PasswordmuPasHASHisiapa?
Authentication: PasswordKalo mau nambah user email,
Konek dulu ke sqlite database nya
sudo sqlite3 /etc/mail/sqlite/mailserver.db
lalu
Code:
INSERT INTO virtual_users (domain_id, email, password)
VALUES (1, 'newuser@domainmu.xy', '{SHA512-CRYPT}YOUR_HASH_buatlagihashnya');dapetin/bikin lagi Hash Password kyk kode diatas sebelume.
Lalu bikinin Lokasi Folder Buat inbox & attachment
Code:
sudo mkdir -p /var/mail/vhosts/domainmu.xyz/newuser
sudo chown -R vmail:vmail /var/mail/vhosts/domainmu.xyz/newuserLalu coba Login
SELESAI. . . . Selamat Mengirim Email
