Setup Exim Mail Server on Ubuntu VPS: Complete SMTP Configuration

Installing Exim on Your Ubuntu VPS
Exim offers a lightweight alternative to Postfix for hosting providers who need reliable mail delivery without complex configuration overhead.
This guide shows you how to setup Exim mail server on Ubuntu VPS running 22.04 or 24.04.
Before starting, verify your VPS has a static IP address and proper DNS records configured. You'll need root access and a fully qualified domain name pointing to your server.
Update your system packages first:
sudo apt update
sudo apt upgrade -y
Install Exim and essential mail utilities:
sudo apt install exim4-daemon-heavy exim4-config mailutils -y
The installation prompts you for basic configuration. Choose "internet site" for the general mail configuration type.
Enter your domain name for the system mail name.
Configuring Exim for Virtual Domains
Exim handles virtual domains differently than Postfix. The main configuration file lives at /etc/exim4/update-exim4.conf.conf.
Edit the configuration file:
sudo nano /etc/exim4/update-exim4.conf.conf
Set these parameters for virtual domain support:
dc_eximconfig_configtype='internet'
dc_other_hostnames='yourdomain.com;mail.yourdomain.com'
dc_local_interfaces='0.0.0.0'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost=''
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
Create a virtual domains file to handle multiple domains on your VPS:
sudo mkdir -p /etc/exim4/conf.d/main
sudo nano /etc/exim4/conf.d/main/03_exim4-config_virtual
Add virtual domain configuration:
domainlist virtual_domains = dsearch;/etc/exim4/virtual
# Virtual domain routing
virtual_domain_router:
driver = redirect
domains = +virtual_domains
data = ${lookup{$local_part@$domain}lsearch{/etc/exim4/virtual/$domain}}
file_transport = virtual_delivery
cannot_route_message = Unknown user
Setting Up SMTP Authentication
SMTP authentication blocks unauthorized users from sending mail through your server.
Create an authenticator configuration file:
sudo nano /etc/exim4/conf.d/auth/30_exim4-config_examples
Add these authentication methods:
plain_server:
driver = plaintext
public_name = PLAIN
server_condition = "${if crypteq{$auth3}{${extract{1}{:}{${lookup{$auth2}lsearch{/etc/exim4/passwd}{$value}{*:*:*}}}}}{1}{0}}"
server_set_id = $auth2
server_prompts = :
login_server:
driver = plaintext
public_name = LOGIN
server_condition = "${if crypteq{$auth2}{${extract{1}{:}{${lookup{$auth1}lsearch{/etc/exim4/passwd}{$value}{*:*:*}}}}}{1}{0}}"
server_set_id = $auth1
server_prompts = <| Username: | Password:
Create a password file for authenticated users:
sudo nano /etc/exim4/passwd
Add users in this format:
user1@yourdomain.com:$1$salt$hashedpassword
user2@yourdomain.com:$1$salt$hashedpassword
Generate encrypted passwords using the mkpasswd utility:
mkpasswd -m md5
Hostperl VPS hosting customers find this authentication setup integrates cleanly with existing user management workflows.
Configuring SSL/TLS Security
Email security requires proper SSL/TLS configuration for encrypted connections.
Generate a self-signed certificate for testing (use a proper certificate for production):
sudo openssl req -new -x509 -days 365 -nodes -keyout /etc/ssl/private/exim.key -out /etc/ssl/certs/exim.crt
Create the TLS configuration file:
sudo nano /etc/exim4/conf.d/main/03_exim4-config_tlsoptions
Add SSL configuration:
tls_advertise_hosts = *
tls_certificate = /etc/ssl/certs/exim.crt
tls_privatekey = /etc/ssl/private/exim.key
tls_on_connect_ports = 465
tls_require_ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
daemon_smtp_ports = 25 : 587 : 465
This configuration enables TLS on standard SMTP ports and enforces strong cipher suites.
Managing Virtual Mailboxes and Delivery
Exim handles virtual mailboxes through its built-in delivery mechanisms.
Create directories for virtual domain storage:
sudo mkdir -p /var/mail/virtual
sudo chown -R Debian-exim:mail /var/mail/virtual
sudo chmod -R 750 /var/mail/virtual
Configure the virtual delivery transport:
sudo nano /etc/exim4/conf.d/transport/30_exim4-config_virtual
Add transport configuration:
virtual_delivery:
driver = appendfile
directory = /var/mail/virtual/$domain/$local_part
maildir_format
delivery_date_add
envelope_to_add
return_path_add
group = mail
user = Debian-exim
mode = 0600
directory_mode = 0700
For each virtual domain, create mapping files:
sudo mkdir -p /etc/exim4/virtual/yourdomain.com
sudo nano /etc/exim4/virtual/yourdomain.com
Add email addresses and their destinations:
admin@yourdomain.com: admin
support@yourdomain.com: support
info@yourdomain.com: info
Customers using managed VPS hosting find this mailbox structure simpler than complex Postfix virtual table configurations.
Testing Email Delivery and SMTP
After configuration changes, regenerate the Exim configuration and restart the service:
sudo update-exim4.conf
sudo systemctl restart exim4
Test local delivery:
echo "Test message" | mail -s "Test Subject" admin@yourdomain.com
Check the mail queue and logs:
sudo exim4 -bp
sudo tail -f /var/log/exim4/mainlog
Test SMTP authentication using telnet:
telnet localhost 587
EHLO yourdomain.com
AUTH PLAIN
The server should respond with authentication mechanisms.
Test external delivery by sending messages to Gmail or other providers. Monitor the logs for successful delivery or rejection messages.
Security Hardening and Rate Limiting
Implement rate limiting to prevent abuse. Add these controls to your main configuration:
sudo nano /etc/exim4/conf.d/main/03_exim4-config_ratelimit
Configure submission rate limits:
acl_smtp_mail = acl_check_mail
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
# Rate limiting rules
acl_check_mail:
deny message = Sender rate limit exceeded
ratelimit = 100 / 1h / per_mail / $sender_address
accept
Create ACL files for security:
sudo nano /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
Add recipient validation rules:
acl_check_rcpt:
deny message = Relay not permitted
domains = !+local_domains : !+virtual_domains
accept domains = +local_domains : +virtual_domains
endpass
verify = recipient
Configure firewall rules to protect mail ports:
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 993/tcp
sudo ufw allow 995/tcp
For additional email security guidance, check our email security for VPS hosting guide covering SPF, DKIM, and DMARC setup.
Monitoring and Maintenance Tasks
Regular monitoring keeps your Exim server operating reliably.
Set up log rotation to manage disk space:
sudo nano /etc/logrotate.d/exim4-custom
Configure log rotation:
/var/log/exim4/mainlog {
daily
missingok
rotate 30
compress
notifempty
postrotate
/etc/init.d/exim4 reload >/dev/null
endscript
}
Monitor queue size and processing times:
#!/bin/bash
queue_count=$(exim4 -bp | grep "<" | wc -l)
if [ $queue_count -gt 100 ]; then
echo "Warning: Mail queue has $queue_count messages"
exim4 -bp | head -20
fi
Save this as a monitoring script and run it via cron every 15 minutes.
For backup strategies that include mail data, check our email backup setup guide.
Running a reliable mail server requires careful configuration and ongoing maintenance. Hostperl VPS provides the stable infrastructure and technical support needed for production email servers. Our New Zealand-based team understands mail server administration challenges and can help with migrations, troubleshooting, and optimization.
Frequently Asked Questions
How does Exim compare to Postfix for VPS hosting?
Exim offers simpler configuration syntax and built-in virtual domain support. This makes it easier to manage for smaller hosting operations. Postfix provides more granular control but requires additional components like Dovecot for complete mail services.
What are the minimum resources needed for Exim on Ubuntu VPS?
A basic Exim installation requires at least 512MB RAM and 10GB storage. For production use with multiple domains and users, consider 2GB RAM and monitor disk usage for mail storage growth.
Can I migrate from Postfix to Exim without losing emails?
Yes, but the process requires careful planning. Back up existing mailboxes, export configuration settings, and test thoroughly before switching. Consider our migration assistance if you need professional support.
How do I configure Exim to work with webmail interfaces?
Exim handles SMTP delivery while webmail requires IMAP/POP3 services. Install Dovecot alongside Exim, or reference our Roundcube webmail integration guide for complete webmail setup.
What SSL certificates should I use with Exim?
Use Let's Encrypt for free SSL certificates or commercial certificates for enhanced trust. Configure both TLS on port 587 for submission and STARTTLS on port 25 for server-to-server communication.
