Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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).
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.
