I was just creating some new content for the LJSHost knowledge base and thought this article would be a nice tutorial for all you WHM VPS owners with spam problems
Finding out what script is spamming on a WHM server
Spam or unsolicited email is a huge problem for anyone with a server, it is estimated that around 90% of all email worldwide is junk mail. Spammers can have a negative impact on your server in many ways included consuming all server resources resulting in poor performance and getting your IP address blacklisted preventing you from sending mail to some providers from your server.
Spammers send junk mail in a couple of different ways sometimes from an external mail client but more often from a script uploaded to your server. Compromised CMS platforms such as WordPress are often the cause of spam due to being hijacked by a hacker who is using your contact form to send thousands of messages.
So now you know the problem let's talk about what you can do about it and shut it down.
All mail servers have an MTA (Mail Transport Agent) that receives mail from mail clients, web applications and other servers which have mail for users on your server. WHM uses the Exim transport agent which this guide will be focusing on but these forensic techniques can be adjusted for other mail transport agents.
Locating the script that is spamming
This command will scan the exim_mainlog file which is where Exim logs all mail activity. It might look complex but it's just a few simple Linux command piped together.
How the command works
- Show all row with ‘cwd' (current working directory) in the log
- Use the grep with the -v to show an invert match, so to exlcude /var/spool which are normal Exim delivers not from a script.
- format the output so we only see the data we need.
- Sort the script paths by name, count them and format the output numerically from lowest to highest.
This is a typical output from the command. All user data is contained within the /home/ directory which are the results you want to focus on /etc/csf /root for example are system generated emails which are only internal sending firewall reports, cron job notifications etc.
As you can see from the output 1652 /home/account3/public_html/scripts is the most likely suspect and shows 1652 mails sent from a script in the scripts folder.
Lets take a look in the scripts directory to see what we find.
Here we find the script spam_script.php which is the php program sending the spam. In a real world situation the file will be called something innocent such as wp-plug-contact.php to make it look like a genuine file.
A quick view of this file will show mail() functions etc to send the spam.
All you need to do the stop the spam is delete the file.
Finding out what script is spamming on a WHM server
Spam or unsolicited email is a huge problem for anyone with a server, it is estimated that around 90% of all email worldwide is junk mail. Spammers can have a negative impact on your server in many ways included consuming all server resources resulting in poor performance and getting your IP address blacklisted preventing you from sending mail to some providers from your server.
Spammers send junk mail in a couple of different ways sometimes from an external mail client but more often from a script uploaded to your server. Compromised CMS platforms such as WordPress are often the cause of spam due to being hijacked by a hacker who is using your contact form to send thousands of messages.
So now you know the problem let's talk about what you can do about it and shut it down.
All mail servers have an MTA (Mail Transport Agent) that receives mail from mail clients, web applications and other servers which have mail for users on your server. WHM uses the Exim transport agent which this guide will be focusing on but these forensic techniques can be adjusted for other mail transport agents.
Locating the script that is spamming
Code:
grep cwd /var/log/exim_mainlog | grep -v /var/spool | awk -F"cwd=" '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n
How the command works
Code:
grep cwd /var/log/exim_mainlog
Code:
grep -v /var/spool
Code:
awk -F"cwd=" '{print $2}' | awk '{print $1}'
Code:
sort | uniq -c | sort -n
Code:
12 /home/account1/public_html/folder1
43 /home/account2
1652 /home/account3/public_html/scripts
32 /home/account12/data/
16 /home/account5/public_html
19 /home/account 9/public_html
7 /home/account21/public_html/content/scripts
14 /home/account43/public_html/wp-content/themes/twentythirteen
58 /home/account 45/public_html/tmp/
20 /home/account31/public_html/wp-includes/js/imgareaselect
346 /etc/csf
794 /usr/local/cpanel/whostmgr/docroot
1209 /
187175 /root
As you can see from the output 1652 /home/account3/public_html/scripts is the most likely suspect and shows 1652 mails sent from a script in the scripts folder.
Lets take a look in the scripts directory to see what we find.
Code:
ls -lahtr /home/account3/public_html/scripts
Code:
-rw-r--r-- 1 account3 account3 5.6K Apr 14 23:27 spam_script.php
A quick view of this file will show mail() functions etc to send the spam.
All you need to do the stop the spam is delete the file.