Hi *,

we had some (smaller) troubles with a spammer sending mails with a
resolvable MX, but that MX pointed to 127.0.0.1... after blacklisting
these sending IP for a short time I added a check to the
require_resolvable_fromhost plugin... 

        Hanno
--- require_resolvable_fromhost.orig    2005-07-28 10:02:25.000000000 +0200
+++ require_resolvable_fromhost 2005-07-28 10:23:13.000000000 +0200
@@ -35,11 +35,40 @@
   my $res = new Net::DNS::Resolver;
   $res->tcp_timeout(30);
   $res->udp_timeout(30);
-  return 1 if mx($res, $host);
+  my @mx = mx($res, $host);
+  foreach my $mx (@mx) {
+    return mx_valid($mx->exchange);
+  }
   my $query = $res->search($host);
   if ($query) {
     foreach my $rr ($query->answer) {
-      return 1 if $rr->type eq "A" or $rr->type eq "MX";
+      if ($rr->type eq "A") {
+        return 0 if $rr->address eq "127.0.0.1";
+        return 0 if $rr->address eq "0.0.0.0";
+        return 1;
+      }
+      elsif ($rr->type eq "MX") {
+        return mx_valid($rr->exchange);
+      }
+    }
+  } 
+  else {
+    $self->log(LOGWARN, "$$ query for $host failed: ", $res->errorstring)
+      unless $res->errorstring eq "NXDOMAIN";
+  }
+  return 0;
+}
+
+sub mx_valid {
+  my $name  = shift;
+  my $res   = new Net::DNS::Resolver;
+  my $query = $res->search($name);
+  if ($query) {
+    foreach my $rr ($query->answer) {
+      next unless $rr->type eq "A";
+      return 0 if $rr->address eq "127.0.0.1";
+      return 0 if $rr->address eq "0.0.0.0";
+      return 1;
     }
   }
   else {
@@ -49,3 +78,4 @@
   return 0;
 }
 
+# vim: ts=2 sw=2 expandtab syn=perl

Reply via email to