Postfix mit Spamassassin und virtuellen Usern

treebeard

Registered User
Hallo,

ich habe unter Suse 10.1 ein Postfix/Cyrus-Mailserver. Da ich inzwischen auch von der Spamflut geplagt bin, habe ich mir den Spamassassin installiert. Um nun für mehrere Benutzer eine Whitelist/Blacklist zu ermöglichen habe ich diesen mit einer MySQL-Datenbank verbunden.

Hier die Anleitungen, die ich benutzt habe und mir geholfen haben:
Spamassassin unter Suse mit Postfix installieren
Spamassassin Wiki - Using SQL
Loading SpamAssassin User Preferences From An SQL Database

Die Tabelle userpref ist so aufgebaut:
Code:
CREATE TABLE `userpref` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `username` varchar(128) NOT NULL default '',
  `preference` varchar(64) NOT NULL default '',
  `value` varchar(128) default NULL,
  `descript` varchar(128) default NULL,
  `added` datetime NOT NULL default '2003-01-01 00:00:00',
  `added_by` varchar(128) NOT NULL default '',
  `modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  UNIQUE KEY `id` (`id`),
  KEY `type` (`preference`),
  KEY `added_by` (`added_by`),
  KEY `preference` (`preference`),
  KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Spamassassin Preferences' AUTO_INCREMENT=15 ;

Hier der Code meiner SQL.cf in /etc/mail/spamassassin/:

Code:
[root@mailgw spamassassin]# cat sql.cf
user_scores_dsn                  DBI:mysql:logs:localhost:3306
user_scores_sql_password         password
user_scores_sql_username         username
user_scores_sql_custom_query     SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
(ohne Zeilenumbruch bei den 4 Zeilen)


Hier zum Problem:
Es scheint dass der username nicht richtig ausgewertet wird.

Ich habe mal diesen Datensatz in die Tabelle userpref angelegt:
Code:
INSERT INTO `userpref` (`id`, `username`, `preference`, `value`, `descript`, `added`, `added_by`, `modified`) VALUES
('', '$GLOBAL', 'blacklist_from', '[email protected]', NULL, '', '', '');

Damit klappt die Filterung auch. $GLOBAL wird ausgewertet und die Mails von [email protected] vom Spamassassin als Spam markiert (102 Punkte).

Wenn ich statt $GLOBAL meine eigene Mailadresse angebe, dann klappt das nicht:
Code:
INSERT INTO `userpref` (`id`, `username`, `preference`, `value`, `descript`, `added`, `added_by`, `modified`) VALUES
('', '[email protected]', 'blacklist_from', '[email protected]', NULL, '', '', '');

Die Mail wird nicht als Spam markiert.

Hier zur Konfiguration von Postfix die relevanten Einträge in der master.cf:
Code:
spamfilter unix -       n       n       -       -       pipe
  flags=Rq user=filter argv=/usr/bin/postfixfilter -f ${sender} -- ${recipient}

Und hier die /usr/bin/postfixfilter:
Code:
#!/bin/bash
/usr/bin/spamc  | /usr/sbin/sendmail -i "$@"
exit $?


Dann bekomme ich im SQL-log diese Anfrage:

Code:
SELECT preference, value FROM userpref WHERE username = 'filter' OR username = '$GLOBAL' OR username = CONCAT('%',NULL) ORDER BY username ASC

Als username wird der user filter gesetzt und nicht die Mailadresse des virtuellen Mailusers.
Hier muss irgendwie der Parameter -u übergeben werden, damit der Aufruf an die Variable _USERNAME_ und _DOMAIN_ korrekt übergeben wird.

Wenn ich die Datei /usr/bin/postfixfilter manuell abändere auf:

Code:
#!/bin/bash
/usr/bin/spamc -u '[email protected]'  | /usr/sbin/sendmail -i "$@"
exit $?

Dann bekomme ich im SQL-log diese Anfrage:

Code:
SELECT preference, value FROM _TABLE_ WHERE username = '[email protected]' OR username = '$GLOBAL' OR username = CONCAT('%','email.de') ORDER BY username ASC


Kann ich den pipe-Service irgendwie anweisen den user an spamc zu übergeben?
 
Ich hatte das mit -u @ARV[0] schon probiert. Aber das Skript scheint diese Variable nicht aufzunehmen.

Wie muss ich das Skript denn anpassen?

Das war mein Code:
Code:
#!/bin/bash
/usr/bin/spamc -u @ARGV[0]  | /usr/sbin/sendmail -i "$@"
exit $?
 
ok, vielen Dank.
Habe mal eben drüber geschaut, was da in der Parameter Section alles drin steht. Ich fang mal an das alles zu studieren. Bisher habe ich nur Bahnhof verstanden. Melde mich dann halt irgendwann wieder, wenn ich mir das mal in Ruhe zu Gemüte geführt habe. Danke bis dahin.
 
Back
Top