[Greylist-users] Getting greylisting going on a new Debian

thing thing at thing.dyndns.org
Thu Jun 26 14:59:38 PDT 2008


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: greylist-users-bounces at lists.puremagic.com 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 <eharris at puremagic.com>
>> #
>> # 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.+ at .+\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 greylist-users at lists.puremagic.com 
>> (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 greylist-users at lists.puremagic.com
>>>> (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: greylist-users-bounces at lists.puremagic.com on behalf of Steven
>>>>> Jones
>>>>> Sent: Thu 26/06/2008 19:21
>>>>> To: greylist-users at lists.puremagic.com
>>>>> 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=<greylist-users at lists.puremagic.com>, reject=451 4.7.1 Please try
>>>>> again
>>>>> later (TEMPFAIL)
>>>>> Jun 26 18:50:51 hermes sm-mta[20134]: m5Q6omwx020134:
>>>>> from=<thing at thing.dyndns.org>, 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=<greylist-users at lists.puremagic.com>, reject=451 4.7.1 Please try
>>>>> again
>>>>> later (TEMPFAIL)
>>>>> Jun 26 18:51:26 hermes sm-mta[25218]: m5Q6pMPP025218:
>>>>> from=<thing at thing.dyndns.org>, size=1007, class=0, nrcpts=0, 
>>>>> proto=ESMTP,
>>>>> daemon=MTA-v4, relay=[192.168.1.108]
>>>>> 8><---------
>>>>>
>>>>> regards
>>>>>
>>>>> Steven
>>>>> _______________________________________________
>>>>> Greylist-users mailing list
>>>>> Greylist-users at lists.puremagic.com
>>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>>>>
>>>>> _______________________________________________
>>>>> Greylist-users mailing list
>>>>> Greylist-users at lists.puremagic.com
>>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>>>
>>>>
>>>> _______________________________________________
>>>> Greylist-users mailing list
>>>> Greylist-users at lists.puremagic.com
>>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>>>
>>>
>>> _______________________________________________
>>> Greylist-users mailing list
>>> Greylist-users at lists.puremagic.com
>>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>
>>
>> _______________________________________________
>> Greylist-users mailing list
>> Greylist-users at lists.puremagic.com
>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>
>> _______________________________________________
>> Greylist-users mailing list
>> Greylist-users at lists.puremagic.com
>> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users
>>
>
> _______________________________________________
> Greylist-users mailing list
> Greylist-users at lists.puremagic.com
> http://lists.puremagic.com/cgi-bin/mailman/listinfo/greylist-users



More information about the Greylist-users mailing list