In the Linux cPanel series, I reviewed Virtualmin, one of the best open-source cPanels for websites and email servers. Virtualmin is built on top of Webmin, another great, free & open source website control panel.
What’s great about Virtualmin is that it lets users create virtual servers in an extremely easy way. It lets managing multiple websites on one server and keeping all the websites separate from each other. So if one website is using PHP 7 the other could use any other version or there can be used entirely different technology.
Virtualmin also sets up email services out of the box. All the user needs to do is point the incoming emails to the Virtualmin server.
In this article, I will explain how Virtualmin can be used to create and manage emails. There is no need to sign up for paid email services that cost a huge sum of money. Still, most of the premium services put a cap on bandwidth and email storage.
In Virtualmin, every email and its requirements, quota, and limitations are under user control. If you have clients, you can put a cap or provide unlimited resources without putting caps on bandwidth, email storage, or how many emails your clients can create.
Now without any further adieu, let’s get started.
How to install Virtualmin?
Virtualmin can easily be installed on almost all major Linux distributions. As part of the Linux cPanel series, I have reviewed Virtualmin and provided step-by-step instructions on how to install it on Linux. Follow this guide for installation instructions.
Once the Virtualmin is installed, log in to the control panel using the system credentials. You can use your Linux username and password. By default, Virtualmin runs on port 10000. Though it is recommended to change the port for security purposes.
The first time login will start a setup wizard. It is important to carefully select options as it’ll craft Virtualmin depending on how you want to use it. Only select the services you need to save important system resources.
As in this article, we are setting up our email server, so we will enable all the email services we need such as SpamAssassin and Clam AV. Remember, all these services require system memory to run properly, it is advised to only run these services when the system calls for it. The wizard will ask for how to run a specific service on the system.
SpamAssassin as the name suggests assassinates the spammy emails. It scans all the emails and lands all the spammy emails in the spam box.
Virtualmin post-installation wizard walks you through setting up SmapAssassin on your server. It consumes around 30M system memory, so based on the system resources, you can choose to run SpamAssassin or not. If SpamAssassin is not loaded in the memory, the email processing takes time, and you save around 30M system memory.
ClamAV is a free and open-source anti-virus for Linux operating systems. Virtualmin post-installation wizard guides you through setting up ClamAV on your server.
ClamAV scans all the emails for any harmful links and attachments. It consumes around 100M RAM. If you choose to run the ClamAV scanner, it will consume 100M memory but will faster the email processing.
The rest of the steps of the wizard are simple and I have discussed in this article. If you still need any help, please let me know in the comment section below.
After setting up SpamAssassin and ClamAV, we are good to go.
Create Virtual Server
In order to create email accounts, we will need to create a virtual server. Click ‘Create Virtual Server’ from the sidebar. Fill in your domain, description, username, and administrative password. This username and administrative password will be used to login to your email account.
The server configuration template and account plan is a handy way of monitoring and limiting users’ accounts in bulk. You can create server templates and Account plans and put users into those plans.
The next up, Advanced options. Here you can set up Contact email addresses, put the account in a custom group, add a prefix with email usernames, and name the default database. You can leave all of it default.
The next up is an important section, Enabled features. This is where administrators can disable or enable specific features on the user accounts. To make this email account use email features, check ‘Accept mail for domain‘.
At the end are the IP Address and forwarding section. Here you can set up email forwarding, network interfaces, and IP address. If you want to set up email forwarding, just put the email address where you want to forward all the emails. Leave the rest of the options as default.
Finally, click ‘Create Server‘. It’ll take a minute or two to create your first server. Once the server is created, you will see all the options to manage this virtual server in the sidebar.
Create email address
In Virtualmin, creating an email address means adding a new user account. Click ‘Edit users‘ option from the sidebar and it’ll list all the existing users.
To create a new user, click ‘Add a user to this server‘. It will open the following window with all the useful options.
Enter the username, real name, and password. As you can see the final email address would be the [email protected]
In the Quota and home directory settings, you can set account limits and user’s home directory. Leave the home directory option as default. You can change the quota amount. By default, it sets up each user with 50MB storage. You can change it to 500MB or 500GB as long as your server has that much storage or you really want this user to have a huge amount of storage on your server.
In the ‘Email settings‘ section, you can add any additional email address you want this user to have. For example, if a user is a forum moderator, you can create his/her primary email address but also additional emails such as [email protected], etc.
Always scan each email for spams and viruses unless you want to see your inbox full of crappy emails that are throwing away bitcoins, selling drugs, and so on.
Email forwarding, automatic reply, and user permissions
The rest of the two sections are pretty straight forward. You can set up email forwarding, enable automatic reply, and set up user permissions. If you want to give user capability to upload files using FTP clients like FileZilla, you can activate FTP access in user permissions sections.
Finally, click ‘Create‘ to create the user account.
After the user account is created, open Usermin. Usermin is another front of the Virtualmin that’s for clients.
By default, Usermin runs on port 20000. So visit ip_address:20000 and it’ll ask the username and password.
Enter the credentials that you have just created and voila!
And it is almost done. You should now be able to send emails perfectly. Try to send your first email from the new account.
Set up MX record to receive emails
At this point, you can only send emails. In order to receive emails, create MX record using the domain’s DNS manager.
Log in to the service where you purchased domain name. All domain providers have easy to use DNS manager that can be used to point incoming requests to the hosting server. To point email addresses to the Virtualmin server, an MX record.
Since we can not point MX record to IP address, we will need to create an A record and MX record to this A record.
The A record can be ‘mailserver.domain.com’ pointing to the Virtualmin server IP.
Create an MX record and point it to ‘mailserver.domain.com’.
Once done, that’s it. The changes may take 30 minutes to reflect. Meanwhile, play around and grab a cup of coffee. After that, send a test from Gmail or ymail to your account and it’ll work.
Sometimes DNS propagation takes more than 30 minutes. In this case, you may want to contact the domain provider for DNS manager related support.
Hosting your own email server saves you a lot of money. Most of the services charge a huge amount of money per month and per user basis.
Virtualmin makes the entire process easier by providing GUI for everything. Though there are a few things to remember. If your IP address is masked by a cloud firewall such as Cloudflare and sucuri, creating an MX record may expose your origin IP address.
If your intention is to hide the web server’s IP address behind a firewall, I recommend setting up an email server separate from the webserver.
For more information, please visit Virtualmin forums.