22 Feb 2021

How To Install ClamAV On A CPanel Server

Steps To Install ClamAV On A CPanel Server

Here I’m explaining the steps to install ClamAV on a cPanel server. Before proceeding with this, first you need to make sure WHM plugin clamavconnector is not installed. Check WHM >> Manage plugins

1: If you would like to verify ClamAV’s digital signatures on the virus definition files as they are updated through freshclam, you need to install GMP first.

# /scripts/ensurerpm gmp gmp-devel bzip2-devel

2: Adding user and group for clamav

# useradd clamav
# groupadd clamav

Note: Don’t worry if the user and/or group already exists.

3: Create and chown clamav directory

# mkdir /usr/local/share/clamav
# chown clamav. /usr/local/share/clamav

4: Download the latest ClamAV from http://www.clamav.net/

# wget http://www.clamav.net/downloads/production/clamav-0.99.tar.gz
# tar -xvzf clamav-0.99.tar.gz
# cd clamav-0.99
# ./configure --disable-zlib-vcheck
# make
# make install

#mv -fv /usr/local/etc/freshclam.conf.sample /usr/local/etc/freshclam.conf

5: Comment out “Example” line in /usr/local/etc/freshclam.conf

[email protected] [/]# cat /usr/local/etc/freshclam.conf | grep -i example
## Example config file for freshclam

#mv -fv /usr/local/etc/clamd.conf.sample /usr/local/etc/clamd.conf

6: Comment out “Example” line in /usr/local/etc/clamd.conf

[email protected] [/]# cat /usr/local/etc/clamd.conf | grep -i example
## Example config file for the Clam AV daemon

7: Change the “LocalSocket” to /tmp/clamd in /usr/local/etc/clamd.conf

[email protected] [/]# grep LocalSocket /usr/local/etc/clamd.conf
LocalSocket /tmp/clamd.socket

8: Run ldconfig to create the necessary links and cache to the most recent shared libraries

# ldconfig

9: Run freshclam to download the latest definitions

# freshclam

10: Init script for CentOS/CloudLinux upto/including version 6.x

# curl https://download.configserver.com/clamd -o /etc/init.d/clamd
# chown root:root /etc/init.d/clamd
# chmod +x /etc/init.d/clamd
# chkconfig clamd on
# service clamd restart

11: Init script for CentOS/CloudLinux version 7.x

# rm -fv /etc/init.d/clamd
# curl https://download.configserver.com/clamd.service -o /usr/lib/systemd/system/clamd.service
# systemctl daemon-reload
# systemctl enable clamd.service
# systemctl restart clamd.service

12: Add service to /etc/chkserv.d/clamav

[email protected] [/]# cat  /etc/chkserv.d/clamav
service[clamav]=x,x,x,service clamd restart,clamd,root

13: Creating log files for ClamAV updates

# touch /var/log/clam-update.log
# chown clamav:clamav /var/log/clam-update.log

14: Add ClamAV to chkservd

[email protected] [/]# cat  /etc/chkserv.d/chkservd.conf | grep clamav
11 Apr 2018

Installing CloudFlare plugin on cPanel server

This is a free Content Delivery Network (CDN) for your domain. CloudFlare provides a better Internet security services and distributed domain name server services, sitting between the visitor and the Cloudflare user’s hosting provider, acting as a reverse proxy for websites. CloudFlare’s cPanel plugin is also available to manage the CloudFlare account simply through the cPanel itself.

The CloudFlare cPanel plugin installation is very simple and it can be achieved within 5 minutes. This plugin integrates CloudFlare with your cPanel server. Try this and enjoy!!!

Installation Steps

Step 1. SSH to the server in which you need to install CloudFlare plugin.

Step 2. Enter the cPanel basic directory:

cd /usr/local/cpanel

Step 3. Download the tar file to your server.

curl -k -L https://github.com/cloudflare/CloudFlare-CPanel/tarball/master > cloudflare.tar.gz

Step 4. Untar the file

tar -zxvf cloudflare.tar.gz

Step 5. This will extracts a directory which includes a UNIQUE_ID. The sample format of this will be as follows:


Here w40bbb3 is the UNIQUE_ID.

cd cloudflare-CloudFlare-CPanel-UNIQUE_ID/cloudflare

Step 6. Execute the install script in the following format:

./install_cf API_HOST_KEY mod_cf "Your Company Name"

API_HOST_KEY – You will get this from your CloudFlare panel.
Your Company name – You can give your hostname here.

How to find the API_HOST_KEY?

You can copy the API_HOST_KEY from your CloudFlare account. Please do the following steps to find out the API_HOST_KEY.

Step 1. Log into your CloudFlare account.

Step 2. Go to “My Settings”.

Step 3. Scroll down to “Global API Key”.

Step 4. Click on the “View API Key” button to see your API identifier.

mod_cf is optional. If set, the installer will also try to install mod_cloudflare

That’s it!!! Now, you will be able to see an icon for “CloudFlare” in all your cPanel accounts.

Sample Output for a successful installation:

info [verify_api_spec_files] LoadFile
Register Complete

==> mod_cloudflare: Installed successfully.
==> You may need to customize your EasyApache profile to include Mod CloudFlare

CloudFlare module installed successfully.

In some cases, if you see the output as :

Your HOST_KEY (d892a17e61de5caa062302d54714eb39e4d42) is invalid.

If you see this error, please contact CloudFlare support and ask for valid Host key.

That’s it 🙂

19 Mar 2018

Installing and configuring ClamAV for cPanel server

WHM comes with a free, pre-installed version of clamavconnector (Clam antivirus) that is not activated by default.

Activate it by following this procedure:

  1. Connect to your WHM interface as root.
  2. On the home page, click on the cPanel link (icon).
  3. Click on “Manage Plugins”.
  4. Select the box “Install and keep updated” in the corresponding section to clamavconnector.
  5. Click on save at the bottom of the page to confirm the installation.

WHM will then download the necessary packages for clamavconnector and will install it automatically,  this may take a few minutes.

Once the installation has been completed, you will have a virus scan link in your cPanel interface.

Please go through the relevant screen captures:




That’s it !!!

01 Mar 2018

Resource temporarily unavailable

Resource temporarily unavailable is a error message, OpenVZ is a container based virtualization technique for Linux. OpenVZ creates multiple secure, isolated Linux containers (otherwise known as VEs or VPSs) on a single physical server. Each container performs and executes exactly like a stand-alone server; a container can be rebooted independently and have root access, users, IP addresses, memory, processes, files, applications, system libraries and configuration files.

Here I explain a fix for the error “Resource temporarily unavailable” while switching user in OpenVZ based servers.

Error details

# su -
su: cannot set user id: Resource temporarily unavailable


Edit (add) or change the following values in /etc/security/limits.conf

# vi /etc/security/limits.conf
*          soft     nproc          2047
*          hard     nproc          16384
*          soft     nofile         1024
*          hard     nofile         65536

It should be okay now!

Please try to switch now and let me know if you have any questions.

22 Feb 2018

How to enable Varnish in cPanel server

Varnish is a caching technology. Varnish is a web accelerator and also referred as HTTP accelerator or reverse HTTP proxy, which will significantly enhance the performance of your website. Varnish cache is really fast thereby, speed up the delivery depending on your architecture.

Varnish enhance your website’s performance. Varnish stores a copy of the page which is served by the web server the first time a user visits the website. Next time, when the user requests for the same page, varnish will serve the copy instead of serving it from the web server. Thus, your webserver needs to handle only less traffic and there by increase the website performance and also reduce the server load.


Working of Varnish Cache

Once Varnish is installed in your server, it will listen in the port 80. Make Apache to listen in any other port other than 80. When a client requests for a page in your website, Varnish will try to serve the page from its cache memory. This is cache hit. If the page is not in its cache memory, then Varnish will request to HTTP (Apache) to serve the page and caches it for future reference.

Features of Varnish

1. Reduces the server load
2. High speed (cache + stored in RAM)
3. Useful to gain more visitors


1. Make Apache listen in any other port other than 80. Here I am making Apache to listen in port 8080. It can be done in two ways. Either editing the httpd.conf file or editing the Tweak settings in WHM

a) Editing httpd.conf file

# vi /usr/local/apache/conf/httpd.conf

Locate the following line in /usr/local/apache/conf/httpd.conf file and change the port from 80 to 8080


Once edited, the Apache config file for “Listen” should be as follows:

# grep -iw listen /usr/local/apache/conf/httpd.conf


b) Editing WHM – Tweak settings

WHM > Tweak Settings > Apache non-SSL IP/port

Set the port to 8080 and save the settings.

# grep VARNISH_LISTEN_PORT /etc/sysconfig/varnish

5. Edit Varnish config: /etc/varnish/default.vcl . Correct the IP address in this file to your IP address and port to 80

backend default {
  .host = "YOUR IP ADDRESS";
  .port = "80";

6. Start Varnish service on your server

# chkconfig varnish on
# service varnish start
# service varnish start
Starting Varnish Cache:                                    [  OK  ]

That’s it!!

You can check this by using the netstat command.

#netstat -plan | grep :80


# netstat -plan | grep :80
tcp        0      0        *                   LISTEN      15129/varnishd      
tcp        0      0      *                   LISTEN      12897/httpd        

Now, you can start monitor your Varnish with varnishstat


If you need to change your Varnish configuration file and you can test the configuration before restarting Varnish service by

# varnishd -C -f /etc/varnish/default.vcl

Note: While doing “yum install varnish” if you are getting libedit error, then follow the steps below:

varnish-3.0.5-1.el5.centos.x86_64 from varnish-3.0 has depsolving problems
  --> Missing Dependency: libedit.so.0()(64bit) is needed by package varnish-3.0.5-1.el5.centos.x86_64 (varnish-3.0)
Error: Missing Dependency: libedit.so.0()(64bit) is needed by package varnish-3.0.5-1.el5.centos.x86_64 (varnish-3.0)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package.

In this case, you need to install the libedit rpm which is suitable for your architecture. You can find the rpm from http://rpmfind.net/linux/rpm2html

# wget ftp://rpmfind.net/linux/dag/redhat/el5/en/x86_64/dag/RPMS/libedit-20090923-3.0_1.el5.rf.x86_64.rpm
# rpm -ivh libedit-20090923-3.0_1.el5.rf.x86_64.rpm


# rpm -ivh libedit-20090923-3.0_1.el5.rf.x86_64.rpm
warning: libedit-20090923-3.0_1.el5.rf.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing...                ########################################### [100%]
   1:libedit                ########################################### [100%]


21 Feb 2018

How to create MySQL database and user from command line

This is actually the base of MySQL command usage. By the help of a control panel we can simply create a database, create DB users, edit variables, set Privileges etc. But in some situations it is necessary to manage these MySQL options via command line. Here I am explaining the commands for creating database and database user form command line.

Enter the mysql prompt by following the step below:

# mysql -u root -p

It then prompts for password. Enter the MySQL root password.


[email protected][/]# mysql -u root -p
Enter password:

MySQL command to create a DB(Database).

mysql> CREATE DATABASE name_of_the_database;


mysql> CREATE DATABASE serversupportz_wp;
Query OK, 1 row affected (0.04 sec)

You can verify it by:


MySQL command to create a DB user.

mysql> CREATE USER name_of_the_database_user;


mysql> CREATE USER serversupportz_wp;
Query OK, 0 rows affected (0.07 sec)

You can find out the details of all users from mysql.user file:

mysql> select user from mysql.user;
mysql> select host, user, password from mysql.user;
mysql> select * from mysql.user;

Access the database

mysql> use name_of_the_database;


mysql> use serversupportz_wp
Database changed

That’s it 🙂

14 Feb 2018

Changing document root of website using .htaccess

By default the document root of your website on a cPanel based server is /home/$username/public_html . At the time anyone search your domain from there own end the site displays the index page from default location. That means from public_html folder. Here I’m explaining the way to change this default folder. That means you can customize the DNS fetching(Index page fetching) from your own folder.
This is possible via .htaccess. You will need to add the following code in your .htaccess file:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain.com$ 
RewriteCond %{REQUEST_URI} !folder/
RewriteRule (.*) /folder/$1 [L]

Replace ‘domain.com’ with your domain name and ‘folder’ with your custom folder name where you kept the index

Thats it.

08 Feb 2018

Cronjob to delete all emails older than one month

Before starting with the cronjob script, we must know the locations where the emails stored in the server. Then we can go to the steps to remove them  Exactly there are three folders in a cPanel based server for managing received emails.

Those are cur, new, tmp. The main differences between these three are listed below

new : This is the folder where all emails are first received.
cur : Is the folder having emails that are opened/read by mail client.
tmp : Is the folder contains processed emails for delivery purpose.

In most cases these emails in the server cause high disk space usage in the server. We can remove older email by using different ways. Here I’m explaining the steps to remove emails older than one month from the server by the help of cron.

To clear old emails from the server means, remove email related files from cur folder under mails directory and all other mail user directory. There are cur and new directories under the mail folder for cPanel default mail and also the same in each users domain directory. ie /home/username/mail/domain.com/***/cur Here *** represents each mail user folder. (admin/ for [email protected])

Step 1 : Creating an executable file with command to remove emails

For simplicity, create an executable file under anywhere (here I selected the location under root) and place the script to remove older mails.

Here I’m using the find command to find and remove mails which are older than 30 days (-mtime switch for finding mails older than 30 days.

[[email protected]]# touch mailcleaner.sh

Edit the file using your favorite file editor

[[email protected]]# vim mailcleaner.sh

find /home/username/mail/yourdomain.com/*/cur -type f -mtime +30 -exec rm -f {} \;

Then change that file to an executable one. (ie file permission to 755)

[[email protected]]# chmod 755 /root/mailcleaner.sh

Step 2 : Creating CRON job

Next step is to set the cronjob under root (for setting a cronjob refer this link). Here I’m setting the cron job to run every 1 day of the month.

[[email protected]]# crontab -e
 0 0 1 * * /root/mailcleaner.sh > /dev/null 2>&1
[[email protected]]# crontab -l : To list all cronjobs.

In this case the file mailcleaner.sh will execute first day of every month and remove all emails older than 30days.

Thank you.

06 Feb 2018

Script for checking MySQL database connection from web-browser

It’s very simple and interesting to check the MySQL database connectivity from your account without login as a root. Here is a script to do the same.  For checking the database connectivity, you must know the database hostname, normally it is “localhost” then database-name, username and password.

PHP Code:

mysql_connect('db_host', 'db_username', 'password') or die('Could not connect the database : Username or password incorrect');
mysql_select_db('db_name') or die ('No database found');
echo 'Database Connected successfully';

It’s very simple concept, first the “mysql_connect” argument will check the database hostname, username and password. If the first argument is true, then PHP take the second line to execute else the script will die with an output given in the Die section. Similarly, mysql_select_db check the database on the server. If both of the arguments are true then you will get an output given after the echo command


1, If all of the input data(db_name, username, password, hostname) are right, then the output is like;

Database Connected successfully

2, If any of the entry in ‘mysql_connect’ secion is wrong, then the output is;

Could not connect the database : Username or password incorrect

3, If the database entry is wrong;

No database found

That’s it 🙂

23 Nov 2017

Managing comments on your WordPress site via PhpMyAdmin or SQL

This is something interesting and time saving method. Yeah, it’s a bulk, one click option to remove unwanted comments from your WordPress websites. If you are using multiple WordPress websites, this should help you to save many hours. If your WordPress sites are not properly configured against Spam comments, you may receive 100s of comments per day or week.

You can use any of the Anti Spam plugins available on internet, against this type of Spam comments attack on your website. You can remove those comments from the WordPress dashboard

Access WordPress dashboard→ Click on “Comments” from the left side tab → You can sort and select comments from there → Select bulk action.

But you can only select a maximum of 20 comments from there. That’s the only problem. If you have to remove 1000s of emails this method will be a painful one. Here we are going with a smart solution for this problem. Yeah you can do this from the PhpMyAdmin tab via cPanel/WHM or from the MySQL interface via command line.

How to remove unwanted comments from from your WordPress site?

The comments are categorized as PendingApprovedSpam and Trash. Here you can select anyone of this to execute the MySQL query.

Step one : Log into cPanel and access PhpMyAdmin.

Step two : Select the database correctly.

Step three : Click on SQL tab; then execute your query.

Managing approved comments

You can select all approved comments by executing the following command:

use database_name;
select * from wp_comments WHERE comment_approved='1';

To remove all approved comments from your WordPress’s database, use the following query:

use database_name;
delete * from wp_comments WHERE comment_approved='1';

Select and remove all unapproved comments

Here replace 1 in the above command to 0, that’s it.

You can select all unapproved comments by executing the following command:

use database_name;
select * from wp_comments WHERE comment_approved='0';

To remove all unapproved comments from your WordPress’s database, use the following query:

use database_name;
delete * from wp_comments WHERE comment_approved='1';

Managing Spam and Trash comments

You can select all Spam comments by executing the following command:

use database_name;
select * from wp_comments WHERE comment_approved='spam';

To remove all Spam comments from your WordPress’s database, use the following query:

use database_name;
delete * from wp_comments WHERE comment_approved='spam';

You can select all Trashed comments by executing the following command:

use database_name;
select * from wp_comments WHERE comment_approved='trash';

To remove all Spam comments from your WordPress’s database, use the following query:

use database_name;
delete * from wp_comments WHERE comment_approved='trash';

That’s it

©2021 Tranzmedia Netvision Limited. All Rights Reserved.