Tuesday, April 3, 2012

လာျပန္ျပီ Spam ေတြ


# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!' | postsuper -d -

မေန႕က ထမင္းစားေနတုန္း ၊ Mail server ၾကီးက respond ေႏွးလို႕တဲ့ ။ ဒါကပုံမွန္လိုျဖစ္ေနလို႕ က်ေနာ္လည္း သိပ္ေတာင္ ဂ႐ုမစိုက္မိဘူး။ Mail Server က dedicated လည္းမဟုတ္ ။ ဒီ Server ေပၚမွာ Website 200 ေက်ာ္ ၊ Database 100 ေက်ာ္ ၊ DNS server အပါအဝင္ တျခား service ေတြကရွိေသးတယ္။ Mail Server က Postfix သုံးျပီး Domain 200 ေက်ာ္အတြက္ Mailbox 3000 ေလာက္ရွိတယ္။ Server က အေဟာင္း၊ ေရွ႕မွာ IPS ေလာက္မဟုတ္ရင္ေတာင္ spam filter ေကာင္းေကာင္းခံဖို႕ ေျပာတာ သုံးႏွစ္ေလာက္ရွိျပီ ။ ဒီတိုင္းပဲ ။ Website ေတြ ဘာျဖစ္ျဖစ္က က်ေနာ္တို႕ ဂ႐ုမစိုက္လို႕ရေပမယ့္ spam ဝင္လို႕ Server MTA နဲ႕ Spamd က ေလးလာရင္ ၊ mail delivery ေႏွးလာရင္ က်ေနာ္တို႕ ဖုန္းေတြ အဆက္မျပတ္ျမည္ပါျပီ ။ Server ကလည္း သိပ္ေကာင္းလွတာမဟုတ္ေတာ့ Mail Queue ထဲမွာ သုံးေထာင္ေလာက္ရွိရင္ စေလးလာေလ့ရွိပါတယ္။ ငါးေထာင္ေလာက္ဆို ေဘးခ်င္းကပ္ပို႕ရင္ေတာင္ ဆယ္မိနစ္ေလာက္ေနမွေရာက္တယ္။ Server ေပၚမွာက Opensource Spam filter တစ္မ်ိဳးပဲရွိတာမို႕ သိပ္ handle မလုပ္ႏိုင္ပါဘူး။ သူကလည္း 60% efficiency ေလာက္ပဲရွိတယ္ထင္တယ္။ ဘယ္ေတာ့မွ Spam ကိုႏိုင္တယ္လို႕မရွိဘူး။ ဒါမ်ိဳးက ျဖစ္ေနၾကမို႕လို႕  မေန႕က ဖုန္းေတြလာေတာ့ ေအးေဆးပဲ ။ ထမင္းစားေနလို႕ ျပီးရင္ ၾကည့္လိုက္မယ္လို႕ ေျပာလိုက္တယ္ ။

ရုံးျပန္ေရာက္ေတာ့လည္း က်ေနာ္က အလုပ္ထြက္ေတာ့မယ့္လူမို႕လို႕ ေတာ္႐ံု က်ေနာ္ ဝင္မပါပါဘူး။ က်ေနာ္ေနရာရဲ့ replacement အစ္ကိုၾကီးကလည္း ဒီေန႕ off ပါတယ္။ အငယ္တစ္ေယာက္ပဲရွိတယ္။ ဒါေပမဲ့ သူက က်ေနာ္စီက ဒီ hosting service ေတြကို handover လုပ္ယူထားရတဲ့ သူ ၊ ေနာက္ျပီး သူက Redhat certified System Administrator ။ အဟဲ ။ သူ မသိရင္ေတာင္ သူကသင္ရင္ သိပ္မၾကိဳက္ဖူး။ သူ႕ကိုပဲ Mail Service မွာ spam ဝင္တယ္ထင္တယ္ ၾကည့္လိုက္အုန္းလို႕ေျပာလိုက္မိတယ္။ Spam ဝင္ရင္ mailq မွာ deferred ေတြ ဘယ္လို ဖ်က္ဆိုတာေလာက္ေတာ့ သူ႕ကို ျပထားဖူးတယ္။ သူကလည္း CD drive ထဲသာ DVD ထဲ့ျပီး ဒီ server က boot မတက္ဘူးေျပာရင္ေျပာတာ၊ ဒါမ်ိဳးခိုင္းရင္ သူသိတယ္ ဆိုတာၾကီးပဲ။ လူေရွ႕မွာ သိပ္သင္လို႕ မရဘူး။ သူက က်ေနာ့ထက္ အသက္ေရာ လုပ္သက္ေရာၾကီးပါတယ္။ ဘာေတြလုပ္ေနခဲ့လည္းေတာ့ သိပ္မေသခ်ာဘူး။

သုံးနာရီေလာက္ အထိ mail send / receive ေႏွးေနေသးတာ က်ေနာ္သိပါတယ္။ ေရာက္လား မေရာက္လားသာ မသိတာ ။ ဒါေပမဲ့ accountability အတြက္ production server ေတြကို က်ေနာ္ login မဝင္ေတာ့ပါဘူး။ ဒါက်ေနာ့ ေနာက္ဆုံး အပတ္ေလ။ သူလည္း ၾကိဳးစားပန္းစားလုပ္ေနေတာ့ အဆင္ေျပလား သြားေမးလိုက္ေသးတယ္။ ေနာက္ေတာ့ GM က ဖုန္းဆက္တယ္။ ၾကည့္လိုက္ပါတဲ့ ၊ ငါ့ဖုန္း ၾကာရင္ explode ျဖစ္ေတာ့မယ္တဲ့။ Reseller ေတြကလည္း တဂြမ္ဂြမ္ဆက္ေနျပီ ။ ျဖစ္ေနတာ သုံးနာရီေလာက္ ရွိသြားျပီကိုး။

Login ဝင္ျပီး အရင္ဆုံး Mail Queue ကိုၾကည့္မိတယ္ ။ လြယ္လြယ္ကူကူ

# mailq | tail

လို႕ ၾကည့္ေတာ့ ေတာ္ေတာ္နဲ႕ return မလာဘူး ။ ေတာ္ေတာ္မ်ားေနလို႕ျဖစ္မယ္ လို႕စဥ္းစားျပီး mailq ပဲ႐ိုက္ၾကည့္လိုက္တယ္ ။ အဲမွာ စေတြ႕တာပဲ ။ ပုံမွန္ ေလးငါးေထာင္ေလာက္ဆိုရင္ mailq က ဆယ္စကၠန့္ေလာက္အတြင္းမွာတင္ ဆုံးပါတယ္။ ေပၚလာတာကလည္း ျမန္လို႕ လိုက္ဖတ္ဖို႕ မမွီပါဘူး။ ဒီတစ္ေခါက္ေတာ့ တစ္မ်က္ႏွာခ်င္း ေျဖးေျဖးခ်င္းေပၚေနတယ္။ ေတာ္ေတာ္ၾကာတဲ့အထိလည္း မျပီးေတာ့ escape လိုက္တယ္ ။ top နဲ႕ၾကည့္ေတာ့ load က postfix-queue process က အျမဲတန္း CPU usage 40% ေလာက္ တက္ေနတယ္။ ဒီေလာက္နဲ႕ေတာ့ mailq က အဲေလာက္ ေႏွးမေနသင့္ဘူးေပါ့။ အခုက mailq ထဲ mail ဘယ္ေလာက္ရွိေနမွန္းကို မသိရေသးဘူး။ 

ခုနက mailq ၾကည့္တုန္းက marketing@blahblah.com ဆိုတဲ့ mail ေတြ အမ်ားၾကီးေတြ႕လိုက္တယ္ ။ ျမင္လိုက္သမွ်အားလုံးနီးပါး သူ့ mail ေတြၾကီးပဲ။  အဲဒီ client ကိုလည္း က်ေနာ္သိပါတယ္။ ေတြ႕ကရာ click ျပီး မၾကာမၾကာ virus ဝင္ေလ့ရွိသလို password ကိုလည္း password တို႕ 123456 တို႕ သိပ္ေပးလြန္းလို႕ မၾကာမၾကာ ျပသနာ တက္ေလ့ရွိတယ္။ သူတို႕ mail address တစ္ခု ျပသနာျဖစ္ျပန္တာလား၊ သူတို႕ပဲ mail advertisement ကို စြတ္လုပ္ေနသလားမသိဘူး။ Maillog မွာ သြားရွာၾကည့္ေတာ့ ဒီ mail address marketing@blahblah.com ဆိုျပီး IP အစုံကေန authenticate လုပ္ထားတာေတြ႕လိုက္တယ္။ သြားျပီဆိုတာ ေသခ်ာပါတယ္။ သူတို႕ကို ဖုန္းဆက္အေၾကာင္းၾကားေပးဖို႕ တစ္ေယာက္ကိုေျပာလိုက္တယ္။

ဘယ္သူ႕မ်က္ႏွာမွမၾကည့္ပဲ ၊ ဖ်က္စရာရွိတာ ဖ်က္ တဲ့ေနရာမွာ က်ေနာ္ ထိပ္ဆုံးကပါမယ္ထင္တယ္။ ဘာမွလည္း ၾကည့္လို႕မရေတာ့ အရင္ဆုံး postfix service ကို ခဏပိတ္လိုက္တယ္။ Lag ေနတာလည္း ေတာ္ေတာ္ၾကာျပီမို႕ တစ္မိနစ္ေလာက္ downtime က ေျပာပေလာက္ေအာင္မရွိဘူးလို႕ ယူဆလိုက္တယ္။ Service ပံုမွန္ ျပန္ျဖစ္ဖို႕ ခဏေတာ့ အနစ္နာခံရမွာပဲ။
# service postfix stop

အဲဒီ mail address ကေန mail ပို႕တာကို temporary barred လိုက္ပါတယ္ ။ ဘယ္လိုလုပ္လည္းဆိုရင္ေတာ့ Postfix မွာ smtpd_recipient_restrictions နဲ႕  smtpd_sender_restrictions ဆိုတာရွိပါတယ္။ အဲမွာ ဘယ္ mail address ကေနလာတဲ့ mail ၊ သို႕မဟုတ္ ဘယ္ mail address ကို ပို႕မယ့္ mail ကို drop ေပးပါလို႕ configure လို႕ရပါတယ္။ အဲမွာ marketing@blahblah.com ကို smtpd_sender_restrictions မွာ ထဲ့လိုက္ပါတယ္။ ေနာက္ေတာ့ အရင္ postfix service ကိုျပန္စလိုက္တယ္။
# service postfix start

ေနာက္ျပီး mailq ထဲမွာ marketing@blahblah.com က mail ဘယ္ေလာက္ရွိသလည္းလို႕ သိခ်င္လို႕ ဒီ command ေလး run ၾကည့္တယ္။
# mailq |  grep marketing@blahblah\.com | wc -l

ဒါေပမဲ့ ခုနက ဒီအတိုင္း mailq ႐ိုက္တာေတာင္ result ကမဆုံးတာ ၊ ဒီလိုလည္း ေတာ္ေတာ္နဲ႕ result မရပါဘူး။ အဲဒီမွာပဲ client ကအေၾကာင္းျပန္တယ္။ သူတို႕ ဒီေန႕ အဲ marketing email ကေန ဘာမွမပို႕ပါဘူးတဲ့။ Password က password လို႕ေပးထားေၾကာင္း အေၾကာင္းျပန္တယ္။ ဒါဆို mail queue ထဲကဟာေတြက က်ေနာ္တို႕ဖ်က္ျပစ္လိုက္လို႕ရတာ ေသခ်ာပါျပီ။ အမွန္က မေသခ်ာလည္း က်ေနာ္ဖ်က္ဖို႕ပါပဲ။ သူတို႕ဟာေတြဆိုလည္း ေနာက္မွ ျပန္ပို႕ပါလို႕ ေျပာျပီး ဖ်က္မွာပါပဲ။

ကဲ ဘယ္လိုဖ်က္မလည္း ? Mail ID ေတြကလည္းမသိ၊ mailq ကလည္း ၾကည့္မရေတာ့ ဘယ္ေလာက္ရွိမွန္းလည္းမသိ ၊ queue တစ္ခုလုံး flush ျပစ္လိုက္ရင္လည္း ေပါက္ဆိန္နဲ႕ ေပါက္သလိုျဖစ္ေတာ့မယ္ ။ Script ေလးတစ္ေၾကာင္း ေရးလိုက္လို႕ရရင္ ေကာင္းမယ္ ။ ပထမဆုံး mailq ရဲ့ output ကို ၾကည့္ရေအာင္။

0BEA87C8029*     111654    Tue Apr  3 10:56:46     marketing@blahblah.com

Database စကားနဲ႕ ေျပာရင္ primary key က ေရွ႕ဆုံးကေကာင္ Mail ID / Queue ID ။ ဒါက Queue ထဲရွိသမွ် mail တိုင္းမွာ unique ျဖစ္တယ္။ SQL မွာ select .. where .. ဆိုျပီး ေရးရသလိုပါပဲ ။ marketing@blahblah.com က mail ေတြကိုစစ္ထုတ္ျပီး delete လိုက္ရင္ ရမယ္။ Mail ကို Queue ထဲက delete လုပ္တာက postsupre -d ။ ဒါေပမယ့္ ID ေသခ်ာ ေပးမွျဖစ္မွာ ။ ကဲ ဆက္ေရးၾကည့္မယ္။

ခုနက result ေတြထဲက marketing@blahblah.com ဆိုတဲ့ address ပါတဲ့ result ေတြကိုပဲ ယူမယ္ ။

# mailq |  grep marketing@blahblah\.com

ခုနက result မွာ က်ေနာ္တို႕လိုတာ ေရွ႕ဆုံးက ID ၊ ေနာက္က time stamp ေတြဘာေတြ မလိုခ်င္ဘူး filter လုပ္ဖို႕လိုျပီ ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1

အဲမွာလည္း ID မွာ * ေတြ ပါတယ္။ Queue ထဲမွာ Active ျဖစ္ေနတယ္လို႕ ျပတာပါ။ အဲ asterisk ကိုလည္း ဖ်က္မွ ၊ မဟုတ္ရင္ postsuper က အလုပ္လုပ္ႏိုင္မွာမဟုတ္ဖူး ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!'

ဒီေလာက္ဆို က်ေနာ္လိုခ်င္တဲ့ marketing@blahblah.com ကလာတဲ့ mail ေတြရဲ့ ID တစ္လုံးထဲ ရျပီ ။ အဲဒါကို postsuper ကို pass ေပးလိုက္ျပီး ဖ်က္လိုက္ရင္ ရပါျပီ ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!' | postsuper -d -

58964 messages deleted တဲ့ ။ ပလုတ္တုတ္ ။ ဒီ mail address ကေနဝင္လာတဲ့ mail ၊ Queue ထဲမွာတင္ ေျခာက္ေသာင္းေလာက္ရွိတယ္။ အဲကလာတာ မဟုတ္တဲ့ mail ၊ Queue ထဲမွာ ႏွစ္ေထာင္ေက်ာ္ က်န္ပါတယ္။ Spam ေတြရွုပ္ေနတာနဲ႕ deliver မလုပ္ႏိုင္ေသးတဲ့ mail ေတြေပါ့။

အဲေနာက္မွာေတာ့ mail server က ပံုမွန္ ျပန္ျဖစ္သြားပါတယ္။ marketing@blahblah.com က mail ေတြ အဝင္ကေတာ့ရွိဆဲ။ ဒါေပမဲ့ deliver attempt မလုပ္ေတာ့ပဲ တန္း drop ေတာ့ load သက္သာတာေပါ့။ ဒါေပမဲ့ traffic နဲ႕ socket ကေတာ့ စားဆဲမို႕လို႕ ေနာက္ေတာ့ သူတို႕ marketing email ကို temporary deactivate လိုက္ပါတယ္ ။ အဲေတာ့မွ Queue ထဲက ေကာင္ေတြ ေကာင္းေကာင္းမြန္မြန္ ထြက္ေတာ့တယ္။


တစ္ေၾကာင္း bash script ေလးပါပဲ ။ ဒါေပမဲ့ ျပသနာ ေတာ္ေတာ္ ေျပလည္သြားတယ္ ။ ညေန ေျခာက္နာရီအထိ အားလုံး အဆင္ေျပေနတာနဲ႕ စီးတီးေဟာကို ထမင္းစားဖို႕ သြားလိုက္ႏိုင္တယ္ ။ ေတာ္ပါေသးရဲ့ ။ ေတာ္ၾကာ ထြက္ခါနီးမွ ထြက္ခတ္ခတ္ျပီး မိုးခ်ဳပ္ေအာင္ ေနေနရအုန္းမယ္။

Divinity