karmad - Karmasphere daemon for postfix and exim
This is a small daemon which listens on a Unix domain socket and interfaces between Postfix or Exim and Mail::Karmasphere::Client.
See the sample configuration and startup files in the eg/ directory of the source distribution for more information.
If you're running postfix, set --mta=postfix and karmad will behave as an SMTPD policy daemon.
If you're running exim, set --mta=exim and use the exim ACL provided with Mail::Karmasphere::Client.
If you're running postfix, you can set --action to one of prepend (default) or reject). Prepend will prepend an X-Karma header. Reject will cause any mail with a karma score below -300 to be rejected. Use this only if you are happy with the results you've observed.
prepend
reject
Query credentials for authenticated queries. You only need to set this if you're querying a restricted feedset. For more information, see http://www.karmasphere.com/devzone/client/configuration#credentials
Where to listen. Defaults to /tmp/karmad. You probably don't need to set this.
Hostname of the Karmasphere Query Server to connect to. Defaults to query.karmasphere.com. You probably don't need to set this, unless you have set up a local query server, in which case you should be following the directions provided with that server.
The name of the feedset you want to query. Defaults to karmasphere.email-sender. You probably don't need to set this.
Who to listen as; defaults to 'nobody'. The socket file will be chowned to this user and group. You probably don't need to set this.
Mode to chmod the socket. You probably don't need to set this.
When running, setuid to this user and group. Defaults to 'nobody', 'nobody'. You probably don't need to set this.
Connect to the socket (default: /tmp/karmad) and send the following newline-terminated stanza:
client_address=192.0.2.1 helo_name=host.example.com sender=localpart@example.com
Each of the above lines is optional; you may omit whatever is unavailable.
If all goes well, Karmad will return the following stanza:
value=NN opinion=(good|bad|neutral) data=.....
"Value" is a number between -1000 and +1000.
"Opinion" is one of good, bad, or neutral. If the value is greater than 300, opinion is good. If the value is less than -300, the opinion is bad. If it's between, opinion is neutral.
"Data" contains a brief explanation of how the verdict was reached.
If an error occurs, Karmad will return:
error=...
usually, something like
error=timeout error=Incorrect user and/or password.
First, run karmad:
% ./karmad --username=foo --password=bar
Then, connect to it:
% perl -MIO::Socket::UNIX -le 'my $sock = IO::Socket::UNIX->new("/tmp/karmad"); print $sock "ip=127.0.0.2\n"; print <$sock>;' value=-1000 opinion=bad data=some.feedname: if-bad(0) => return-bad(1.0)
You should expect to see some STDERR from the karmad.
The karmac script does pretty much the same thing.
karmac
If troubleshooting is necessary, try running karmaclient: it talks to Karmasphere directly, without going through karmad.
In the response, "opinion" might be more correctly termed "verdict".
Mail::Karmasphere::Client Mail::Karmasphere::Query Mail::Karmasphere::Response karmaclient http://www.karmasphere.com/ http://www.postfix.org/SMTPD_POLICY_README.html
Copyright (c) 2005 Shevek, Karmasphere. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Mail::Karmasphere::Client, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mail::Karmasphere::Client
CPAN shell
perl -MCPAN -e shell install Mail::Karmasphere::Client
For more information on module installation, please visit the detailed CPAN module installation guide.