-Howto- Postfix sasl spamassassin clamav
Posted: 30 Apr 2007, 12:59
Hi,
I just love
this little bubba server and have received a lot of good help from people and excito on this forum. Because of this I desided that I wanted to share some of my configs for setting up a mailserver with antivirus, smtp-auth and antispam on bubba. I have gathered different configs that I have found in many different howtos on the Internet.
First of all there are many ways of doing this, I have mine running fine but it might not work well for you and I will not take responsibility for any damage or loss of data this might cause you, be warned but enjoy.
First of all log in to your bubba via ssh, and unmark the following apt sources:
#nano /etc/apt/sources.list
deb http://ftp.se.debian.org/debian/ sarge main
deb http://security.debian.org/ sarge/updates main
deb http://ftp.se.debian.org/debian/ sarge non-free
Do an update:
#apt-get update
Then we install some needed packages:
#apt-get install bzip2 php4-dev postfix-tls libsasl2 libsasl2-modules sasl2-bin make g++ zlib1g-dev
The following will show you how to compile clam antivirus from source, so that you will get the latest version of the engine. There is of course a more easier way by just doing apt-get install clamav. But these packages in apt get old quit quickly.
so
Install from apt:
apt-get install clamav
OR
Install from source:
#------------------------------------------
# Install CLAMAV
#------------------------------------------
#mkdir /tmp/clamav
#cd /tmp/clamav
#wget
wget http://dfn.dl.sourceforge.net/sourcefor ... 0.2.tar.gz
#tar zxvf clamav-0.90.2.tar.gz
#cd clamav-0.90.2
Uninstall -If you installed old version from source
#make uninstall
Now for installing clamav
#groupadd clamav
#useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
#./configure --enable-experimental -sysconfdir=/etc/clamav
#make
#make install
Edit and remark Example to #Example.
#nano /etc/clamav/clamd.conf
#Example
Edit and remark Example to #Example.
#nano /etc/clamav/freshclam.conf
#Example
Now lets start things automagicly.
#nano /etc/init.d/clamav
Add the following:
#!/bin/sh -e
# Start or stop clamav
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting Clamav"
/usr/local/sbin/clamd -c /etc/clamav/clamd.conf
;;
stop)
echo -n "Stopping Clamav"
kill -9 `ps ax | grep "/usr/local/sbin/clamd" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/clamav {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/clamav
and add it to the default runlevel(run at startup).
#update-rc.d clamav defaults
See to it that the clamd.conf looks like this, to make it communicate with clamsmpt.
#nano /usr/local/etc/clamd.conf
# ------------------------------------------------------------------------------
# SAMPLE CLAMAV CONFIG FILE
# ------------------------------------------------------------------------------
#Example
LogFile /var/log/clamd
LocalSocket /var/run/clamav/clamd
FixStaleSocket yes
User clamv
ScanMail yes
#mkdir /var/run/clamav
#chown clamav:clamav /var/run/clamav
#touch /var/log/clamd
#chmod 666 /var/log/clamd
next we will install clamsmtp it is a really lightweight proxy for clamav it is way faster than just using clamav directly with postfix.
Install clamsmtp from apt
apt-get install clamsmtpd
OR
Install clamsmtp from source
#------------------------------------------
# Install CLAMSMTP
#------------------------------------------
#mkdir /tmp/clamsmtp
#cd /tmp/clamsmtp
#wget http://memberwebs.com/nielsen/software/ ... 1.8.tar.gz
#tar zxvf clamsmtp-1.8.tar.gz
#cd clamsmtp-1.8
#./configure
#make
#make install
#cp doc/clamsmtpd.conf /etc/
/usr/local/sbin/clamsmtpd
#nano /etc/init.d/clamsmtp
#!/bin/sh -e
# Start or stop clamsmtp
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting Clamsmtp"
/usr/local/sbin/clamsmtpd -f /etc/clamsmtpd.conf
;;
stop)
echo -n "Stopping Clamsmtp"
kill -9 `ps ax | grep "/usr/local/sbin/clamsmtpd -f /etc/clamsmtpd.conf" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/clamsmtp {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/clamsmtp
and add it to the default runlevel(run on boot).
#update-rc.d clamsmtp defaults
Create config file.
#nano /etc/clamsmtpd.conf
# ------------------------------------------------------------------------------
# SAMPLE CLAMSMTPD CONFIG FILE
# ------------------------------------------------------------------------------
OutAddress: 10026
Listen: 127.0.0.1:10025
ClamAddress : /var/run/clamav/clamd
Quarantine: on
user: clamav
VirusAction: /usr/local/sbin/virus_action.sh
#nano /usr/local/sbin/virus_action.sh
#!/usr/bin/perl
$FROM = 'ClamSMTP <clamsmtp@example.com>'; # ????????
$TO = $ENV{RECIPIENTS}; # ????????
$MAILER = '/usr/sbin/sendmail -t';
open(F, $ENV{EMAIL}) or die;
@mail = <F>;
close(F);
$msg = <<EOM;
From: $FROM
To: $TO
Subject: Virus ($ENV{VIRUS}) From <$ENV{SENDER}>
A virus ($ENV{VIRUS}) was found.
The email sender:
$ENV{SENDER}
The email recipients:
$ENV{RECIPIENTS}
The message has been quarantined as:
EOM
open(F, "|$MAILER") or die "$MAILER: $!";
print F $msg;
foreach (@mail) { print F " $_"; }
print F ".\n";
close(F);
unlink($ENV{EMAIL});
#chmod 755 /usr/local/sbin/virus_action.sh
#nano /etc/postfix/main.cf
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
#nano /etc/postfix/master.cf
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Install spamassassin from apt
apt-get install spamassassin
OR
Install spamassassin from source.
#------------------------------------------
# Install SPAMASSASSIN
#------------------------------------------
#cd /tmp
#wget http://ftp.solace.miun.se/pub/apache/sp ... 1.8.tar.gz
#tar zxvf Mail-spamassassin-3.1.8.tar.gz
#cd Mail-SpamAssassin-3.1.8
There are a couple of required modules for spamassassin, install those and if you feel that you need to add functionality to spamassassin just add respective modules.
#cpan install Digest::SHA1
REQUIRED module missing: Digest::SHA1
REQUIRED module missing: HTML::Parser
optional module missing: Net::DNS
optional module missing: Mail::SPF::Query
optional module missing: IP::Country
optional module missing: Razor2
optional module missing: Net::Ident
optional module missing: IO::Socket::INET6
optional module missing: IO::Socket::SSL
optional module missing: LWP::UserAgent
optional module missing: HTTP::Date
optional module missing: Archive::Tar
optional module missing: IO::Zlib
#perl ./Makefile.pl
#make
#make install
#nano /etc/init.d/spamassassin
#!/bin/sh -e
# Start or stop spamd
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting spamd"
/usr/bin/spamd --create-prefs --max-children 5 --helper-home-dir -x --virtual-config-dir=/home/spamassassin &
;;
stop)
echo -n "Stopping spamd"
kill -9 `ps ax | grep "/usr/bin/spamd" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/spamassassin {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/spamassassin
and add it to the default runlevel.
#update-rc.d spamassassin defaults
Remove the remark on rewrite_header_subject.
#nano /etc/mail/spamassassin/local.cf
rewrite_header Subject *****SPAM*****
The following is for fixing error with auto learn, when spamc runs as user nobody with no home to store whitelists.
#mkdir /home/spamassassin
#chown nobody /home/spamassassin
modules for sa-update
#cpan install Net::DNS
#cpan isntall Archive::Tar
#apt-get install gnupg
Run and update spamassassin rule set.
#sa-update -D
#nano /etc/postfix/master.cf
smtp inet n - n - - smtpd
-o content_filter=spamassassin
#Spamassassin
spamassassin unix - n n - - pipe
user=nobody argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
The following install of eaccelerator i optional, this will give you some perfomance boost in php. Supposedly 10 times more, but I dont know havent benchmarkt.
#------------------------------------------
# Install eACCELERATOR
#------------------------------------------
Download eAccelerator source package to /root folder and extract it
#cd /tmp
#wget http://prdownloads.sourceforge.net/eacc ... 2?download
#tar jxvf eaccelerator-0.9.4.tar.bz2
#cd eaccelerator-0.9.4
Running phpize creates config file which is needed in make.
#/usr/bin/phpize
#./configure -with-eaccelerator-userid
#make
#make install
After this installation completed.
Edit file /etc/php4/apache2/php.ini and add following lines:
#nano /etc/php4/apache2/php.ini
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
Create temporary folder to eAccelerator
#mkdir /tmp/eaccelerator
#chmod 0777 /tmp/eaccelerator
Restart apache and you're finished with the eAccelerator configuration
#/etc/init.d/apache2 restart
Testing Your installation
Create test.php file with following lines on it:
<?php
eaccelerator();
?>
Testing php
Create phptest.php
<?php
phpinfo();
?>
If you have eAccelerator info shown on that page, accelerator is working
#------------------------------------------
# Install MIME_HEADER_CHECKS
#------------------------------------------
Rejecting unwanted files, viruses and worms, fast way
#nano /etc/postfix/main.cf
mime_header_checks = regexp:/etc/postfix/mime_header_checks
#nano /etc/postfix/mime_header_checks
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(exe|lnk|cpl|asd|hlp|ocx|reg|bat|c[ho]m|cmd|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|xl))"?\s*$/
REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
#------------------------------------------
# Install SASLAUTH
#------------------------------------------
#nano /etc/default/saslauthd
START=yes
PARAMS="-m /var/spool/postfix/var/run/saslauthd"
#nano /etc/init.d/postfix
edit /etc/init.d/postfix on line 43 or so, add “etc/sasldb2"
FILES="etc/localtime etc/services etc/resolv.conf etc/hosts etc/sasldb2 \
This way, postfix will copy sasldb2 on startup to the chroot directory
#mkdir -p /var/spool/postfix/var/run/saslauthd
#chown -R root.sasl /var/spool/postfix/var/run/saslauthd
#mkdir /etc/postfix/sasl
#cd /etc/postfix/sasl
#nano smtpd.conf
pwcheck_method: saslauthd
#nano /etc/postfix/main.cf
mynetworks = 127.0.0.0/8
smtpd_tls_auth_only = no //If everything works change to yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
Add to current smtpd_recipient_restrictions
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
reject_unauth_destination
reject_unauth_pipelining
reject_invalid_hostname
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_rbl_client list.dsbl.org
reject_rbl_client relays.ordb.org
reject_rbl_client dnsbl.njabl.org
reject_rbl_client dnsbl.sorbs.net
reject_rbl_client bl.spamcop.net
smtpd_reject_unlisted_sender = yes
Testing sasl functionality
#perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
e.g.
#perl -MMIME::Base64 -e 'print encode_base64("jimmy\0jimmy\0real-secret");'
#amltbXkAamltbXkAcmVhbC1zZWNyZXQ=
jimmy@reptile:~$ telnet jimmy.test.com 25
Trying 1.2.3.4...
Connected to jimmy.test.com
Escape character is '^]'.
220 kitana.test.com at ESMTP Mailserver
ehlo reptile.test.com
250-kitana.jimmy.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH PLAIN amltbXkAamltbXkAcmVhbC1zZWNyZXQ=
235 Authentication successful
Installing postgrey is option, It will reduce spam dramatically but will eat ram and cpu usage.
#------------------------------------------
# Install POSTGREY
#------------------------------------------
##Sudo apt-get install postgrey
##sudo nano /etc/postfix/main.cf
##smtpd_recipient_restrictions =
## permit_sasl_authenticated,
## permit_mynetworks,
## check_relay_domains,
## check_policy_service inet:127.0.0.1:60000
#------------------------------------------
# Install POSTFIX CA/CERTS
#------------------------------------------
##sudo nano /etc/postfix/main.cf
##smtpd_use_tls=yes
##smtpd_tls_auth_only=yes
##smtpd_tls_cert_file=/etc/postfix/cert/postfix.cert
##smtpd_tls_key_file=/etc/postfix/cert/postfix.key
##mkdir /etc/postfix/cert
##cd /etc/postfix/cert
##sudo openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout
##postfix.key -keyform PEM -days 3065 -x509
or
#mkdir /etc/postfix/cert
#cd /etc/postfix/cert
Create HOME-CA
#/usr/lib/ssl/misc/CA.pl -newca
Create an unpassworded private key for host bubba and create an unsigned public key certificate.
#openssl req -new -nodes -keyout bubba-key.pem -out bubba-req.pem -days 365
Sign the public key certificate for host bubba with the Certification Authority private key that we created a few steps ago.
#openssl ca -out bubba-cert.pem -infiles bubba-req.pem
#cp demoCA/cacert.pem bubba-key.pem bubba-cert.pem /etc/postfix/cert
#chmod 644 /etc/postfix/cert/bubba-cert.pem /etc/postfix/cert/cacert.pem
#chmod 400 /etc/postfix/cert/bubba-key.pem
#nano /etc/postfix/main.cf
smtp_tls_CAfile = /etc/postfix/cert/cacert.pem
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/cert/cacert.pem
smtpd_tls_cert_file = /etc/postfix/cert/bubba-cert.pem
smtpd_tls_key_file = /etc/postfix/cert/bubba-key.pem
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom
smtpd_use_tls = yes
#------------------------------------------
# Install DOVECOT/CERT
#------------------------------------------
#cd /etc/dovecot
#nano dovecot.conf
protocols = imap imaps
ssl_cert_file = /etc/dovecot/imapcert.cert
ssl_key_file = /etc/dovecot/imapkey.key
#openssl req -new -outform PEM -out imapcert.cert -newkey rsa:2048 -nodes -keyout
imapkey.key -keyform PEM -days 3065 -x509
#chmod 644 /etc/dovecot/imapcert.cert
#chmod 400 /etc/dovecot/imapkey.key
the following is a script for training the ham and spam rules of spamassasin. when you recieive a ham or spam just mail it to spam@yourdomain or notspam@yourdomain.
#------------------------------------------
# Install SPAM/NOTSPAM USERS/SCRIPTS
#------------------------------------------
#adduser --disabled-login spam
#adduser --disabled-login notspam
#nano /bin/delnotspam:
#!/bin/bash
cd /home/notspam/Mail/new
rm *
#nano /bin/delspam:
#!/bin/bash
cd /home/spam/Mail/new
rm *
#chmod 755 /bin/delnotspam
#chmod 755 /bin/delspam
#------------------------------------------
# Install CRONTAB -E
#------------------------------------------
#crontab -e
10 12 * * * /usr/bin/sa-learn --ham /home/notspam/Mail/new >> /var/log/sa-train.log | echo "Ham done: $(date)" >> /var/log/sa-train.log
* * * 0 * /bin/delnotspam
40 12 * * * /usr/bin/sa-learn --spam /home/spam/Mail/new >> /var/log/sa-train.log | echo "Spam done: $(date)" >>/var/log/sa-train.log
* * * 0 * /bin/delspam
#Update virusdatabase
* 22 * * * /usr/local/bin/freshclam
#run a virus check, is extremlly slow.
* 23 * * * /usr/local/bin/clamscan / -r -i -l /var/log/clamscan.log
#update spamassassin rules
* 20 * * * /usr/bin/sa-update -D
Done!
test your system with:
Spam:
http://spamassassin.apache.org/gtube/
Virus:
http://www.eicar.org/anti_virus_test_file.htm
Openrelay:
http://www.abuse.net/relay.html
This should give you a working system, but I might have forgotten something.
This setup will force smpt auth when users send mail(relay) out publically, unfortunatelly it will allow local users to still send mail internally without smtp auth, this could be used to send fake(forged) mails internally.
If you know how to fix this PLEASE leave suggestions.
One solution is to get iptables working and block all ports except 25, and use a webmail interface, then local forged mails should not work.
You will also get a virus and spamfiltering server.
/limpo
I just love

First of all there are many ways of doing this, I have mine running fine but it might not work well for you and I will not take responsibility for any damage or loss of data this might cause you, be warned but enjoy.
First of all log in to your bubba via ssh, and unmark the following apt sources:
#nano /etc/apt/sources.list
deb http://ftp.se.debian.org/debian/ sarge main
deb http://security.debian.org/ sarge/updates main
deb http://ftp.se.debian.org/debian/ sarge non-free
Do an update:
#apt-get update
Then we install some needed packages:
#apt-get install bzip2 php4-dev postfix-tls libsasl2 libsasl2-modules sasl2-bin make g++ zlib1g-dev
The following will show you how to compile clam antivirus from source, so that you will get the latest version of the engine. There is of course a more easier way by just doing apt-get install clamav. But these packages in apt get old quit quickly.
so
Install from apt:
apt-get install clamav
OR
Install from source:
#------------------------------------------
# Install CLAMAV
#------------------------------------------
#mkdir /tmp/clamav
#cd /tmp/clamav
#wget
wget http://dfn.dl.sourceforge.net/sourcefor ... 0.2.tar.gz
#tar zxvf clamav-0.90.2.tar.gz
#cd clamav-0.90.2
Uninstall -If you installed old version from source
#make uninstall
Now for installing clamav
#groupadd clamav
#useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
#./configure --enable-experimental -sysconfdir=/etc/clamav
#make
#make install
Edit and remark Example to #Example.
#nano /etc/clamav/clamd.conf
#Example
Edit and remark Example to #Example.
#nano /etc/clamav/freshclam.conf
#Example
Now lets start things automagicly.
#nano /etc/init.d/clamav
Add the following:
#!/bin/sh -e
# Start or stop clamav
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting Clamav"
/usr/local/sbin/clamd -c /etc/clamav/clamd.conf
;;
stop)
echo -n "Stopping Clamav"
kill -9 `ps ax | grep "/usr/local/sbin/clamd" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/clamav {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/clamav
and add it to the default runlevel(run at startup).
#update-rc.d clamav defaults
See to it that the clamd.conf looks like this, to make it communicate with clamsmpt.
#nano /usr/local/etc/clamd.conf
# ------------------------------------------------------------------------------
# SAMPLE CLAMAV CONFIG FILE
# ------------------------------------------------------------------------------
#Example
LogFile /var/log/clamd
LocalSocket /var/run/clamav/clamd
FixStaleSocket yes
User clamv
ScanMail yes
#mkdir /var/run/clamav
#chown clamav:clamav /var/run/clamav
#touch /var/log/clamd
#chmod 666 /var/log/clamd
next we will install clamsmtp it is a really lightweight proxy for clamav it is way faster than just using clamav directly with postfix.
Install clamsmtp from apt
apt-get install clamsmtpd
OR
Install clamsmtp from source
#------------------------------------------
# Install CLAMSMTP
#------------------------------------------
#mkdir /tmp/clamsmtp
#cd /tmp/clamsmtp
#wget http://memberwebs.com/nielsen/software/ ... 1.8.tar.gz
#tar zxvf clamsmtp-1.8.tar.gz
#cd clamsmtp-1.8
#./configure
#make
#make install
#cp doc/clamsmtpd.conf /etc/
/usr/local/sbin/clamsmtpd
#nano /etc/init.d/clamsmtp
#!/bin/sh -e
# Start or stop clamsmtp
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting Clamsmtp"
/usr/local/sbin/clamsmtpd -f /etc/clamsmtpd.conf
;;
stop)
echo -n "Stopping Clamsmtp"
kill -9 `ps ax | grep "/usr/local/sbin/clamsmtpd -f /etc/clamsmtpd.conf" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/clamsmtp {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/clamsmtp
and add it to the default runlevel(run on boot).
#update-rc.d clamsmtp defaults
Create config file.
#nano /etc/clamsmtpd.conf
# ------------------------------------------------------------------------------
# SAMPLE CLAMSMTPD CONFIG FILE
# ------------------------------------------------------------------------------
OutAddress: 10026
Listen: 127.0.0.1:10025
ClamAddress : /var/run/clamav/clamd
Quarantine: on
user: clamav
VirusAction: /usr/local/sbin/virus_action.sh
#nano /usr/local/sbin/virus_action.sh
#!/usr/bin/perl
$FROM = 'ClamSMTP <clamsmtp@example.com>'; # ????????
$TO = $ENV{RECIPIENTS}; # ????????
$MAILER = '/usr/sbin/sendmail -t';
open(F, $ENV{EMAIL}) or die;
@mail = <F>;
close(F);
$msg = <<EOM;
From: $FROM
To: $TO
Subject: Virus ($ENV{VIRUS}) From <$ENV{SENDER}>
A virus ($ENV{VIRUS}) was found.
The email sender:
$ENV{SENDER}
The email recipients:
$ENV{RECIPIENTS}
The message has been quarantined as:
EOM
open(F, "|$MAILER") or die "$MAILER: $!";
print F $msg;
foreach (@mail) { print F " $_"; }
print F ".\n";
close(F);
unlink($ENV{EMAIL});
#chmod 755 /usr/local/sbin/virus_action.sh
#nano /etc/postfix/main.cf
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
#nano /etc/postfix/master.cf
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Install spamassassin from apt
apt-get install spamassassin
OR
Install spamassassin from source.
#------------------------------------------
# Install SPAMASSASSIN
#------------------------------------------
#cd /tmp
#wget http://ftp.solace.miun.se/pub/apache/sp ... 1.8.tar.gz
#tar zxvf Mail-spamassassin-3.1.8.tar.gz
#cd Mail-SpamAssassin-3.1.8
There are a couple of required modules for spamassassin, install those and if you feel that you need to add functionality to spamassassin just add respective modules.
#cpan install Digest::SHA1
REQUIRED module missing: Digest::SHA1
REQUIRED module missing: HTML::Parser
optional module missing: Net::DNS
optional module missing: Mail::SPF::Query
optional module missing: IP::Country
optional module missing: Razor2
optional module missing: Net::Ident
optional module missing: IO::Socket::INET6
optional module missing: IO::Socket::SSL
optional module missing: LWP::UserAgent
optional module missing: HTTP::Date
optional module missing: Archive::Tar
optional module missing: IO::Zlib
#perl ./Makefile.pl
#make
#make install
#nano /etc/init.d/spamassassin
#!/bin/sh -e
# Start or stop spamd
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting spamd"
/usr/bin/spamd --create-prefs --max-children 5 --helper-home-dir -x --virtual-config-dir=/home/spamassassin &
;;
stop)
echo -n "Stopping spamd"
kill -9 `ps ax | grep "/usr/bin/spamd" | grep -v grep | awk '{ print $1 }'`
;;
restart)
$0 stop || true
$0 start
;;
*)
echo "Usage: /etc/init.d/spamassassin {start|stop|restart}"
exit 1
;;
esac
exit 0
Set the permissions.
#chmod 755 /etc/init.d/spamassassin
and add it to the default runlevel.
#update-rc.d spamassassin defaults
Remove the remark on rewrite_header_subject.
#nano /etc/mail/spamassassin/local.cf
rewrite_header Subject *****SPAM*****
The following is for fixing error with auto learn, when spamc runs as user nobody with no home to store whitelists.
#mkdir /home/spamassassin
#chown nobody /home/spamassassin
modules for sa-update
#cpan install Net::DNS
#cpan isntall Archive::Tar
#apt-get install gnupg
Run and update spamassassin rule set.
#sa-update -D
#nano /etc/postfix/master.cf
smtp inet n - n - - smtpd
-o content_filter=spamassassin
#Spamassassin
spamassassin unix - n n - - pipe
user=nobody argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
The following install of eaccelerator i optional, this will give you some perfomance boost in php. Supposedly 10 times more, but I dont know havent benchmarkt.
#------------------------------------------
# Install eACCELERATOR
#------------------------------------------
Download eAccelerator source package to /root folder and extract it
#cd /tmp
#wget http://prdownloads.sourceforge.net/eacc ... 2?download
#tar jxvf eaccelerator-0.9.4.tar.bz2
#cd eaccelerator-0.9.4
Running phpize creates config file which is needed in make.
#/usr/bin/phpize
#./configure -with-eaccelerator-userid
#make
#make install
After this installation completed.
Edit file /etc/php4/apache2/php.ini and add following lines:
#nano /etc/php4/apache2/php.ini
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
Create temporary folder to eAccelerator
#mkdir /tmp/eaccelerator
#chmod 0777 /tmp/eaccelerator
Restart apache and you're finished with the eAccelerator configuration
#/etc/init.d/apache2 restart
Testing Your installation
Create test.php file with following lines on it:
<?php
eaccelerator();
?>
Testing php
Create phptest.php
<?php
phpinfo();
?>
If you have eAccelerator info shown on that page, accelerator is working
#------------------------------------------
# Install MIME_HEADER_CHECKS
#------------------------------------------
Rejecting unwanted files, viruses and worms, fast way
#nano /etc/postfix/main.cf
mime_header_checks = regexp:/etc/postfix/mime_header_checks
#nano /etc/postfix/mime_header_checks
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(exe|lnk|cpl|asd|hlp|ocx|reg|bat|c[ho]m|cmd|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|xl))"?\s*$/
REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
#------------------------------------------
# Install SASLAUTH
#------------------------------------------
#nano /etc/default/saslauthd
START=yes
PARAMS="-m /var/spool/postfix/var/run/saslauthd"
#nano /etc/init.d/postfix
edit /etc/init.d/postfix on line 43 or so, add “etc/sasldb2"
FILES="etc/localtime etc/services etc/resolv.conf etc/hosts etc/sasldb2 \
This way, postfix will copy sasldb2 on startup to the chroot directory
#mkdir -p /var/spool/postfix/var/run/saslauthd
#chown -R root.sasl /var/spool/postfix/var/run/saslauthd
#mkdir /etc/postfix/sasl
#cd /etc/postfix/sasl
#nano smtpd.conf
pwcheck_method: saslauthd
#nano /etc/postfix/main.cf
mynetworks = 127.0.0.0/8
smtpd_tls_auth_only = no //If everything works change to yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
Add to current smtpd_recipient_restrictions
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
reject_unauth_destination
reject_unauth_pipelining
reject_invalid_hostname
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_rbl_client list.dsbl.org
reject_rbl_client relays.ordb.org
reject_rbl_client dnsbl.njabl.org
reject_rbl_client dnsbl.sorbs.net
reject_rbl_client bl.spamcop.net
smtpd_reject_unlisted_sender = yes
Testing sasl functionality
#perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
e.g.
#perl -MMIME::Base64 -e 'print encode_base64("jimmy\0jimmy\0real-secret");'
#amltbXkAamltbXkAcmVhbC1zZWNyZXQ=
jimmy@reptile:~$ telnet jimmy.test.com 25
Trying 1.2.3.4...
Connected to jimmy.test.com
Escape character is '^]'.
220 kitana.test.com at ESMTP Mailserver
ehlo reptile.test.com
250-kitana.jimmy.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH PLAIN amltbXkAamltbXkAcmVhbC1zZWNyZXQ=
235 Authentication successful
Installing postgrey is option, It will reduce spam dramatically but will eat ram and cpu usage.
#------------------------------------------
# Install POSTGREY
#------------------------------------------
##Sudo apt-get install postgrey
##sudo nano /etc/postfix/main.cf
##smtpd_recipient_restrictions =
## permit_sasl_authenticated,
## permit_mynetworks,
## check_relay_domains,
## check_policy_service inet:127.0.0.1:60000
#------------------------------------------
# Install POSTFIX CA/CERTS
#------------------------------------------
##sudo nano /etc/postfix/main.cf
##smtpd_use_tls=yes
##smtpd_tls_auth_only=yes
##smtpd_tls_cert_file=/etc/postfix/cert/postfix.cert
##smtpd_tls_key_file=/etc/postfix/cert/postfix.key
##mkdir /etc/postfix/cert
##cd /etc/postfix/cert
##sudo openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout
##postfix.key -keyform PEM -days 3065 -x509
or
#mkdir /etc/postfix/cert
#cd /etc/postfix/cert
Create HOME-CA
#/usr/lib/ssl/misc/CA.pl -newca
Create an unpassworded private key for host bubba and create an unsigned public key certificate.
#openssl req -new -nodes -keyout bubba-key.pem -out bubba-req.pem -days 365
Sign the public key certificate for host bubba with the Certification Authority private key that we created a few steps ago.
#openssl ca -out bubba-cert.pem -infiles bubba-req.pem
#cp demoCA/cacert.pem bubba-key.pem bubba-cert.pem /etc/postfix/cert
#chmod 644 /etc/postfix/cert/bubba-cert.pem /etc/postfix/cert/cacert.pem
#chmod 400 /etc/postfix/cert/bubba-key.pem
#nano /etc/postfix/main.cf
smtp_tls_CAfile = /etc/postfix/cert/cacert.pem
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/cert/cacert.pem
smtpd_tls_cert_file = /etc/postfix/cert/bubba-cert.pem
smtpd_tls_key_file = /etc/postfix/cert/bubba-key.pem
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom
smtpd_use_tls = yes
#------------------------------------------
# Install DOVECOT/CERT
#------------------------------------------
#cd /etc/dovecot
#nano dovecot.conf
protocols = imap imaps
ssl_cert_file = /etc/dovecot/imapcert.cert
ssl_key_file = /etc/dovecot/imapkey.key
#openssl req -new -outform PEM -out imapcert.cert -newkey rsa:2048 -nodes -keyout
imapkey.key -keyform PEM -days 3065 -x509
#chmod 644 /etc/dovecot/imapcert.cert
#chmod 400 /etc/dovecot/imapkey.key
the following is a script for training the ham and spam rules of spamassasin. when you recieive a ham or spam just mail it to spam@yourdomain or notspam@yourdomain.
#------------------------------------------
# Install SPAM/NOTSPAM USERS/SCRIPTS
#------------------------------------------
#adduser --disabled-login spam
#adduser --disabled-login notspam
#nano /bin/delnotspam:
#!/bin/bash
cd /home/notspam/Mail/new
rm *
#nano /bin/delspam:
#!/bin/bash
cd /home/spam/Mail/new
rm *
#chmod 755 /bin/delnotspam
#chmod 755 /bin/delspam
#------------------------------------------
# Install CRONTAB -E
#------------------------------------------
#crontab -e
10 12 * * * /usr/bin/sa-learn --ham /home/notspam/Mail/new >> /var/log/sa-train.log | echo "Ham done: $(date)" >> /var/log/sa-train.log
* * * 0 * /bin/delnotspam
40 12 * * * /usr/bin/sa-learn --spam /home/spam/Mail/new >> /var/log/sa-train.log | echo "Spam done: $(date)" >>/var/log/sa-train.log
* * * 0 * /bin/delspam
#Update virusdatabase
* 22 * * * /usr/local/bin/freshclam
#run a virus check, is extremlly slow.
* 23 * * * /usr/local/bin/clamscan / -r -i -l /var/log/clamscan.log
#update spamassassin rules
* 20 * * * /usr/bin/sa-update -D
Done!
test your system with:
Spam:
http://spamassassin.apache.org/gtube/
Virus:
http://www.eicar.org/anti_virus_test_file.htm
Openrelay:
http://www.abuse.net/relay.html
This should give you a working system, but I might have forgotten something.
This setup will force smpt auth when users send mail(relay) out publically, unfortunatelly it will allow local users to still send mail internally without smtp auth, this could be used to send fake(forged) mails internally.
If you know how to fix this PLEASE leave suggestions.
One solution is to get iptables working and block all ports except 25, and use a webmail interface, then local forged mails should not work.
You will also get a virus and spamfiltering server.
/limpo