Sendmail Menggunakan Relayhost Luar

Sunday, March 29, 2015

Situasi: Perlu hantar e-mail kepada 3 domain yang berlainan. Gmail (google), MIMOS (syarikat) dan KPDNKK (kerajaan). Ketiga-tiga tempat ini mempunyai cara berbeza dalam menangani email yang sampai kepada mereka.
OS: Centos
Lokasi Server: Bangunan/Infra kpdnkk
Relayhost: mail.isp.mailgov (bukan kpdnkk), ataupun guna IP mail server. Pilih salah satu.

Install Sendmail

pastikan sudah ada sendmail atau belum

 #service sendmail status  

Jika tiada, install sendmail.
 #yum install sendmail sendmail-cf  

Cari lokasi fail sendmail.mc, mungkin dalam folder /etc/mail/
 #updatedb  
 #locate sendmail.mc  

Edit fail sendmail.mc
 #vi sendmail.mc  

Terdapat 2 bahagian perlu diubah. Smart_host dan masquerade_as dnl define(`SMART_HOST', `') dnl MASQUERADE_AS(`mykiragst.kpdnkk.gov.my')dnl edit menjadi
 define(`SMART_HOST', `mail.isp.mailgov')  
 MASQUERADE_AS(`mykiragst.kpdnkk.gov.my')dnl  

di mana dnl sama seperti comment. Buang komen dan masukkan value. Kemudian, running make. Ia akan cipta file sendmail.cf.
 #make  
 atau  
 #/etc/mail/make  

sendmail.cf ini adalah file configuration untuk email. Tidak boleh diedit secara terus. Perlu melalui sendmail.mc dan compile. Check fail sendmail.cf, adakah smart_host point ke mail relay server? Jika ya, restart service sendmail
 #service sendmail restart  

Cuba hantar e-mel menggunakan command line.
 #mail firdaus@gmail.com<ENTER>  
 Subject: Test Sendmail<ENTER>  
 Ini adalah email testing <ENTER>  
 .<ENTER>  
 <ENTER>  

Jika tidak mahu guna titik dan ENTER, boleh guna Ctrl+D untuk complete and send. Pastikan email telah dihantar ke gmail. Kalau tak dapat emel, mintak kpdnkk allowkan ip apps server (OS Centos ini) di mail relay server.

3 E-mail berlaian host
Email dihantar kepada 3 tempat berlainan, contoh: firdaus@gmail.com, firdaus@mimos.my, pegawai@kpdnkk.gov.my

Keputusan: Gmail berjaya, mimos dan kpdnkk tidak berjaya.

Lihat pada email log file.
 #tail -f /var/log/maillog  
1:  Mar 18 17:24:44 mimos-app postfix/smtp[1493]: B038441B38: to=<pegawai@kpdnkk.gov.my>, relay=none, delay=55482, delays=55482/0.01/0.04/0, dsn=4.4.1, status=deferred (connect to kpdnkk.gov.my[10.23.150.16]:25: Connection refused)  
2:  Mar 18 17:25:31 mimos-app postfix/smtp[1492]: E570442076: to=<firdaus@mimos.my>, relay=dexter.mimos.my[202.45.138.110]:25, delay=1529, delays=1482/0.02/47/0.12, dsn=4.1.8, status=deferred (host doctors.mimos.my[202.45.138.110] said: 450 4.1.8 <root@mimos-app.localdomain>: Sender address rejected: MX or A record not found (in reply to RCPT TO command))  
3:  Mar 18 17:22:15 mimos-app postfix/smtp[1324]: 5FAE4420B7: to=<firdaus@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.130.26]:25, delay=2.1, delays=0.06/0.01/0.73/1.3, dsn=2.0.0, status=sent (250 2.0.0 OK 1429348876 my10si2599339pdb.33 - gsmtp)  
gmail status=sent.
kpdnkk status=deferred. Connection refuse.
mimos status= deferred. Sender address rejected.

Mungkin gmail terima sahaja email dari root@mimos-app.localdomain. Manakala mimos akan pastikan domain tersebut dikenalpasti. Jika tidak, e-mail itu akan ditolak. MIMOS mengandaikan ini email spam.

kpdnkk pula tidak berjaya dijumpai, lalu connection refuse. Mungkin isu unqualified domain.

Mungkin hostname/nama server ini @mimos-app.localdomain tidak dikenali diinternet, perlu tukar kepada nama yang valid.

Cuba lihat apa hostname server ini
 #hostname  
 atau  
 #hostname -f  

Untuk tukar hostname sementara waktu, jalankan arahan ini.
hostname NEWNAME
 #hostname mykiragst.kpdnkk.gov.my  

Untuk tukar secara kekal, edit /etc/hosts. Selepas tukar, perlu restart OS.

Contoh: 127.0.0.1 domain.com localhost.localdomain
x.x.x.x domain.com
Di mana x.x.x.x adalah IP

1:  --------------/etc/hosts---------------  
2:  127.0.0.1     mykiragst.kpdnkk.gov.my localhost.localdomain localhost  
3:  10.23.155.135     mykiragst.kpdnkk.gov.my mykiragst  

Apabila send e-mail semula, MIMOS sudah berjaya menerima email dari server ini. Tetapi kpdnkk masih gagal dengan error yang sama. Ini kerana pegawai@kpdnkk.gov.my diconnect relayhost. Jadi, bila sendmail, dia cuba connect to kpdnkk.gov.my[10.23.150.16]:25: Connection refused.

Sepatutnya dia connect ke mail.isp.mailgov. Pada status, to=, relay=none. Maksudnya relay masih tidak disetkan dengan betul. 

Memandangkan dari error menunjukkan postfix kata relay=none, ini menunjukkan setting postfix yang perlu diperbetulkan. 

 # vi /etc/postfix/main.cf  

myhostname = localhost
Tukar kepada:
1:  myhostname = mykiragst.kpdnkk.gov.my  
2:  inet_interfaces = all  
3:  relayhost = mail.isp.mailgov  

Kemudian, restart postfix
  # /etc/init.d/postfix restart  

 Hantar semula e-mail ke pegawai@kpdnkk.gov.my, dan ianya berjaya. Jadi, bila dah disetkan relayhost = mail.isp.mailgov di /etc/postfix/main.cf, dan restart postfix, semua email berjaya dihantar.  
TAMBAHAN

Untuk tengok email que list yang belum dihantar
 # postqueue -p  

flush email2 atau re-send semua e-mail yang deferred (sangkut) sebelum ini.
 # postqueue -f  

 Delete semua email yang tersangkut.
 # postsuper -d ALL  

Delete semua email yang berstatus deferred.
 # postsuper -d ALL deferred  

Untuk lihat apa port yang buka di kpdnkk sebab connection ke port 25 refused.
 host -a kpdnkk.gov.my  
 atau  
 dig kpdnkk.gov.my MX  

Sepatutnya dig ke mail.isp.mailgov, bukan kpdnkk. Walaupun hantar email ke kpdnkk, tetapi dia akan check port 25 di relayhost.