Re: Getting greylisting going on a new Debian
thing <[email protected]> Fri, 27 Jun 2008 10:26:17 +1200
| Newsgroups | gmane.mail.spam.greylist.user |
|---|---|
| Message-ID | <[email protected]> |
Hi, Trouble is it is broken, its checking outbound email addresses and tempfailing them if it has not seen them before so something is wrong somewhere, even if its me and I have mis-configured it.. I have diff'd files on the old server and the new server and even swapped in relaydelay.conf off the old server, it still does it....its quite possible there is a setting in debian's sendmail.cf that is not agreeing with relaydelay? but who knows I have no way of determining what the fault is so I cant fix it. regards Steven Paul Venezia wrote: > *shrug* okay. > > This code has been working fine for me for years now. As a consultant, > I've probably put this into production in 30 different networks. > Probably more. > > If it ain't broke, don't fix it. > > > On Jun 26, 2008, at 5:59 PM, thing wrote: > >> Hi, >> >> Thanks but I am in the process of ripping it out and will look for >> something else. >> >> regards >> >> Steven >> >> Paul Venezia wrote: >>> You can always use my PHP front-end: >>> >>> http://www.pvenezia.com/rd-tools.tgz >>> >>> -Paul >>> >>> >>> On Jun 26, 2008, at 5:41 PM, Steven Jones wrote: >>> >>>> Hi, >>>> >>>> I have dropped the database and re-done it, used the xlist.pl >>>> all to no avail. >>>> >>>> regards >>>> >>>> Steven >>>> >>>> -----Original Message----- >>>> From: [email protected] on behalf of >>>> Dennis Wynne >>>> Sent: Fri 27/06/2008 04:44 >>>> To: Greylisting Users and Developers Discuss >>>> Subject: Re: [Greylist-users] Getting greylisting going on a new >>>> Debian >>>> >>>> It used to be part of the CVS on the puremagic web page, but the >>>> link is now >>>> broken. I THINK this copy is unchanged, just fix the user name and >>>> password >>>> to access the database and it should be good to go. >>>> >>>> >>>> >>>> >>>> #!/usr/bin/perl >>>> >>>> ############################################################################ >>>> >>>> # >>>> # >>>> # File: xlist.pl >>>> # >>>> # Version: 0.01 >>>> # >>>> # Programmer: Evan J. Harris <[email protected]> >>>> # >>>> # Description: >>>> # Will create manual white or blacklist entries in the greylist >>>> database, >>>> # with some basic checking to ensure this isn't a duplicate, and to >>>> # expire existing rows that would match. >>>> # >>>> # References: >>>> # For Greylisting info, see >>>> http://projects.puremagic.com/greylisting/ >>>> # >>>> # Notes: >>>> # This is a quick and dirty implementation, and no doubt can be made >>>> # much nicer, but it works pretty good as-is. >>>> # >>>> # Bugs: >>>> # None known. >>>> # >>>> # >>>> # *** Copyright 2003 by Evan J. Harris --- All Rights Reserved *** >>>> # *** No warranties expressed or implied, use at your own risk *** >>>> # >>>> ############################################################################ >>>> >>>> # >>>> >>>> use Errno qw(ENOENT); >>>> use DBI; >>>> >>>> use strict; >>>> >>>> ############################################### >>>> # Our global settings file >>>> ############################################### >>>> my $config_file = "/etc/mail/relaydelay.conf"; >>>> >>>> >>>> ################################################################# >>>> # Our global settings that may be overridden from the config file >>>> ################################################################# >>>> >>>> # If you do/don't want to see debugging messages printed to stdout, >>>> # then set this appropriately. >>>> my $verbose = 1; >>>> >>>> # Database connection params >>>> my $database_type = 'mysql'; >>>> my $database_name = 'relaydelay'; >>>> my $database_host = 'localhost'; >>>> my $database_port = 3306; >>>> my $database_user = 'user_name_here'; >>>> my $database_pass = 'password_here'; >>>> >>>> >>>> ############################################################# >>>> # End of options for use in external config file >>>> ############################################################# >>>> >>>> # Set this to nonzero if you wish to optimize the active table >>>> # after deleting the rows moved to the reporting table. >>>> my $optimize_active_table = 1; >>>> >>>> # Global vars that should probably not be in the external config file >>>> my $global_dbh; >>>> my $config_loaded; >>>> >>>> >>>> ####################################################################### >>>> >>>> # Database functions >>>> ####################################################################### >>>> >>>> >>>> sub db_connect($) { >>>> my $verbose = shift; >>>> >>>> return $global_dbh if (defined $global_dbh); >>>> >>>> my $dsn = >>>> "DBI:$database_type:database=$database_name:host=$database_host:port=$databa >>>> >>>> se_port"; >>>> print "DBI Connecting to $dsn\n" if $verbose; >>>> >>>> # Note: We do all manual error checking for db errors >>>> my $dbh = DBI->connect($dsn, $database_user, $database_pass, >>>> { PrintError => 0, RaiseError => 1 }); >>>> >>>> $global_dbh = $dbh; >>>> return $global_dbh; >>>> } >>>> >>>> sub db_disconnect { >>>> $global_dbh->disconnect() if (defined $global_dbh); >>>> $global_dbh = undef; >>>> return 0; >>>> } >>>> >>>> >>>> sub load_config() { >>>> >>>> # make sure the config is only loaded once per instance >>>> return if ($config_loaded); >>>> >>>> print "Loading Config File: $config_file\n" if ($verbose); >>>> >>>> # Read and setup our configuration parameters from the config file >>>> my($msg); >>>> my($errn) = stat($config_file) ? 0 : 0+$!; >>>> if ($errn == ENOENT) { $msg = "does not exist" } >>>> elsif ($errn) { $msg = "inaccessible: $!" } >>>> elsif (! -f _) { $msg = "not a regular file" } >>>> elsif (! -r _) { $msg = "not readable" } >>>> if (defined $msg) { die "Config file $config_file $msg" } >>>> >>>> open INFILE, "<$config_file"; >>>> while (<INFILE>) { >>>> my $tstr = $_; >>>> if ($tstr =~ /\A\s*(\$database_\w+)\s*=/) { >>>> eval $tstr; >>>> if ($@ ne '') { die "Error in config file $config_file: $@" } >>>> } >>>> } >>>> >>>> $config_loaded = 1; >>>> } >>>> >>>> sub usage { >>>> my $error = shift; >>>> if (defined $error) { >>>> print "$error\n\n"; >>>> } >>>> print "Usage:\n" >>>> . " $0 <black|white> <ip|from|to> <fromaddr|ip|network>\n\n" >>>> . "Note: networks must be specified in incomplete form, i.e. >>>> 10.2 = >>>> 10.2.0.0/16\n" >>>> . " NEVER whitelist on the 'from' address, since it is easily >>>> forged.\n\n" >>>> . "Examples:\n\n" >>>> . "$0 white ip 10\n" >>>> . " -- Whitelist all mail from systems on the private 10.x.x.x >>>> network\n" >>>> . "$0 white to sales\@somedomain.com\n" >>>> . " -- Whitelist mail sent to the sales address to avoid possible >>>> delays\n" >>>> . "$0 black from aspamdomain.com\n" >>>> . " -- Blacklist all mail with a from address at >>>> aspamdomain.com\n"; >>>> exit; >>>> } >>>> >>>> >>>> BEGIN: >>>> { >>>> my $never = "'0000-00-00 00:00:00'"; >>>> my $always = "'9999-12-31 23:59:59'"; >>>> >>>> >>>> # load config file before we start >>>> load_config(); >>>> >>>> # parse command line params >>>> my $direction = lc(shift); >>>> usage("Error: First parameter must be either black or white.") if >>>> ($direction !~ /\A(black|white)\Z/); >>>> my $rectype = lc(shift); >>>> usage("Error: Second parameter must be a valid field type.") if >>>> ($rectype >>>> !~ /\A(ip|from|to|relay_ip|mail_from|rcpt_to)\Z/); >>>> $rectype = "relay_ip" if ($rectype eq "ip"); >>>> $rectype = "mail_from" if ($rectype eq "from"); >>>> $rectype = "rcpt_to" if ($rectype eq "to"); >>>> my $fieldval = lc(shift); >>>> >>>> if (length($fieldval) < 2) { >>>> print "Error! Field parameter too short!\n"; >>>> exit; >>>> } >>>> >>>> if ($rectype eq "mail_from" and $direction eq "white") { >>>> print "Whitelisting of from addresses is not allowed!\n"; >>>> exit; >>>> } >>>> if ($rectype eq "relay_ip" and $fieldval !~ >>>> /\A(\d+)(|\.(\d+)(|\.(\d+)(|\.(\d+))))\Z/) { >>>> if ($1 < 1 or $1 > 255 or $2 > 255 or $3 > 255 or $4 > 255) { >>>> print "IP is invalid format!\n"; >>>> exit; >>>> } >>>> } >>>> my $block_expires = ($direction eq "white" ? $never : $always); >>>> >>>> # connect to the database >>>> my $dbh = db_connect(0); >>>> die "$DBI::errstr\n" unless($dbh); >>>> >>>> # Make sure there isn't a similar manual entry already. >>>> my $rows = $dbh->selectrow_array("SELECT id FROM relaytofrom WHERE >>>> record_expires > NOW() AND $rectype = ? " >>>> . " AND origin_type = 'MANUAL' ", undef, $fieldval); >>>> if ($rows > 0) { >>>> print "Similar Record already exists! Aborting.\n"; >>>> exit; >>>> } >>>> >>>> # Insert the wildcard row (blacklist or whitelist) >>>> my $rows = $dbh->do("INSERT INTO relaytofrom (create_time, >>>> record_expires, >>>> block_expires, $rectype) " >>>> . " VALUES (NOW(), $always, $block_expires, " . >>>> $dbh->quote($fieldval) >>>> . ")") or die; >>>> >>>> # Make sure it inserted ok >>>> if ($rows != 1) { >>>> print "Error inserting record.\n"; >>>> die; >>>> } >>>> else { >>>> my $rowid = $dbh->selectrow_array("SELECT LAST_INSERT_ID()"); >>>> print "Inserted row $rowid\n"; >>>> >>>> # expire any old records that match >>>> # - find records that may be similar (do real similarity testing >>>> later, >>>> this is wide pass) >>>> my $sth = $dbh->prepare("SELECT id, $rectype FROM relaytofrom WHERE >>>> record_expires > NOW() " >>>> . " AND $rectype LIKE " . $dbh->quote('%' . $fieldval . '%')); >>>> $sth->execute(); >>>> my $rows = 0; >>>> while (my @cols = $sth->fetchrow_array()) { >>>> next if ($cols[0] == $rowid); # Don't expire the row we just >>>> inserted >>>> $cols[1] = lc($cols[1]); # Make sure the comparisons are >>>> lowercase >>>> my $doexpire = 0; >>>> >>>> if ($rectype eq "relay_ip" and substr($cols[1], 0, >>>> length($fieldval)) >>>> eq $fieldval) { >>>> $doexpire = 1; >>>> } >>>> else { >>>> # expire if is an exact match, with or without surrounding angle >>>> brackets >>>> $doexpire = 1 if ($fieldval =~ /\A.+@.+\Z/ and ($cols[1] eq >>>> "<$fieldval>" or $cols[1] eq "$fieldval")); >>>> # expire if is a username@ match >>>> $doexpire = 1 if ($fieldval =~ /@\Z/ and substr($cols[1], 0, >>>> length($fieldval) + 1) eq "<$fieldval"); >>>> # expire if is a partial domain match >>>> $doexpire = 1 if ($fieldval !~ /@/ and >>>> ( substr($cols[1], - (length($fieldval) + 2)) eq >>>> ".$fieldval>" >>>> or substr($cols[1], - (length($fieldval) + 2)) eq >>>> "\@$fieldval>" >>>> or substr($cols[1], - (length($fieldval) + 1)) eq >>>> ".$fieldval" >>>> or substr($cols[1], - (length($fieldval) + 1)) eq >>>> "\@$fieldval")); >>>> } >>>> if ($doexpire) { >>>> $rows += $dbh->do("UPDATE relaytofrom SET record_expires = NOW() >>>> WHERE id = $cols[0]"); >>>> } >>>> } >>>> $sth->finish(); >>>> print "Expired $rows rows\n"; >>>> } >>>> >>>> } >>>> >>>> >>>> >>>> >>>> >>>> ===== Original Message from [email protected] >>>> (Greylisting >>>> Users and Developers Discuss) at 6/26/08 11:41 am >>>>> Hi, >>>>> >>>>> Where do I find this xlist.pl script ? >>>>> >>>>> Regards, >>>>> >>>>> Denio >>>>> >>>>>> I use the provided xlist.pl script to do all my white and black >>>>>> listing >>>>>> >>>>>> xlist.pl white ip 192.168.1 >>>>>> >>>>>> should make the proper table entry for you. >>>>>> >>>>>> >>>>>> >>>>>> ===== Original Message from [email protected] >>>>>> (Greylisting >>>>>> Users and Developers Discuss) at 6/26/08 2:51 am >>>>>>> Hi, >>>>>>> >>>>>>> This does appear to be based on a unique receipiants >>>>>>> address...so sending >>>>>>> to a remote user works after a while and continues to work, but >>>>>>> sending >>>>>>> to >>>>>>> a new user at the same doamin cause a tempfail... >>>>>>> >>>>>>> So how do I fix this please? >>>>>>> >>>>>>> regards >>>>>>> >>>>>>> Steven >>>>>>> >>>>>>> -----Original Message----- >>>>>>> From: [email protected] on behalf of >>>>>>> Steven >>>>>>> Jones >>>>>>> Sent: Thu 26/06/2008 19:21 >>>>>>> To: [email protected] >>>>>>> Subject: [Greylist-users] Getting greylisting going on a new >>>>>>> Debian box >>>>>>> >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> Just setting up relaydelay and I am finding that relaydelay is >>>>>>> failing >>>>>>> clients on the local LAN. >>>>>>> >>>>>>> I have attempted to put 192.168.1 into the database but to no >>>>>>> avail. >>>>>>> >>>>>>> What should the mysql syntax be for 192.168.1.0/24 not to be >>>>>>> blocked ever >>>>>>> please? >>>>>>> >>>>>>> Does not seem to be, >>>>>>> >>>>>>> INSERT INTO relaytofrom (relay_ip, record_expires, create_time) >>>>>>> VALUES >>>>>>> ('192.168.1', '9999-12-31 23:59:59', NOW()); >>>>>>> >>>>>>> ?? >>>>>>> >>>>>>> 8><-------- >>>>>>> Jun 26 18:50:49 hermes sm-mta[20134]: m5Q6omwx020134: Milter: >>>>>>> to=<[email protected]>, reject=451 4.7.1 Please >>>>>>> try >>>>>>> again >>>>>>> later (TEMPFAIL) >>>>>>> Jun 26 18:50:51 hermes sm-mta[20134]: m5Q6omwx020134: >>>>>>> from=<[email protected]>, size=1007, class=0, nrcpts=0, >>>>>>> proto=ESMTP, >>>>>>> daemon=MTA-v4, relay=[192.168.1.108] >>>>>>> Jun 26 18:51:23 hermes sm-mta[25218]: m5Q6pMPP025218: Milter: >>>>>>> to=<[email protected]>, reject=451 4.7.1 Please >>>>>>> try >>>>>>> again >>>>>>> later (TEMPFAIL) >>>>>>> Jun 26 18:51:26 hermes sm-mta[25218]: m5Q6pMPP025218: >>>>>>> from=<[email protected]>, size=1007, class=0, nrcpts=0, >>>>>>> proto=ESMTP, >>>>>>> daemon=MTA-v4, relay=[192.168.1.108] >>>>>>> 8><--------- >>>>>>> >>>>>>> regards >>>>>>> >>>>>>> Steven >>>>>>> _______________________________________________ >>>>>>> Greylist-users mailing list >>>>>>> [email protected] >>>>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Greylist-users mailing list >>>>>>> [email protected] >>>>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Greylist-users mailing list >>>>>> [email protected] >>>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>>>> >>>>> >>>>> _______________________________________________ >>>>> Greylist-users mailing list >>>>> [email protected] >>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>> >>>> >>>> _______________________________________________ >>>> Greylist-users mailing list >>>> [email protected] >>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>> >>>> _______________________________________________ >>>> Greylist-users mailing list >>>> [email protected] >>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >>>> >>> >>> _______________________________________________ >>> Greylist-users mailing list >>> [email protected] >>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >> >> _______________________________________________ >> Greylist-users mailing list >> [email protected] >> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users >> > > _______________________________________________ > Greylist-users mailing list > [email protected] > http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users