Build load balancer native smtp server dengan postfix dan saslauth
Setelah bisa build native smtp server dengan postfix, dengan autentikasi model submission port 587. selanjutnya kita akan membuat smtp tersebut mempunyai 2 ip public sebagai sendernya.
ada beberapa cara agar kita bisa sending email dengan beberapa ip public: 1. Assign ip public ke dalam smtp server tersebut, lalu binding ip addressnya dan gunakan ip public tersebut ( http://marinovl.blogspot.co.id/2012/09/postfix-how-to-balance-outgoing-emails.html ). Cara ini tidak bisa, karena digital ocean hanya menerapkan floating ip (forwarding). ip public tidak bisa diassign langsung via interface os. 2. Dengan cara relay ke dalam 2 ip public tersebut dari mesin yang lain. Tentunya kita harus menyiapkan 3 buah mesin os. 2 mesin untuk sender, 1 mesin sebagai load balance. masing2 mesin os mempunyai ip public sendiri. untuk konsep load balance, cukup dengan dns round robin saja yang paling mudah.
Persiapan:
- Clone droplets / mesin os yang sudah kita build dari tutorial "build native smtp server dengan support submission authentication"
- Enable masing2 private ip.
setting hostname mesin:
- nws1.abc.co.id , dan cek semua yg berkaitan dengan hostname di postfix nya. set spf dari domain abc.co.id ke ip hostname ini.
- nws2.abc.co.id , dan cek semua yg berkaitan dengan hostname di postfix nya. set spf dari domain abc.co.id ke ip hostname ini.
test 2 droplet tersebut dengan phpmailer , pastikan spf, rdns sudha diset dengan baik. jika 2 mesin tersebut sudah ok maka bisa build untuk load balancernya.
Setup Load Balancer
Load balancer smtp dibuild dengan os ubuntu based debian, dengan enable ip private dan dengan hostname blsmtp.abc.co.id
install smtp server postfix.
apt-get install postfix sasl2-bin
config main.cf
relayhost = [mpl.abc.co.id]:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
relay_domains =
home_mailbox = Maildir/
mydomain = blsmtp.abc.co.id
smtpd_use_tls = yes
smtpd_tls_key_file = /root/abc.co.id/abc.co.id.key
smtpd_tls_cert_file = /root/abc.co.id/chained.crt
smtpd_tls_auth_only=yes
smtp_tls_security_level=may
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
mailbox_size_limit = 256000000
myorigin = abc.co.id
myhostname = abc.co.id
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.15.0.8 128.199.193.151
mydestination = newsletter.abc.co.id, localhost.localdomain, localhost
recipient_delimiter = +
inet_interfaces = all
smtp_tls_CApath = /etc/ssl/certs
smtpd_sasl_local_domain = $myhostname
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
define sasl user password untuk relay ke 2 mesin smtp:
vim /etc/postfix/sasl_passwd
[mpl.abc.co.id]:587 u:p
[10.130.11.5]:587 u@blsmtp.abc.co.id:p
jangan lupa set dns untuk mpl.abc.co.id ke ip private masing2 mesin smtp server.
set master.cf seperti berikut
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_sender=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o broken_sasl_auth_clients=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o broken_sasl_auth_clients=yes
-o content_filter=
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
set /etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN
set /etc/default/saslauthd:
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="shadow"
MECH_OPTIONS="PLAIN LOGIN"
THREADS=5
OPTIONS="-c -m /var/run/saslauthd"
create user via sasl
saslpasswd2 -c -u domain user
untuk check user:
sasldblistusers2
setelah selesai, tinggal test ke smtp load balancer dengan user dan password yg telah dibuat:
vim blsmtp.php
<?php
//require_once('class.phpmailer.php');
require 'PHPMailerAutoload.php';
$imeladdress = "userp@k24.co.id";
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
//$mail->SMTPSecure = ''; // secure transfer enabled REQUIRED for GMail
$mail->Host = "blsmtp.abc.co.id";
$mail->Port = 587; // or 587
$mail->IsHTML(true);
$mail->XMailer = ' ';
//$mail->Username = "user@i.abc.co.id";
//$mail->Username = "oksoft@i.abc.co.id";
$mail->Username = "useren@blsmtp.abc.co.id";
$mail->Password = "p%";
$mail->SetFrom('newsletter@abc.co.id', 'abc.co.id');
//$mail->AddReplyTo('user@abc.co.id', 'abc.co.id');
$mail->Sender="newsletter@abc.co.id";
$mail->Subject = "Inspirasi sehat";
//$mail->addCustomHeader("List-Unsubscribe",'<mailto:unsubscribe@abc.co.id?subject=Unsubscribe>, <http://abc.co.id>');
//$mail->Body = file_get_contents('file.html');
//$mail->Body = file_get_contents('gmail.html');
$mail->Body = "testaja";
$mail->AddAddress("$imeladdress");
if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent";
}
?>
user@it-infra ~/Downloads/PHPMailer-master $ php blsmtp.php
2016-08-23 03:41:18 CLIENT -> SERVER: EHLO it-infra
2016-08-23 03:41:18 CLIENT -> SERVER: STARTTLS
2016-08-23 03:41:18 CLIENT -> SERVER: EHLO it-infra
2016-08-23 03:41:18 CLIENT -> SERVER: AUTH LOGIN
2016-08-23 03:41:18 CLIENT -> SERVER: ZVd1YTVtazI0LmNvLmlk
2016-08-23 03:41:18 CLIENT -> SERVER: OFlzYelI=
2016-08-23 03:41:18 CLIENT -> SERVER: MAIL FROM:<newsletter@abc.co.id>
2016-08-23 03:41:18 CLIENT -> SERVER: RCPT TO:<userp@k24.co.id>
2016-08-23 03:41:19 CLIENT -> SERVER: DATA
2016-08-23 03:41:19 CLIENT -> SERVER: Date: Tue, 23 Aug 2016 11:41:17 +0800
2016-08-23 03:41:19 CLIENT -> SERVER: To: userp@k24.co.id
2016-08-23 03:41:19 CLIENT -> SERVER: From: noreply@abc.co.id
2016-08-23 03:41:19 CLIENT -> SERVER: Subject: inspirasi sehat
2016-08-23 03:41:19 CLIENT -> SERVER: Message-ID: <c3bf4cf888fb9f37e7257d0fc1462bec@it-infra>
2016-08-23 03:41:19 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.13 (https://github.com/PHPMailer/PHPMailer)
2016-08-23 03:41:19 CLIENT -> SERVER: MIME-Version: 1.0
2016-08-23 03:41:19 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1
2016-08-23 03:41:19 CLIENT -> SERVER: Content-Transfer-Encoding: quoted-printable
2016-08-23 03:41:19 CLIENT -> SERVER: 233);"><br></span></div></div></body></html>=0A
2016-08-23 03:41:19 CLIENT -> SERVER: .
2016-08-23 03:41:19 CLIENT -> SERVER: QUIT
hasil email dengan menggunakan random ip address:
terlihat ip menggunakan 128.x.x.180 setelah diterima dari ip internal 10.130.11.5, dimana ip internal ini adalah ip dari blsmtp.abc.co.id (mesin load balancer).
terlihat ip address menggunakan 188.x.x.205 setelah diterima dari ip internal 10.130.11.5, dimana ip internal ini adalah ip dari blsmtp.abc.co.id (mesin load balancer)
selesai.