==== Spamassassin ====
Setup on Debian for use with EXIM.
===Install===
apt-get install spamassassin sa-compile
===Configure===
==Local==
Edit /etc/spamassassin/local.cf to add local rules.
==Compile==
Compiling rules will speed up spamd but it will work otherwise.
__compile-spamd.sh__
#! /bin/sh
sa-compile
chown -R debian-spamd:debian-spamd /var/lib/spamassassin
chmod -R go-w,go+rX /var/lib/spamassassin/compiled
kill -HUP `cat /var/run/spamd.pid`
exit 0
==Update==
Run from cron once per day to download new rules and recompile.
__update-spamd.sh__
#! /bin/sh
sa-update --nogpg
if test $? -eq 0; then
compile-spamd.sh
fi
exit 0
===Run it===
#! /bin/sh
export TZ="UTC"
rm -f /var/run/spamd.pid
exec /usr/sbin/spamd --helper-home-dir=/var/lib/spamassassin --create-prefs --nouser-config -udebian-spamd -gdebian-spamd --socketpath=/var/run/spamd.sock --socketowner=debian-spamd --socketgroup=debian-spamd --socketmode=0777 --max-children 5 --pidfile /var/run/spamd.pid
=== Plugin===
Example plugin I wrote to catch fake mailing list spam.
#! /usr/bin/perl
#
# By
# Darron M Broad, July 2022
#
# See
# https://spamassassin.apache.org/full/3.4.x/doc/Mail_SpamAssassin_Plugin.html
# https://spamassassin.apache.org/full/3.4.x/doc/Mail_SpamAssassin_Logger.html
# https://spamassassin.apache.org/full/3.4.x/doc/Mail_SpamAssassin_PerMsgStatus.html
#
# /etc/spamassassin/local.cf:
# loadplugin LocalPlugin /etc/spamassassin/local/plugin.pm
# header LOCAL_FAKE_LIST eval:check_for_fake_list()
# score LOCAL_FAKE_LIST 100
# describe LOCAL_FAKE_LIST From Fake List
package LocalPlugin;
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Logger;
use Mail::SpamAssassin::PerMsgStatus;
our @ISA = qw(Mail::SpamAssassin::Plugin);
sub new
{
my($class, $mailsa) = @_;
$class = ref($class) || $class;
my $self = $class->SUPER::new($mailsa);
bless ($self, $class);
$self->register_eval_rule("check_for_fake_list");
info("LocalPlugin: REGISTERED");
return $self;
}
sub check_for_fake_list
{
my($self, $permsgstatus) = @_;
$from = $permsgstatus->get("EnvelopeFrom");
my @to = split /@/, $permsgstatus->get("To:addr"); # x@y.z
my $name = $to[0];
my $host = $to[1];
if ($from && $name && $host) {
# *mail-user=host@mail.*
if ((index $from, "mail-$name=$host\@mail\.") > 0) {
info("LocalPlugin: SPAM $from");
return 1;
}
# newsletter-user=host@mail.*
if ((rindex $from, "newsletter-$name=$host\@mail\.", 0) == 0) {
info("LocalPlugin: SPAM $from");
return 1;
}
}
return 0;
}
1;
# vim: shiftwidth=4 tabstop=4 noexpandtab
===Spam===
Here is a PHP command line tool to send test spam.
Change Host, Sender and addAddress as appropriate.
#! /usr/bin/php -q
SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host = 'localhost';
$mail->SMTPAuth = false;
$mail->Sender = "newsletter-root=example.com@mail.example.com";
$mail->setFrom('root@example.com', 'SPAM');
$mail->addAddress('root@example.com', "SPAM");
$mail->addReplyTo('root@example.com', 'SPAM');
$mail->isHTML(false);
$mail->Subject = 'Subject';
$mail->Body = 'Body';
try {
$mail->send();
}
catch (Exception $e) {
echo $e->getMessage();
}
/*
* vim: shiftwidth=4 tabstop=4 softtabstop=4 expandtab
*/
?>