|
Cara Mudah & Cepat Membuat server email dengan domain sendiri di VPS (ubuntu/debian/linux) Tutorial ini menggunakan Ubuntu VPS.
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 -y
Jangan 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 mailutils
Ketika 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.db
Buat 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
EOF
Lanjut Setting POSTFIX
Backup dulu Config Aslinya buat jaga - jaga
Code: sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
Setting 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_*.cf
Buat 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/mail
Lalu 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 gid
setting 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.conf
Setting 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.conf
juga Namespaces
Code: sudo sed -i 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins/' /etc/dovecot/conf.d/10-mail.conf
setting protocol (IMAP & POP3)
Code: sudo sed -i 's/^protocols = .*/protocols = imap pop3 lmtp/' /etc/dovecot/dovecot.conf
Juga 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.key
lalu 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 || true
Jalankan Certbot buat dapetin Cert Lets Encrypt
Code: sudo certbot certonly --standalone -d mail.neomovie.qzz.io --non-interactive \
--agree-tos --email admin@domainmu.xyz
Biar Auto Update Ketika Expired
Code: sudo mkdir -p /etc/letsencrypt/renewal-hooks/post
sudo tee /etc/letsencrypt/renewal-hooks/post/dovecot-postfix.sh
atau 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.sh
Setting 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.conf
Juga 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 dovecot
Kalo 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 reload
Finnally, 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: Password
Kalo 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/newuser
Lalu coba Login
SELESAI. . . . Selamat Mengirim Email
|