[Mimedefang] $helo versus $ip

Jack Olszewski jacek at hermes.net.au
Mon Feb 2 20:41:04 EST 2004


Hello all,

In the archives of this list I can't find anything on possible checks
of $helo versus $ip in filter_relay. What about finding the address of
the host given as $helo, and matching it against $ip? Would it be safe
to reject the message if they do not match? For instance (not tested
in mimedefang-filter yet): 

use Net::DNS;

sub filter_relay {
    my($ip,$name,$helo) = @_;
# allow outgoing mail
    if ($ip eq "127.0.0.1" or
	$ip =~ $local_net
	) {
	return(1,"ok");
    }
# stop fake helo
    if ($helo =~ /$my_ip/ or $helo =~ /$my_domain/i) {
	return(0,"Rejected, $helo is not your true address");
# stop bare ip as helo 
    } elsif ($helo =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {
	return(0,"Rejected, see http://www.hermes.net.au/helo.php.");
# accept ip in square brackets
    } elsif ($helo =~ /^\[{\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/) {
        return(1,"ok");
    } else {
# check helo v. ip, allow if they match
    $res = new Net::DNS::Resolver;
    $query = $res->search($helo);
    if ($query) {
       foreach $rr ($query->answer) {
	   next unless $rr->type eq "A";
           return(1,"ok") if $rr->address eq $ip;
       }
       return(0,"Rejected, $helo address and $ip do not match");
    }
}

I am not sure if:

1. the last part can result in false positives,
2. it may be too big a load for a fairly busy server.

I think sendmail could be configured to do such checks but I don't
know how.

Jack



More information about the MIMEDefang mailing list