@load base/frameworks/notice/main @load base/protocols/smtp/main module SMTP; export { redef enum Notice::Type += { Suspicious_Origination }; ## Places where it's suspicious for mail to originate from represented ## as all-capital, two character country codes (e.g., US). It requires ## Zeek to be built with GeoIP support. option suspicious_origination_countries: set[string] = {}; option suspicious_origination_networks: set[subnet] = {}; } event log_smtp(rec: Info) { local ip: addr; local loc: geo_location; if ( rec?$x_originating_ip ) { ip = rec$x_originating_ip; loc = lookup_location(ip); if ( (loc?$country_code && loc$country_code in suspicious_origination_countries) || ip in suspicious_origination_networks ) { NOTICE(Notice::Info($note=Suspicious_Origination, $msg=fmt("An email originated from %s (%s).", loc?$country_code ? loc$country_code : "", ip), $id=rec$id)); } } if ( rec?$path ) { ip = rec$path[|rec$path|-1]; loc = lookup_location(ip); if ( (loc?$country_code && loc$country_code in suspicious_origination_countries) || ip in suspicious_origination_networks ) { NOTICE(Notice::Info($note=Suspicious_Origination, $msg=fmt("Based up Received headers, email originated from %s (%s).", loc?$country_code ? loc$country_code : "", ip), $id=rec$id)); } } }