Setup SMTP Haraka di Ubuntu 18.04

Akhir tahun ini, saya mendapatkan tantangan baru untuk mempelajari salah satu lightweight SMTP engine, yaitu Haraka. Belum pernah dengar? Sama, saya juga belum pernah πŸ˜€ (Baca : About Haraka).

Engine SMTP Haraka, biasanya digunakan sebagai antispam incoming email bukan sebagai SMTP outgoing, tetapi tidak menutup kemungkinan SMTP Haraka digunakan untuk outgoing email.

SMTP Haraka merupakan engine yang berjalan diatas Node JS. Node JS sendiri bisa berjalan diatas sistem operasi Windows, Linux maupun MacOS. Jadi pada dasarnya SMTP Haraka bisa diinstall diatas Windows, Linux ataupun MacOS dengan Node JS yang sudah terinstal.

Sayangnya, instalasi Haraka ini tidak semudah yang saya bayangkan. Error selalu menjumpai saya saat melakukan instalasi πŸ˜€ . Walaupun gagal terus saya tidak menyerah, hanya saja “hampir” menyerah πŸ˜€ .

Saya sempat mencari di Google search dengan kata kunci “How to install Haraka in Ubuntu 18.04”, “Cara Install Haraka in Ubuntu 18.04” (Kebetulan saya diminta untuk install Haraka diatas sistem operasi Ubuntu 18.04), tapi sayangnya semua tutorial yang saya ikuti tetap menuntun saya menuju kegagalan πŸ˜€ .

Setelah saya cari-cari kembali, ternyata Haraka memiliki halaman Github yang berisi orang-orang yang menggunakan Haraka dan mengalami kendala dalam penggunaannya (Github Haraka). Betapa beruntungnya saya, saat menemukan Dockerfile Haraka (Dockerfile = File untuk build Docker image), dengan Dockerfile ini teman-teman bisa langsung deploy container Haraka diatas Docker tanpa harus instalasi dari awal.

Dari Dockerfile yang saya dapatkan di github, saya coba bandingkan Dockerfile tersebut dengan instalasi yang sudah berkali-kali saya lakukan dan selalu gagal. Dan jika dilihat dari hasil perbandingan Dockerfile dengan instalasi yang saya lakukan, ternyata yang membuat saya gagal adalah dependencies yang belum di install. Selain itu, Dockerfile tersebut juga bukan menggunakan sistem operasi Ubuntu 18.04, melainkan sistem operasiΒ  Linux Phusion, yang mungkin bisa berpotensi masalah ataupun tidak bisa diinstal sama sekali jika saya coba instal Haraka diatas Ubuntu 18.04, tapi apa salahnya mencoba. Setelah saya coba instal Haraka diatas Ubuntu 18.04 dengan mengacu pada Dockerfile tersebut, alhamdulillah bisa πŸ˜€ .

Berikut langkah-langkah untuk instalasi Haraka diatas sistem operasi Ubuntu 18.04.

Persiapan Instalasi

  • Siapkan Linux Ubuntu versi 18.04
  • Koneksi Internet
  • Outgoing Port 25 (Opsional untuk Uji Coba Kirim Email). Pastikan server ubuntu yang teman-teman gunakan port 25 outgoingnya open, karena akan digunakan untuk uji coba kirim email ke gmail.com. Untuk memastikan outgoing port 25 open, teman-teman bisa menjalankan perintah berikut pada server Ubuntu
    # telnet gmail-smtp-in.l.google.com 25
    Trying 74.125.200.26...
    Connected to gmail-smtp-in.l.google.com.
    Escape character is '^]'.
    220 mx.google.com ESMTP i190si49481196pgc.338 - gsmtp

    Pastikan teman-teman mendapatkan jawaban dari MX record gmail.com, 220 mx.google.com ESMTP i190si49481196pgc.338 – gsmtp. Jika teman-teman stuck di bagian Trying xx.xx.xx.xx… berarti outgoing port 25 server Ubuntu tidak open dan tidak bisa digunakan untuk terima kirim email secara langsung. Hal ini biasa terjadi apabila teman-teman menggunakan provider internet rumahan, karena defaultnya provider internet rumahan memberikan blocking terhadap port 25. Salah satu solusi atas masalah tersebut adalah menggunakan server Ubuntu pada VPS yang umumnya tidak terdapat blocking port 25.

  • Domain asli yang sudah dikenali oleh internet

Instalasi Dependencies & Node JS

  • Instalasi dependencies dengan perintah berikut
    #apt-get update -y
    #apt-get install g++ make git curl sudo screen -y
  • Instalasi Node JS dengan perintah berikut
    #curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
    #apt-get install nodejs -y
  • Cek versi Node JS dengan perintah berikut
    #nodejs -v
    v12.14.0

Instalasi Haraka

  • Salin file instalasi Haraka yang ada di Github Haraka ke server Ubuntu dengan perintah berikut. Disini saya memilih direktori /opt/ sebagai lokasi file-file instalasi Haraka, pemilihan direktori ini tidak native di /opt/ tetapi bisa di direktori manapun.
    #cd /opt/
    #git clone https://github.com/haraka/Haraka.git
  • Cek file instalasi Haraka dengan perintah berikut
    #ls Haraka/
    CONTRIBUTING.md  Plugins.md    attachment_stream.js  config.js      docs          http            mailheader.js     plugins     server.js       tls_socket.js
    Changes.md       README.md     bin                   connection.js  haraka.js     line_socket.js  messagestream.js  plugins.js  smtp_client.js  transaction.js
    Dockerfile       TODO          chunkemitter.js       contrib        haraka.sh     logger.js       outbound          rfc1869.js  spf.js
    LICENSE          appveyor.yml  config                dkim.js        host_pool.js  mailbody.js     package.json      run_tests   tests
  • Mulai proses instalasi Haraka dengan perintah berikut dan pastikan tidak ada error
    #cd /opt/Haraka/
    #npm install -g Haraka --unsafe
    #haraka -i /usr/local/haraka
    create: /usr/local/haraka
    create: /usr/local/haraka/plugins
    create: /usr/local/haraka/docs
    create: /usr/local/haraka/config
    create: /usr/local/haraka/config/smtp.ini
    create: /usr/local/haraka/config/log.ini
    create: /usr/local/haraka/config/plugins
    create: /usr/local/haraka/config/dkim
    create: /usr/local/haraka/config/dkim/dkim_key_gen.sh
  • Salin file penunjang yaitu host_list dan plugins Haraka ke direktori /usr/local/haraka/config dengan perintah berikut
    #cp /opt/Haraka/config/host_list /usr/local/haraka/config/host_list
    #cp /opt/Haraka/config/plugins /usr/local/haraka/config/plugins
  • Edit file /usr/local/haraka/config/plugins dan uncomment bagian queue/smtp_forward pada bagian terbawah file plugins
  • Tambahkan domain penerima untuk mengirim email uji coba. Dalam hal ini saya akan mengirim ke gmail.com. Edit file /usr/local/haraka/config/host_list dengan editor nano vim atau yang lainnya dan tambahkan teks gmail.com pada baris akhir
    # add hosts in here we want to accept mail for
    haraka.local
    gmail.com
  • Buat file baru dengan nama me pada direktori /usr/local/haraka/config/ dengan isi hostname server haraka, dalam hal ini haraka.colamen.id
    haraka.colamen.id
  • Cek Haraka dengan perintah berikut
    #cd /usr/local/haraka/
    #npm install
    npm notice created a lockfile as package-lock.json. You should commit this file.
    npm WARN haraka_local@0.0.1 No repository field.
    
    up to date in 0.691s
    found 0 vulnerabilitie
  • Menyalin file service Haraka ke direktori /etc/service/haraka yang akan digunakan untuk menjalankan service Haraka dengan perintah berikut
    #mkdir /etc/service
    #mkdir /etc/service/haraka
    #cp /opt/Haraka/haraka.sh /etc/service/haraka/run
  • Salin script untuk menjalankan Haraka

    #cp /opt/Haraka/contrib/haraka.service /etc/systemd/system/
    #sed "s~ExecStart=/usr/bin/haraka -c /path/to/your/config~ExecStart=/usr/bin/haraka -c /usr/local/haraka~g" -i  /etc/systemd/system/haraka.service
  • Start service haraka dengan perintah berikut
    #systemctl start haraka
    #systemctl status haraka
    haraka.service - Haraka MTA
    Loaded: loaded (/etc/systemd/system/haraka.service; disabled; vendor preset: enabled)
    Active: active (running) since Fri 2020-01-17 15:28:59 WIB; 5s ago
    Main PID: 2393 (node)
    Tasks: 18 (limit: 2318)
    CGroup: /system.slice/haraka.service
    β”œβ”€2393 node /usr/bin/haraka -c /usr/local/haraka/
    └─2404 /usr/bin/node /usr/lib/node_modules/Haraka/haraka.js -c /usr/local/haraka/
    

Uji Coba Kirim Email

  • Testing koneksi via localhost untuk memastikan SMTP Haraka bekerja sebagaimana mestinya dengan perintah berikut
    #telnet localhost 25
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 haraka ESMTP Haraka/2.8.25 ready
    ^]quit
    
    telnet> quit
    Connection closed.
  • Testing kirim email ke gmail.com menggunakan swaks dengan perintah berikut
    #apt-get install swaks -y
    #swaks -s localhost -t muhammadraihan519@gmail.com -f raihan@colamen.id
    === Trying localhost:25...
    === Connected to localhost.
    <-  220 6dda887e7bea ESMTP Haraka/2.8.25 ready
     -> EHLO haraka.colamen.id
    <-  250-6dda887e7bea Hello [172.17.0.1]Haraka is at your service.
    <-  250-PIPELINING
    <-  250-8BITMIME
    <-  250-SMTPUTF8
    <-  250 SIZE 26214400
     -> MAIL FROM:<raihan@colamen.id>
    <-  250 sender <raihan@colamen.id> OK
     -> RCPT TO:<muhammadraihan519@gmail.com>
    <-  250 recipient <muhammadraihan519@gmail.com> OK
     -> DATA
    <-  354 go ahead, make my day
     -> Date: Fri, 03 Jan 2020 15:28:08 +0700
     -> To: muhammadraihan519@gmail.com
     -> From: raihan@colamen.id
     -> Subject: test Fri, 03 Jan 2020 15:28:08 +0700
     -> Message-Id: <20200103152808.006659@vpn.colamen.id>
     -> X-Mailer: swaks v20170101.0 jetmore.org/john/code/swaks/
     -> 
     -> This is a test mailing
     -> 
     -> .
    <-  250 2.0.0 Ok: queued as B901D187DA06 (A4118BA3-EF18-4F68-888B-7327962EB760.1)
     -> QUIT
    <-  221 6dda887e7bea closing connection. Have a jolly good day.
    === Connection closed with remote host.
  • Cek inbox gmail.com

Leave a Reply

Your email address will not be published. Required fields are marked *