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 plugins pada direktori /usr/local/haraka/config/ dan tambahkan teks ini dibagian paling bawah
relay
- Edit file plugins pada direktori /usr/local/haraka/config/ dan berikan tanda pagar (#) dibelakang tulisan queue/smtp_forward
#queue/smtp_forward
- Buat file baru dengan nama relay.ini pada direktori /usr/local/haraka/config/ dan isi file tersebut dengan teks berikut
[relay] all=true
- 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
Hi Colamen,
This tutorial is great. I have followed and get this result:
[INFO] [2833FB01-3C88-4CFA-9132-2754FCF3F5D4.1.1] [outbound] Looking up A records for: gmail-smtp-in.l.google.com
[INFO] [2833FB01-3C88-4CFA-9132-2754FCF3F5D4.1.1] [outbound] Attempting to deliver to: 74.125.203.26:25 (0) (0)
[INFO] [-] [core] [outbound] [outbound::25:74.125.203.26:undefined:50] dispense() clients=1 available=0
[INFO] [-] [core] [outbound] acquired socket A16CC3DD-D1BC-4731-A87F-B68B53C30BB1 for outbound::25:74.125.203.26:undefined:50
[INFO] [2833FB01-3C88-4CFA-9132-2754FCF3F5D4.1.1] [outbound] secured verified=true cipher=TLS_AES_256_GCM_SHA384 version=TLSv1.3 cn=mx.google.com organization=”Google LLC” issuer=”Google Trust Services” expires=”May 26 09:44:15 2020 GMT” fingerprint=57:57:7E:80:A4:73:2C:66:FF:13:20:BC:4F:EC:19:57:9C:E7:80:09
[INFO] [2833FB01-3C88-4CFA-9132-2754FCF3F5D4.1.1] [outbound] bouncing mail: 550 5.7.1 [113.176.61.135] The IP you’re using to send mail is not authorized to send email directly to our servers. Please use the SMTP relay at your service provider instead. Learn more at https://support.google.com/mail/?p=NotAuthorizedError p6si16032953plk.111 – gsmtp
[INFO] [-] [core] [outbound] Sending email via params
[INFO] [-] [core] [outbound] Created transaction: 479454A2-97EE-4E67-A4C9-494F9F9E719F
[INFO] [-] [core] [outbound] Processing delivery for domain: voolatech.com
[INFO] [479454A2-97EE-4E67-A4C9-494F9F9E719F.1] [outbound] Looking up A records for: aspmx.l.google.com
[INFO] [479454A2-97EE-4E67-A4C9-494F9F9E719F.1] [outbound] Attempting to deliver to: 108.177.125.26:25 (0) (0)
[INFO] [-] [core] [outbound] [outbound::25:108.177.125.26:undefined:50] dispense() clients=1 available=0
[INFO] [-] [core] [outbound] acquired socket F1A4DA18-1E8B-4239-BD6D-853A3EA88768 for outbound::25:108.177.125.26:undefined:50
[INFO] [479454A2-97EE-4E67-A4C9-494F9F9E719F.1] [outbound] secured verified=true cipher=TLS_AES_256_GCM_SHA384 version=TLSv1.3 cn=mx.google.com organization=”Google LLC” issuer=”Google Trust Services” expires=”May 26 09:44:15 2020 GMT” fingerprint=57:57:7E:80:A4:73:2C:66:FF:13:20:BC:4F:EC:19:57:9C:E7:80:09
[INFO] [479454A2-97EE-4E67-A4C9-494F9F9E719F.1] [outbound] bouncing mail: 550 5.7.1 [113.176.61.135] The IP you’re using to send mail is not authorized to send email directly to our servers. Please use the SMTP relay at your service provider instead. Learn more at https://support.google.com/mail/?p=NotAuthorizedError y12si2855183pjp.81 – gsmtp
Any comment from you please?
Thank you so much.
Clark
Hi Clark,
This are the error message you need to pay attention at :
You need to add IP public that use by your Haraka server to your domain SPF record, so that gmail can trust the email you send from your Haraka server
Best Regards,
Raihan
Thank Raihan,
It is amazing, you reply so quickly. Thank for your help.
Regards,
Clark
Hi Clark,
Sure, it’s happy to help fellow IT Administrator.
Just let me know when you have anymore question.
Best Regards,
Raihan
Hi Colamen,
How can you send email to gmail? You have registered your ip server address to authorize with google?
Thank
Clark
Hi Clark,
It’s easy though. You just need two things, so your email can be recieve by gmail and not recognize as spam. Here are the thing :
Best Regards,
Raihan
Hello,
Thanks for your tutorial, its really helpful and i ran the server , however i’m testing haraka as outbound server , and seems fine but , there is no authentication and even i tried some settings i cannot achieve it and should be for sending server … if you can help out with this and custom headers.
Best regards
Hi Faress,
Can you tell me what is something you cannot achieve when configuring Haraka? Maybe i can help you.
Mas mau tanya, ini saya kok ga bisa kirim email kenapa ya?
Kira2 untuk output sweaks nya kaya gini
asaromi@openSUSElp153:~> swaks -s localhost -t asami.mayuri1@gmail.com -f maromi@gorrywell.com
=== Trying localhost:25…
=== Connected to localhost.
EHLO openSUSElp153
<- 250-localhost Hello Unknown [127.0.0.1]Haraka is at your service.
<- 250-PIPELINING
<- 250-8BITMIME
<- 250-SMTPUTF8
MAIL FROM:
<- 250 sender OK
-> RCPT TO:
<- 250 recipient OK
-> DATA
Date: Tue, 24 May 2022 17:11:46 +0700
-> To: asami.mayuri1@gmail.com
-> From: maromi@gorrywell.com
-> Subject: test Tue, 24 May 2022 17:11:46 +0700
-> Message-Id:
-> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
->
-> .
QUIT
<- 221 localhost closing connection. Have a jolly good day.
=== Connection closed with remote host.
Hi Pak Romi,
Apakah sudah dipastikan bahwa port 25 outgoing server yang digunakan open?
Bisa coba testing menggunakan telnet ke server gmail mas.
Raihan
Hi Raihan,
Saya masih newbie untuk mail server, ketika mengirim testmail saya mendapatkan message
250 Message Queued (0EAE7806-5DDE-4628-BE6D-9FDB3ADDA37F.1)
tetapi tidak terkirim ke email tujuan, apa yang terjadi ?
Hi Mas Ilham,
Apakah sudah dipastikan bahwa port 25 outgoing yang digunakan open?
Bisa coba testing menggunakan telnet ke server gmail mas.
Raihan