Tag: relay

  • OpenDKIM, Selector, dan Perbedaan RSA Key Size

    OpenDKIM, Selector, dan Perbedaan RSA Key Size

    OpenDKIM

    OpenDKIM merupakan aplikasi open-source yang digunakan untuk menambahkan tanda tangan digital pada email menggunakan metode DomainKeys Identified Mail (DKIM).

    Tujuannya adalah membantu server penerima memastikan bahwa email telah ditandatangani menggunakan private key yang sesuai dengan domain penandatangan dan bahwa bagian email yang dilindungi tidak mengalami perubahan selama pengiriman.

    OpenDKIM umumnya digunakan bersama mail server seperti Postfix, termasuk pada infrastruktur SMTP Relay dan mail gateway.

    Cara Kerja OpenDKIM

    Secara sederhana, proses DKIM bekerja sebagai berikut:

    1. Email dikirim: Mail server memproses email keluar.
    2. DKIM Signing: OpenDKIM menandatangani email menggunakan private key.
    3. Verifikasi: Server penerima mengambil public key dari DNS untuk memverifikasi tanda tangan.
    4. Hasil: Jika tanda tangan valid, pemeriksaan DKIM menghasilkan status pass.

    DKIM membantu memverifikasi keaslian tanda tangan email, tetapi tidak secara otomatis menjamin email bebas dari spam.

    DKIM Selector

    Salah satu komponen penting dalam OpenDKIM adalah selector. Selector merupakan nama yang digunakan untuk mengidentifikasi pasangan private key dan public key dalam sebuah domain.

    Contohnya, domain example.com menggunakan selector bernama mail. Maka DNS record DKIM berada pada:

    mail._domainkey.example.com

    Satu domain dapat memiliki beberapa selector, misalnya:

    • default._domainkey.example.com
    • mail._domainkey.example.com
    • relay._domainkey.example.com

    Dengan beberapa selector, setiap mail server dapat menggunakan pasangan key berbeda tanpa harus menggunakan domain yang berbeda.

    RSA Key Size pada DKIM

    Ketika membuat DKIM key, kita dapat menentukan ukuran RSA key yang digunakan. Beberapa ukuran yang dikenal adalah 512-bit, 1024-bit, 2048-bit, dan 4096-bit. Ukuran ini merupakan panjang RSA key, bukan ukuran selector.

    RSA Key SizeKeterangan
    512-bitTidak aman dan tidak diperbolehkan oleh standar DKIM saat ini
    1024-bitUkuran minimum yang diperbolehkan
    2048-bitDirekomendasikan karena keamanan lebih kuat
    4096-bitLebih besar dan didukung untuk verifikasi, tetapi umumnya tidak diperlukan

    Contoh Membuat DKIM Key 2048-bit

    Pada server yang sudah memiliki OpenDKIM Tools, kita dapat membuat RSA key 2048-bit menggunakan perintah:

    opendkim-genkey -b 2048 -s mail -d example.com

    Keterangan:

    • -b 2048 menentukan ukuran RSA key.
    • -s mail menentukan selector.
    • -d example.com menentukan domain.

    Perintah tersebut menghasilkan dua file:

    • mail.private — private key untuk menandatangani email.
    • mail.txt — berisi DNS TXT record untuk publikasi public key.

    Public key dipublikasikan melalui DNS, sedangkan private key disimpan dan digunakan oleh OpenDKIM.

    Kesimpulan

    OpenDKIM merupakan salah satu solusi untuk menerapkan DKIM signing pada mail server. Dalam konfigurasinya, terdapat dua hal yang perlu dibedakan, yaitu selector sebagai identitas key dan RSA key size sebagai ukuran kunci kriptografi.

    RSA 512-bit sudah tidak memenuhi standar keamanan DKIM saat ini. Sementara itu, RSA 1024-bit masih diperbolehkan sebagai ukuran minimum, tetapi RSA 2048-bit lebih direkomendasikan untuk konfigurasi baru.

    Referensi:

  • Simulasi Error SMTP 451 Temporary Lookup Failure dengan Postfix

    Simulasi Error SMTP 451 Temporary Lookup Failure dengan Postfix

    Error 451 Temporary lookup failure sering muncul di lingkungan produksi dan bikin email nyangkut di antrian dengan status deferred. Supaya paham perilakunya tanpa mengganggu server klien, saya buat lab kecil berisi dua VM Postfix, satu sebagai pengirim dan satu sebagai penerima. Panduan ini mencakup instalasi, pengujian normal, simulasi error 451, lalu pemulihan ke kondisi normal.

    Informasi lab

    PeranHostnameIPOS
    Pengirimsender.lab192.168.14.22Ubuntu 24.04
    Penerimareceiver.lab192.168.14.23Ubuntu 24.04

    Prasyarat: akses root di kedua VM, koneksi internet untuk instalasi paket, dan kedua VM berada di segmen jaringan yang sama.

    1. Persiapan

    Tambahkan entri berikut di /etc/hosts pada kedua server:

    192.168.14.22 sender.lab
    192.168.14.23 receiver.lab

    Set hostname sesuai perannya:

    hostnamectl set-hostname sender.lab

    Pastikan saling terjangkau:

    ping -c 3 receiver.lab

    2. Instalasi Postfix

    Jalankan di kedua server:

    apt update
    apt install postfix mailutils -y

    Saat wizard muncul, pilih Internet Site, lalu isi System mail name dengan sender.lab atau receiver.lab sesuai server.

    Cek status service:

    systemctl status postfix

    Status harus active (running).

    3. Konfigurasi server penerima

    Edit /etc/postfix/main.cf di receiver, pastikan baris berikut ada:

    myhostname = receiver.lab
    mydestination = receiver.lab, localhost.lab, localhost
    inet_interfaces = all
    mynetworks = 127.0.0.0/8, 192.168.14.0/24

    Buat akun lokal sebagai tujuan email:

    adduser user
    systemctl restart postfix

    Verifikasi Postfix listen di port 25:

    ss -tlnp | grep :25

    Output:

    4. Konfigurasi server pengirim

    Secara default Postfix mencari tujuan lewat DNS (smtp_host_lookup = dns), jadi entri /etc/hosts saja tidak cukup. Karena di lab ini tidak ada DNS internal, arahkan langsung ke IP receiver. Edit /etc/postfix/main.cf di sender:

    myhostname = sender.lab
    relayhost = [192.168.50.20]

    Tanda kurung siku [ ] membuat Postfix melewati pencarian MX dan langsung konek ke IP tersebut. Lalu reload:

    systemctl reload postfix

    Uji koneksi SMTP dari sender:

    telnet receiver.lab 25

    Harus muncul banner seperti 220 receiver.lab ESMTP Postfix. Keluar dengan mengetik quit.

    5. Uji pengiriman normal

    Kirim email percobaan dari sender:

    echo "Test kondisi normal" | mail -s "SMTP Test" user@receiver.lab

    Pantau log di sender:

    tail -f /var/log/mail.log

    Output yang benar:

    2026-07-24T07:37:35.394338+00:00 sender postfix/smtp[27206]: 4DD982C6: to=<user@receiver.lab>, relay=192.168.14.23[192.168.14.23]:25, delay=0.09, delays=0.02/0.02/0.03/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 5A88D6AF79)

    Ini jadi baseline sebelum kita rusak sengaja.

    6. Simulasi error 451

    Di server penerima, tambahkan restriction berikut di /etc/postfix/main.cf:

    smtpd_recipient_restrictions =
        check_recipient_access hash:/etc/postfix/recipient_access,
        permit_mynetworks,
        reject_unauth_destination

    Buat file /etc/postfix/recipient_access dengan isi:

    user@receiver.lab 451 4.3.0 Temporary lookup failure

    Format 4NN text di access table membuat Postfix membalas dengan kode dan pesan tersebut. Kode 4.3.0 ditulis eksplisit supaya DSN di sisi pengirim sama persis dengan kasus produksi. Generate database lalu reload:

    postmap /etc/postfix/recipient_access
    systemctl reload postfix

    Catatan: jika postmap gagal karena tipe hash tidak tersedia, cek dengan postconf -m dan ganti ke lmdb.

    7. Uji ulang dan baca log

    Kirim lagi dari sender:

    echo "Test 451" | mail -s "451 test" user@receiver.lab

    Log di sender akan berbunyi:

    2026-07-24T07:53:18.718740+00:00 sender postfix/smtp[27250]: 9CED3332: to=<user@receiver.lab>, relay=192.168.14.23[192.168.14.23]:25, delay=0.09, delays=0.03/0.01/0.03/0.01, dsn=4.3.0, status=deferred (host 192.168.14.23[192.168.14.23] said: 451 4.3.0 <user@receiver.lab>: Recipient address rejected: Temporary lookup failure (in reply to RCPT TO command))

    Cek antrian:

    postqueue -p

    Output

    Email tetap tertahan dan akan dicoba ulang sesuai maximal_queue_lifetime (default 5 hari). Ini yang membedakan error 4xx dari 5xx.

    8. Kembalikan ke kondisi normal

    Kosongkan file access lalu regenerate:

    : > /etc/postfix/recipient_access
    postmap /etc/postfix/recipient_access
    systemctl reload postfix

    Paksa antrian jalan lagi:

    postqueue -f

    Log akan berubah menjadi dsn=2.0.0, status=sent dengan balasan 250 2.0.0 Ok.

    2026-07-24T07:56:01.180149+00:00 sender postfix/qmgr[27194]: 9CED3332: from=<root@sender.lab>, size=317, nrcpt=1 (queue active)
    2026-07-24T07:56:01.258620+00:00 sender postfix/smtp[27271]: 9CED3332: to=<user@receiver.lab>, relay=192.168.14.23[192.168.14.23]:25, delay=163, delays=163/0.03/0.04/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 314AD6AF79)
    2026-07-24T07:56:01.258793+00:00 sender postfix/qmgr[27194]: 9CED3332: removed

    Ringkasan

    SkenarioBalasan SMTPStatus di antrian
    Server penerima normal250 2.0.0 Oksent
    Gangguan sementara di penerima451 4.3.0 Temporary lookup failuredeferred, retry otomatis
    Alamat ditolak permanen550 5.x.xbounced, tidak retry

    Troubleshoot

    GejalaPenyebabSolusi
    Host or domain name not foundSender masih pakai lookup DNSSet relayhost = [IP_RECEIVER] atau smtp_host_lookup = native, dns
    Connection refused port 25inet_interfaces = loopback-only atau firewallSet inet_interfaces = all, buka port 25
    Relay access deniedDomain tujuan tidak ada di mydestinationTambahkan receiver.lab ke mydestination
    554 Too many hopsMail loop antar serverPeriksa relayhost, mydestination, dan transport_maps
    /var/log/mail.log kosongrsyslog tidak terpasangGunakan journalctl -u postfix -f

    Lab ini cukup ringan tapi mencakup pola error yang paling sering ditemui saat troubleshooting Postfix, Zimbra, Carbonio, maupun SMTP relay. Semoga bermanfaat.

    Referensi

  • Install dan Konfigurasi Postfix di Rocky 9

    Install dan Konfigurasi Postfix di Rocky 9

    Pada panduan ini saya akan membahas instalasi Postfix di Rocky Linux 9 dari kondisi fresh install. Targetnya dua, pertama Postfix bisa kirim email antar user lokal, dan lalu ditingkatkan supaya bisa mengirim ke alamat Gmail menggunakan relay smtp.gmail.com. Namun untuk hari ini hanya sampai di antar user lokal saja. Semua perintah dijalankan sebagai root.

    Informasi Lab

    ItemNilai
    OSRocky Linux 9
    Hostnamemail.rafi.lab
    Domainrafi.lab
    IP Address192.168.14.4/24
    KebutuhanAkses root, internet

    Sesuaikan hostname dan domain dengan lingkungan kalian.

    1. Persiapan Server

    Set hostname dan tambahkan mapping di /etc/hosts:

    hostnamectl set-hostname mail.rafi.lab
    echo "192.168.14.4 mail.rafi.lab mail" >> /etc/hosts

    Update sistem:

    dnf update -y

    (Opsional) Buka port SMTP di firewalld supaya klien lain di jaringan lokal bisa mengirim lewat server ini:

    firewall-cmd --add-service=smtp --permanent
    firewall-cmd --reload

    SELinux biarkan enforcing, Postfix dengan konfigurasi standar tidak bermasalah.

    2. Instalasi Postfix

    Install Postfix beserta s-nail (pengganti mailx di Rocky 9, menyediakan perintah mail untuk pengujian) dan telnet:

    dnf install postfix s-nail telnet -y
    systemctl enable --now postfix

    Verifikasi:

    systemctl status postfix
    postconf mail_version

    Status service harus active(running).

    3. Konfigurasi Dasar Postfix

    Ubah parameter utama di /etc/postfix/main.cf. Cara paling aman menggunakan postconf:

    postconf -e 'myhostname = mail.rafi.lab'
    postconf -e 'mydomain = rafi.lab'
    postconf -e 'myorigin = $mydomain'
    postconf -e 'inet_interfaces = all'
    postconf -e 'inet_protocols = ipv4'
    postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain'
    postconf -e 'mynetworks = 127.0.0.0/8, 192.168.14.0/24'
    postconf -e 'home_mailbox = Maildir/'

    Penjelasan singkat:

    • inet_interfaces = all membuat Postfix listen di semua interface, bukan hanya localhost
    • mydestination menentukan domain yang diterima sebagai tujuan lokal
    • mynetworks menentukan subnet yang boleh relay lewat server ini
    • home_mailbox = Maildir/ menyimpan email di direktori ~/Maildir tiap user

    Cek sintaks lalu restart:

    postfix check
    systemctl restart postfix

    postfix check tidak menampilkan output apa pun jika konfigurasi benar.

    4. Uji Kirim Sesama User Lokal

    Buat dua user untuk pengujian:

    useradd budi
    useradd andi

    Kirim email dari budi ke andi:

    su - budi -c 'echo "Halo Andi, ini tes email lokal" | mail -s "Tes Lokal" andi@rafi.lab'

    Cek email masuk di Maildir milik andi:

    ls /home/andi/Maildir/new/
    cat /home/andi/Maildir/new/*

    Cek log pengiriman:

    tail /var/log/maillog

    Opsional, kalian juga bisa tes lewat sesi SMTP manual:

    telnet 192.168.14.4 25

    Lalu ketik perintah SMTP berikut satu per satu (enter):

    ehlo rafi.lab
    mail from: budi@rafi.lab
    rcpt to: andi@rafi.lab
    data
    Subject: Tes via telnet
    
    Halo, ini tes lewat telnet
    .
    quit

    Sampai tahap ini Postfix sudah berfungsi untuk pengiriman antar user lokal.

  • Bagian 1: Mengenal SMTP Relay

    Bagian 1: Mengenal SMTP Relay

    Pada minggu-minggu terakhir, saya mulai cukup banyak bersinggungan dengan layanan SMTP Relay, seperti pengaturan DNS seperti SPF, DKIM, dan DMARC. Dari situ saya menyadari bahwa banyak istilah dan konsep yang selama ini sering digunakan ternyata belum benar-benar saya pahami secara menyeluruh.

    Karena itu, saya memutuskan untuk membuat sebuah seri tulisan yang membahas dasar-dasar SMTP dan SMTP Relay. Tujuannya bukan hanya sebagai dokumentasi pembelajaran pribadi, tetapi juga sebagai referensi bagi siapa saja yang ingin memahami bagaimana proses pengiriman email bekerja, peran server relay, serta teknologi pendukung seperti SPF, DKIM, DMARC, MX Record, hingga alur komunikasi antar mail server. Saya berharap melalui seri ini, pembahasan dapat disampaikan secara bertahap, dimulai dari konsep yang paling mendasar hingga implementasi yang lebih kompleks.

    Apa itu SMTP, sebenarnya?

    SMTP adalah singkatan dari Simple Mail Transfer Protocol. Perhatikan kata pertamanya: Simple. Protokol ini dirancang pada tahun 1982 (RFC 821, lalu diperbarui oleh RFC 5321) dengan filosofi yang sederhana — bagaimana caranya memindahkan sebuah pesan teks dari satu komputer ke komputer lain secara andal.

    Analogi yang paling sering saya pakai: SMTP itu seperti kantor pos dan tukang pos, bukan seperti kotak surat di rumah kalian. Ini penting, jadi saya tegaskan:

    • SMTP bertugas mengirim dan meneruskan email antar server. Ini pekerjaan “tukang pos”.
    • IMAP dan POP3 bertugas agar kalian bisa mengambil dan membaca email dari kotak surat kalian. Ini pekerjaan “membuka kotak surat di rumah”.

    Salah satu kesalahpahaman paling umum yang saya temui: orang mengira SMTP itu untuk membaca email. Bukan. SMTP hanya peduli pada satu hal — memindahkan surat ke tujuan berikutnya.

    Mengenal: MUA, MTA, MDA

    Sebelum masuk ke kata “relay”, kalian wajib kenal tiga singkatan ini. Saya akan pakai istilah-istilah ini terus sepanjang seri, jadi hafalkan baik-baik.

    IstilahKepanjanganPeranContoh nyata
    MUAMail User AgentAplikasi yang kalian pakai untuk menulis & membaca emailOutlook, Thunderbird, Gmail di browser
    MTAMail Transfer AgentServer yang mengirim & meneruskan email antar serverPostfix, Exim, Sendmail
    MDAMail Delivery AgentKomponen yang menaruh email ke kotak surat penerimaDovecot, procmail

    Alur singkatnya begini: kalian menulis email di MUA, MUA menyerahkannya ke MTA, MTA mengoper email itu melewati internet ke MTA lain, lalu di ujung sana MDA menaruhnya ke inbox penerima. Server relay yang akan saya urus (dan yang jadi bintang seri ini) hidup di lapisan MTA.

    Lalu, apa itu “Relay”?

    Nah, sekarang kata kuncinya. Relay dalam konteks email berarti meneruskan email dari satu titik ke titik lain, di mana server yang meneruskan bukanlah pengirim asli maupun penerima akhir.

    Bayangkan estafet lari. Pelari pertama (pengirim) tidak berlari sampai garis finish. Ia memberikan tongkat ke pelari kedua, yang memberikannya lagi ke pelari berikutnya, sampai akhirnya tongkat mencapai finish (penerima). SMTP relay adalah pelari di tengah — ia menerima tongkat (email) lalu meneruskannya ke tujuan berikutnya.

    Kenapa perlu perantara? Kenapa email tidak langsung terbang dari komputer kalian ke server tujuan? Beberapa alasan:

    1. Sentralisasi & kontrol. Perusahaan ingin semua email keluar lewat satu pintu agar bisa dipantau, dicatat, dan diamankan.
    2. Reputasi IP. Server tujuan (misalnya Gmail) menilai email dari reputasi alamat IP pengirim. Mengirim lewat relay dengan IP bereputasi baik jauh lebih mungkin masuk inbox ketimbang dari IP rumahan.
    3. Aplikasi yang tidak mau repot. Aplikasi web, printer, perangkat IoT — mereka tidak mau mengurus antrian, retry, dan enkripsi. Mereka cukup “menitipkan” email ke relay, lalu relay yang mengurus sisanya.
    4. Batasan ISP. Banyak penyedia internet memblokir port 25 dari koneksi rumahan untuk mencegah spam, sehingga mengirim langsung sering kali mustahil.

    Dua wajah SMTP relay

    Ini bagian yang sering bikin bingung pemula, jadi saya pisahkan dengan jelas. Ada dua konteks besar ketika orang menyebut “relay”:

    • Relay sebagai layanan titip-kirim (smarthost). Server aplikasi kalian tidak mengirim langsung ke internet, melainkan menyerahkan semua email ke satu relay tepercaya (disebut smarthost). Relay inilah yang berhubungan dengan dunia luar. Inilah pola yang paling umum di lingkungan korporat.
    • Open relay — dan kenapa ini mimpi buruk. Di masa lalu, banyak server mau meneruskan email dari siapa saja ke siapa saja. Ini disebut open relay. Para spammer menyalahgunakannya besar-besaran untuk menyemburkan jutaan email sampah. Hari ini, open relay adalah dosa besar dalam administrasi email. Server kalian akan langsung masuk daftar hitam (blacklist) global dalam hitungan jam. Salah satu tugas utama saya nanti — dan tema besar di bagian ke-5 seri ini — adalah memastikan relay kita tertutup rapat dan hanya mau melayani pihak yang berwenang.

    Saya tekankan sekali lagi karena ini krusial: relay yang baik itu selektif. Ia tahu persis siapa yang boleh menitip email lewat dirinya, dan menolak semua yang lain.

    Kapan kalian butuh SMTP relay?

    Supaya konkret, ini beberapa skenario nyata di mana relay jadi jawaban:

    • Aplikasi e-commerce kalian perlu mengirim ribuan email “pesanan diterima” per hari, dan kalian ingin semuanya terkirim rapi dengan reputasi terjaga.
    • Kantor punya banyak aplikasi internal (HR, monitoring, printer) yang perlu kirim notifikasi, dan kalian ingin satu titik keluar yang terkontrol.
    • Kalian punya banyak server yang tersebar, tapi ingin semua email keluar melalui satu IP yang sudah dikonfigurasi SPF, DKIM, dan DMARC-nya dengan benar (tenang, semua istilah ini kita bedah tuntas di bagian ke-4).

    Peta perjalanan seri ini

    Karena ini seri berkelanjutan, saya ingin kalian tahu ke mana kita akan pergi. Anggap ini peta perjalanan kita:

    1. Bagian 1 (yang sedang kalian baca): Fondasi — apa itu SMTP dan relay.
    2. Bagian 2: Anatomi perjalanan sebuah email, percakapan SMTP baris demi baris, port, dan istilah DNS seperti MX record.
    3. Bagian 3: Oprek-oprek, membangun relay pertama dengan Postfix dari nol.
    4. Bagian 4: Keamanan & deliverability — TLS, autentikasi SASL, SPF, DKIM, DMARC.
    5. Bagian 5: Menjaga relay tetap sehat — anti-spam, rate limiting, mencegah open relay, dan membaca log saat ada masalah.
    6. Bagian 6: Level produksi — high availability, manajemen antrian, dan monitoring.

    Penutup

    Sampai sini, saya harap gambaran besarnya sudah terbentuk di kepala kalian: SMTP adalah bahasa yang dipakai server email untuk berbicara, dan relay adalah peran perantara yang meneruskan email dengan penuh tanggung jawab.

    Di bagian berikutnya, kita akan menyelami sesuatu yang menurut saya paling seru — kita akan “menguping” percakapan asli antara dua server SMTP, baris demi baris, sampai kalian bisa membaca dan bahkan mengetiknya sendiri dengan tangan. Sampai jumpa di Bagian 2.