#!/usr/bin/perl -w # baniptest 5/30/2003 by David Efflandt efflandt@xnet.com # External procmail filter to compare file list of banned smtp IPs # Ban list can be mixed partial IPs (ending with dot) or full IPs # Adds X-Banned header with test results # # set following to your ban list /path/filename: my $listfile = "$ENV{HOME}/baniplist.txt"; my $xbanned = "No"; # default result open(IN,"$listfile") || die; @banlist = ; close IN; chomp @banlist; while () { my $ip; # insert our header after other headers (1st blank line) if ($xbanned && /^\s*$/) { print "X-Banned: $xbanned\n$_"; $xbanned = ''; } else { print; } # get IP from rec'd headers if (/^received/i && /\[([\d\.]+)\]/) {$ip = $1;} else {next;} foreach $bad (@banlist) { if ($bad =~ /\.$/) { if ($ip =~ /^\Q$bad\E/) { $xbanned = "YES $bad (partial)"; } } elsif ($ip =~ /^\Q$bad\E$/) { $xbanned = "YES $bad"; } } }