พยายามมานานแสนนาน ผมก็ลองทำได้สำเร็จครับ กับปัญหาไวรัสอีเมล์+ขยะจาก Server

ปัญหามันมีอยู่ว่าไม่แน่ใจครับ มีใครแอบส่ง หรือ ไวรัสหรือเปล่าผมก็ไม่แน่ใจ
โดยใช้ mail server ของผมส่งจนโดน Hotmail Block ไปเรียบร้อย
เลยลองหาวิธีการ Config Exim ให้ Block ข้อความ หรือโดเมน หรือ ข้อความที่เสียงต่อการ Spam อีเมล์ได้สำเร็จ
ใครจะลองทำดูก็ไม่ว่าครับ บอกเลยว่าได้ผลดีในขั้นเบื้องต้นครับ

ตามคำสั่งนี้น่ะครับ

touch /var/log/filter.log
chmod 0644 /var/log/filter.log

vi /etc/antivirus.exim

################################################## ####

START

Filters all incoming an outgoing mail

logfile /var/log/filter.log 0644

Common Spam

if# Header Spam
$header_subject: contains "Pharmaceutical"
or $header_subject: contains "Viagra"
or $header_subject: contains "Cialis"
or $header_subject: is "The Ultimate Online Pharmaceutical"
or $header_subject: contains "SPAM"
or $header_subject: contains “[SPAM]”

Body Spam

or $message_body: contains "Cialis"
or $message_body: contains "Viagra"
or $message_body: contains "Leavitra"
or $message_body: contains "St0ck"
or $message_body: contains "Viaagrra"
or $message_body: contains "Cia1iis"
or $message_body: contains "URGENT BUSINESS PROPOSAL"
or $message_body matches "angka[^s]+[net|com|org|biz|info|us|name]+?"
or $message_body matches "v(i|1)agra|vag(i|1)n(a|4)|pen( i|1)s|asu|seks|l(o|0)l(i|1)ta|dewacolok"then

Log Message - SENDS RESPONSE BACK TO SENDER

SUGGESTED TO LEAVE OFF to prevent fail loops

and more work for the mail system

#fail text "Message has been rejected because it hasn

triggered our central filter."

logwrite “$tod_log $message_id from $sender_address contained spam keywords” seen finish
endif

END

Filters all incoming an outgoing mail

START

All outgoing mail on the server only - what is sent out#Check forwarders so it doesn’t get blocked

#Forwarders still work =)## FINANCIAL FAKE SENDERS

Log all outgoing mail from server that matches rules

logfile /var/log/filter.log 0644
if (
$received_protocol is “local” or
$received_protocol is “esmtpa”
) and (
$header_from contains "@citibank.com" or
$header_from contains "@bankofamerica.com" or
$header_from contains "@wamu.com" or
$header_from contains "@ebay.com" or
$header_from contains "@chase.com" or
$header_from contains "@paypal.com" or
$header_from contains "@wellsfargo.com" or
$header_from contains "@bankunited.com" or
$header_from contains "@bankerstrust.com" or
$header_from contains "@bankfirst.com" or
$header_from contains "@capitalone.com" or
$header_from contains "@citizensbank.com" or
$header_from contains "@jpmorgan.com" or
$header_from contains "@wachovia.com" or
$header_from contains "@bankone.com" or
$header_from contains "@suntrust.com" or
$header_from contains "@amazon.com" or
$header_from contains "@banksecurity.com" or
$header_from contains "@visa.com" or
$header_from contains "@mastercard.com" or
$header_from contains "@mbna.com"
)
then
logwrite "$tod_log $message_id from $sender_address is fraud"
seen finish
endif## OTHER FAKE SENDERS SPAM

Enable this to prevent users using @domain from addresses

Not recommended since users do use from addresses not on the server

Log all outgoing mail from server that matches rules

logfile /var/log/filter.log 0644
if (
$received_protocol is “local” or
$received_protocol is “esmtpa”
) and (
$header_from contains "@hotmail.com" or
$header_from contains "@yahoo.com" or
$header_from contains "@aol.com"
)
then
logwrite "$tod_log $message_id from $sender_address is forged fake"
seen finish
endif ## KNOWN FAKE PHISHING

Log all outgoing mail from server that matches rules

logfile /var/log/filter.log 0644
if (
$received_protocol is “local” or
$received_protocol is “esmtpa”
) and (
#Paypal
$message_body: contains “Dear valued PayPal member” or
$message_body: contains “Dear valued PayPal customer” or
$message_body: contains “Dear Paypal” or
$message_body: contains “The PayPal Team” or
$message_body: contains “Dear Paypal Customer” or
$message_body: contains “Paypal Account Review Department” or
#Ebay
$message_body: contains “Dear eBay member” or
$message_body: contains “Dear eBay User” or
$message_body: contains “The eBay team” or
$message_body: contains “Dear eBay Community Member” or
#Banks
$message_body: contains “Dear Charter One Customer” or
$message_body: contains “Dear wamu.com customer” or
$message_body: contains “Dear valued Citizens Bank member” or
$message_body: contains “Dear Visa” or
$message_body: contains “Dear Citibank” or
$message_body: contains “Citibank Email” or
$message_body: contains “Dear customer of Chase Bank” or
$message_body: contains “Dear Bank of America customer” or
#ISPs
$message_body: contains “Dear AOL Member” or
$message_body: contains “Dear AOL Customer”
)
then
logwrite "$tod_log $message_id from $sender_address is phishing"
seen finish
endif# END

All outgoing mail on the server only - what is sent out

แล้วไม่ต้องไปแก้อะไร exim หรอฮะ inculde file เข้าไปอะไรแบบนี้

ขอบคุณครับ ดูน่าจะใช้ได้ดี ทั้งส่งออกและรับเข้า

แต่คิดว่าน่าจะต้องเพิ่ม config ในไฟล์ exim.conf ด้วยนะ
อาจจะเป็นคำสั่งแค่ 1 บรรทัดให้ include ไฟล์ antivirus.exim
ยังไงเดี๋ยวลองดูแล้วจะมาแจ้งผล

ปล. เตรียมย้ายเข้า How-To

แก้ไข exim.conf ครับ
system_filter=/etc/antivirus.exim

จากกนั่นก็ service exim restart

เพิ่มเติมครับ

$received_protocol is “local” // ส่งจาก local หรือ webmail
$received_protocol is “smtp”

Nice Share, Let’s Share!

pook

ตรงนี้ผมไม่ค่อยเห็นด้วยนะครับ เพราะอย่างผมใช้ Paypal หรือ Ebay ก็จะมีเมล์ @ ดังกล่าวส่งมาอะครับ คนไทยบางส่วนก็น่าจะใช้เหมือนกัน ส่วนที่อื่น ไม่ทราบครับ

ผมใช้ paypal กับ amazon อ่ะ เพิ่งไปฝึกทำ astore ตามที่ท่านปุ๊กแนะนำมา

อันนี้ใช้สำหรับ OutGoing ครับ คือ Check ว่า From เป็นโดเมนที่ถูก Block หรือไม่

อ๋ออย่างนี้นี่เอง

ผมมาลองดูหลายวิธีแล้วครับ ค่อนข้างจะได้ผลดี แต่ก็ยังมีใรกรณีที่ mail server ถูกใช้จากบุคคลอื่น ที่ไม่ใช่ลูกค้าภายใน Host
วันนี้ผมลองเขียน log ดูว่ามีการส่งออกไปที่ไหนบ้างผ่าน smtp ปรากฏว่ามีคนใช้ mail server ผมส่งออกมากมายเลยครับ
จนน่าตกใจ เพราะปกติผมไม่ได้กำหนด authentication mail server โดยกำหนดเพียงว่าใครที่ใช้ mail.xxx.xxx ก็สามารถ
เรียกใช้ mail server ส่งอีเมล์ออกไปได้เลยครับ และปัญหาก็ตามมา คือ มีการใช้อย่างแพร่หลาย
ตอนนี้ผมเลยกำหนดว่าโดเมนภายใน Host ท่านั้นถึงจะสามารถส่งอีเมล์ออกได้ อาจจะเสียเวลาหน่อยแต่คุ้มกับการไม่นั่งมาปวดหัวครับ

ตัวอย่างน่ะครับ

logfile /var/log/filter.log 0644
if(
$header_from does not contain "@rack.xxxx.com" and
$header_from does not contain "@xxxx1.com" and
$header_from does not contain "@xxxx2.com" and
$header_from does not contain "@xxxx3.com" and
$header_from does not contain "@xxxx4.com"
)
then
logwrite "$tod_log Block $received_protocol from $header_from"
seen finish
endif

#การ Set ดังกล่าวคือ อีเมล์ที่มี header_from ต่อไปนี้จะสามารถส่งอีเมล์ออกได้ ถ้าไม่ใช่ ก็หมดสิทธิ์ใช้ mail server เราส่งครับ

ขอรวมกระทู้นะครับ จะได้อยู่ด้วยกัน

หลังจากที่ทำได้ 2 วัน ปกติอีเมล์ใน คิว จะมีเยอะมากครับ ประมาณวันล่ะ 4-5 ร้อยฉบับครับ ส่วนมากจะเป็นอีเมล์ขยะ ที่ไม่สามารถส่งออกไปได้ และจะต้องมาคอยลบทิ้งทุก ๆ วันครับ เพราะป้องกันการค้างและ mail server ทำงานหนัก พอได้ทำการ กำหนด whitelist domain ปรากฏว่าผลดีเกินคาดครับ เพระวันนี้มีอีเมล์ค้างใน คิว แค่ 4-5 ฉบับครับ เป็นเพราะ mail box ของลูกค้าเต็มจึงไม่สามารถส่งออกได้ และอีเมล์ขยะนี่แทบไม่มีเลยครับ และที่สำคัญตอนนี้สามารส่งเข้า Hotmail ได้ตามปกติแล้วครับ

กิ้วๆๆๆๆ

Good Job…

[glow=red,2,300]Good Job…[/glow]

ปรกติ exim มัน set มาให้ reject domain จากภายนอกแล้วไม่ไช่หรอฮะ

ส้วนผมเอง นั่งไล่ดูครับ ว่า คิวมาจากไหน
เช่น ส่งเข้ามาแล้วไม่มี user นั้นๆ เช่นบางโดเมน โดนเข้ามาเยอะผมเลยตั้งให้ drop ทิ้งไป

เท่าที่ดูๆ เราๆ ติดลิส กันก็เพราะว่า เมื่อมีการส่งเมล์เข้ามา เช่นกรณี ไม่มี user ปลายทางจะมีจดหมายตีกลับไป
พอโดน spam มากๆ เข้า กลายเป็นเราไป spam mail ต้นทางอื่นๆ อีกครับ

ส่วนขาออกปกติ ไม่พบปัญหา เรื่อง spam ออกนะครับ

Thank for share…

ผมจะมีปัญหาเกี่ยวกับการส่งผ่าน smtp ครับ แต่ถ้าส่งผ่าน function mail() จะไม่มีปัญหาครับ
สามารถจัดการผ่านคิวได้ครับ แต่ถ้าส่งผ่าน smtp อีเมล์จะได้ไม่ได้เข้าไปอยู่ในคิวครับ เราจึงไม่ทราบ
ได้เลยว่าใครใช้ mail server เราส่งบ้างครับ ผมเองก็ยังแปลกใจครับ เพราะในคิวมีส่งวันล่ะ 3-4 ร้อยฉบับ
แต่ปรากฏว่าใน Hotmail (Smart Network Data Services) แจ้งบอกว่า
Server IP ของผมส่งอีเมล์เข้า Hotmail 27,000 กว่าฉบับ Hotmail เลย Ban IP ซะงั้นครับ
ผมเลยเขียน log ดูครับ และเห็นว่ามีการส่งผ่าน smtp เป็นจำนวนมากครับ

แก้ไฟล์ /etc/virtual/limit หรือยังครับ
ตั้งไว้ซัก 300-3000 ครับ
แต่ละ user ก็จะส่งเมล์ได้ไม่เกินจำนวนที่ตั้งไว้ ป้องกันการส่ง spam ได้ระดับหนึ่ง