How to Configure Postfix and Dovecot with Virtual Domain Users in Linux?

Configuring Postfix and Dovecot with virtual domain users is an essential process for anyone running a Linux-based email server. These two software applications work together to handle incoming and outgoing emails. Postfix is the mail transfer agent (MTA) responsible for routing and delivering email messages, while Dovecot is the mail delivery agent (MDA) that delivers incoming emails to users' mailboxes and allows clients to retrieve them.

This guide provides a step-by-step approach to configure both services for virtual domain users, allowing you to host multiple email domains on a single server without creating system users for each email account.

Understanding Postfix and Dovecot

Postfix is an open-source MTA that routes and delivers email messages using SMTP (Simple Mail Transfer Protocol). It can send and receive emails between servers but requires a delivery agent like Dovecot to handle local mailbox storage and retrieval.

Dovecot is an open-source IMAP and POP3 server that sorts incoming email into user mailboxes and allows email clients like Thunderbird or Outlook to retrieve messages. It supports multiple protocols including IMAP, POP3, and LMTP (Local Mail Transfer Protocol).

Email Server Architecture Email Client Dovecot Postfix Remote Mail Server IMAP/POP3 LMTP SMTP Virtual Mailboxes /var/mail/virtual/domain.com/user/ user@domain.com ? maildir storage

Setting Up Postfix

Installing Postfix

Install Postfix using your distribution's package manager:

sudo apt-get update
sudo apt-get install postfix

During installation, select "Internet Site" when prompted for the configuration type.

Configuring Virtual Domains

Edit the main Postfix configuration file /etc/postfix/main.cf and add the following parameters:

# Virtual domain configuration
virtual_mailbox_domains = /etc/postfix/virtual_domains
virtual_mailbox_maps = /etc/postfix/virtual_mailboxes
virtual_alias_maps = /etc/postfix/virtual_aliases

# Virtual mailbox settings
virtual_mailbox_base = /var/mail/virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# SMTP authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Creating Virtual Domain Files

Create the virtual domain configuration files:

# List your domains
echo "example.com" > /etc/postfix/virtual_domains
echo "mydomain.org" >> /etc/postfix/virtual_domains

# Map users to mailbox locations
echo "user1@example.com example.com/user1/" > /etc/postfix/virtual_mailboxes
echo "user2@mydomain.org mydomain.org/user2/" >> /etc/postfix/virtual_mailboxes

# Create alias mappings (optional)
echo "admin@example.com user1@example.com" > /etc/postfix/virtual_aliases

Create the virtual mail user and directories:

sudo useradd -r -u 5000 -g mail -d /var/mail/virtual -s /sbin/nologin vmail
sudo mkdir -p /var/mail/virtual
sudo chown -R vmail:mail /var/mail/virtual
sudo chmod -R 770 /var/mail/virtual

Setting Up Dovecot

Installing Dovecot

sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd

Configuring Authentication

Edit /etc/dovecot/conf.d/10-auth.conf:

# Disable system users
!include auth-system.conf.ext
# Enable virtual users
!include auth-passwdfile.conf.ext

auth_mechanisms = plain login

Create the virtual user password file /etc/dovecot/users:

user1@example.com:{PLAIN}password123
user2@mydomain.org:{PLAIN}mypassword

Configuring Mail Storage

Edit /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir:/var/mail/virtual/%d/%n
mail_uid = vmail
mail_gid = mail
first_valid_uid = 5000
last_valid_uid = 5000

Configuring LMTP Service

Edit /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {
  mail_plugins = $mail_plugins
}

Add LMTP socket in /etc/dovecot/conf.d/10-master.conf:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
}

Testing the Configuration

Restart both services and test the configuration:

sudo systemctl restart postfix dovecot
sudo systemctl enable postfix dovecot

# Test SMTP connection
telnet localhost 25

# Test IMAP connection
telnet localhost 143

Troubleshooting Common Issues

Issue Symptoms Solution
Permission Errors Mail delivery fails Check vmail user ownership of /var/mail/virtual
Authentication Failures Cannot login to email client Verify user passwords in /etc/dovecot/users
Virtual Domain Not Working Mail bounces back Check virtual_domains and virtual_mailboxes files

Check log files for detailed error messages:

sudo tail -f /var/log/mail.log
sudo tail -f /var/log/dovecot.log

Conclusion

Configuring Postfix and Dovecot with virtual domain users allows you to host multiple email domains on a single Linux server without creating system users. This setup provides secure, scalable email hosting with proper authentication and mailbox management for virtual users across different domains.

Updated on: 2026-03-17T09:01:38+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements