Email server setup
Contents
Overview
Requirements
An email server requires a lot of components:
- Send / Receive emails [SMTP, POP3, IMAP, ...]
- Tools to check the email content against virus, spam
- Tools to encrypt the communication
- (optional) Database to manage users and emails
Therefore, before going on you need to have:
- MySQL server
- MySQL client such as MySQL workbench
Setup
Create Linux mail user
It's a common good practice to create a dedicated user to send email. That's the user POSTFIX will use.
As usual in Linux, that user should be UID > 1000 so it has more restrictions.
# Server root folder, where all the mails will be stored
mkdir /var/spool/mail/virtual
# New user
groupadd --system virtualMail -g 5000
useradd --system virtualMail -u 5000 -g 5000
chown -R virtualMail:virtualMail /var/spool/mail/virtual
MySQL database
Create and initialize a new database and user for email.
Create database
I assume that:
- Database name: maildb
- Db user: maildb
# log in as root
mysql -u root -p
# Create the mail database
create database maildb;
# Create a new user and grant rights upon mail database
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'mailPASSWORD';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';
exit;
Schema
Create the following schema using MySQL workbench:
CREATE TABLE `aliases` (
`pkid` smallint(3) NOT NULL auto_increment,
`mail` varchar(120) NOT NULL default '',
`destination` varchar(120) NOT NULL default '',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`pkid`),
UNIQUE KEY `mail` (`mail`) ) ;
CREATE TABLE `domains` (
`pkid` smallint(6) NOT NULL auto_increment,
`domain` varchar(120) NOT NULL default '',
`transport` varchar(120) NOT NULL default 'virtual:',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`pkid`) ) ;
CREATE TABLE `users` (
`id` varchar(128) NOT NULL default '',
`name` varchar(128) NOT NULL default '',
`uid` smallint(5) unsigned NOT NULL default '5000',
`gid` smallint(5) unsigned NOT NULL default '5000',
`home` varchar(255) NOT NULL default '/var/spool/mail/virtual',
`maildir` varchar(255) NOT NULL default 'blah/',
`enabled` tinyint(3) unsigned NOT NULL default '1',
`change_password` tinyint(3) unsigned NOT NULL default '1',
`clear` varchar(128) NOT NULL default 'ChangeMe',
`crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66',
`quota` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) ) ;
Source: http://flurdy.com/docs/postfix/
POSTFIX (SMTP server)
Installation
POSTFIX SMTP server:
apt-get install postfix postfix-mysql
mkdir -p /var/spool/mail/virtual
Basic configuration
## Security libraries
# SASL is the Simple Authentication and Security Layer, a method for adding authentication support to connection-based protocols.
apt-get install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin
# Authentication using MySQL
apt-get install libpam-mysql
## Anti-virus
apt-get install clamav-base libclamav6 clamav-daemon clamav-freshclam
## SPAM killer
apt-get install spamassassin spamc
## Interface to scan emails for virus & spam
apt-get install amavisd-new
## Utility to SEND emails
apt-get install postfix postfix-mysql
## Utility to RECEIVE emails
apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl