Created
December 17, 2024 18:51
-
-
Save SpareSimian/abb7f3d179a7ba75fa9a161af13db1cc to your computer and use it in GitHub Desktop.
MIMEDefang milter extract: Discard spam from backup MX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use Net::DNS; | |
# GetHostAddresses(resolver,hostname) | |
# returns list of IP addresses for hostname | |
sub GetHostAddresses ($$) { | |
my ($resolver,$hostname) = @_; | |
my @addresses; | |
my $received = $resolver->search($hostname); | |
if ($received) { | |
foreach my $rr ($received->answer) { | |
next unless $rr->type eq "A"; | |
push(@addresses, $rr->address); | |
} | |
} | |
return @addresses; | |
} | |
# GetDomainMXAddresses(resolver,domain) | |
# returns array of IP addresses for domain's MX list | |
# if no MX records, returns array of IP addresses for this hostname | |
sub GetDomainMXAddresses ($$) { | |
my ($resolver,$domain) = @_; | |
my @mxlist = mx($resolver, $domain); | |
my @mxaddresses; | |
if (@mxlist) { | |
push(@mxaddresses, map { GetHostAddresses($resolver, $_->exchange); } @mxlist); | |
} else { # check for an A record for the domain... | |
push(@mxaddresses, GetHostAddresses($resolver, $domain)); | |
} | |
return @mxaddresses; | |
} | |
# MTA_is_domain_MX(domain,address) | |
# returns TRUE if address is a MX for domain | |
sub MTA_is_domain_MX ($$) { | |
my ($domain,$address) = @_; | |
return grep { /^$address$/ } GetDomainMXAddresses(Net::DNS::Resolver->new, $domain); | |
} | |
sub action_discard_bounce ($) { | |
my($message) = @_; | |
md_syslog('info', "Recipients[0] = '$Recipients[0]'"); | |
if (MTA_is_domain_MX($MyDomain,$RelayAddr)) { | |
# don't pester mx backup | |
return action_discard(); | |
} else { | |
return action_bounce($message); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment