Difference between revisions of "Email server setup"

Line 22: Line 22:
  
  
=Installation=
+
=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.
 +
 
 +
 
 +
<syntaxhighlight lang="bash">
 +
# 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
 +
</syntaxhighlight>
 +
 
 +
 
  
 
==MySQL database==
 
==MySQL database==
Line 47: Line 67:
 
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';  
 
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';  
 
exit;
 
exit;
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
  
 
===Schema===
 
===Schema===
 
  
 
Create the following schema using [[MySQL workbench]]:
 
Create the following schema using [[MySQL workbench]]:
Line 89: Line 108:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Source: http://flurdy.com/docs/postfix/
 +
 +
 +
 +
==POSTFIX (SMTP server)==
 +
 +
 +
===Installation===
 +
 +
POSTFIX SMTP server:
 +
 +
<syntaxhighlight lang="bash">
 +
apt-get install postfix postfix-mysql
 +
 +
mkdir -p /var/spool/mail/virtual
 +
</syntaxhighlight>
  
  
 +
===Basic configuration===
  
  
  
==SMTP send server==
 
  
  

Revision as of 17:59, 11 August 2014



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:



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



Sources