Difference between revisions of "Dovecot /postfix with Roundcube WebUI"

From vpsget wiki
Jump to: navigation, search
 
(37 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
Following guide was tested on CentOS 6.
 
Following guide was tested on CentOS 6.
 +
  
 
Install epel repository:
 
Install epel repository:
Line 11: Line 12:
 
  chkconfig postfix on
 
  chkconfig postfix on
 
  service dovecot start
 
  service dovecot start
 +
service postfix start
 
Install php if not yet installed:
 
Install php if not yet installed:
 
  yum install php
 
  yum install php
Line 22: Line 24:
 
Restart Apache
 
Restart Apache
 
  service httpd restart
 
  service httpd restart
Install some database server. In this guide we are using MySQL.
+
Install some database server. In this guide we use MySQL.
 
  yum install mysql-server
 
  yum install mysql-server
 
  chkconfig mysqld on
 
  chkconfig mysqld on
Line 40: Line 42:
 
Download roundcube and extract it in web accessible directoty:
 
Download roundcube and extract it in web accessible directoty:
 
  cd /var/www/html
 
  cd /var/www/html
  wget http://freefr.dl.sourceforge.net/project/roundcubemail/roundcubemail/0.9.5/roundcubemail-0.9.5.tar.gz
+
  wget http://freefr.dl.sourceforge.net/project/roundcubemail/roundcubemail/1.0.1/roundcubemail-1.0.1.tar.gz
  tar xvf roundcubemail-0.9.5.tar.gz
+
  tar xvf roundcubemail-1.0.1.tar.gz
 
For newest version refer to: http://roundcube.net/
 
For newest version refer to: http://roundcube.net/
  
 
Now you can give some shorter name to it, for example - webmail:
 
Now you can give some shorter name to it, for example - webmail:
  mv roundcubemail-0.9.5 webmail
+
  mv roundcubemail-1.0.1 webmail
 +
cd webmail
 +
chmod 777 -R temp
 +
chmod 777 -R logs
 
Go to web installer using url: http://YourDomainOrIP/webmail/installer
 
Go to web installer using url: http://YourDomainOrIP/webmail/installer
  
Line 54: Line 59:
 
Press "CREATE CONFIG" at the bottom of the page.
 
Press "CREATE CONFIG" at the bottom of the page.
  
Two files will be generated and you should place them to your roundcube folder. In our case it is /var/www/webmail/config
+
Two files will be generated and you should place them to your roundcube folder. In our case it is /var/www/html/webmail/config
  cd /var/www/webmail/config
+
  cd /var/www/html/webmail/config
 
  nano main.inc.php      #Copy content of the generated file from web page
 
  nano main.inc.php      #Copy content of the generated file from web page
 
  nano db.inc.php        #Copy content of the generated file from web page
 
  nano db.inc.php        #Copy content of the generated file from web page
Line 62: Line 67:
  
 
Perform test and finish installation.
 
Perform test and finish installation.
 +
 +
Also you can note that the webmail UI do not show the time. You need to define your timezone in php.ini. For example:
 +
[Date]           
 +
date.timezone = Europe/Amsterdam
 +
 +
--------------------------
 +
''dovecot config''
 +
 +
Basic management is available in '''webmin: Servers -> Dovecot IMAP/POP3 Server'''
 +
 +
 +
for example we will done some basic config using CLI
 +
Edit dovecot config, /etc/dovecot/dovecot.conf
 +
protocols = imap
 +
mail_location =  maildir:~/Maildir
 +
 +
check auth parameters in  configfile etc/dovecot/conf.d/10-auth.conf
 +
auth_mechanisms = plain login
 +
 +
set maillocation in /etc/dovecot/conf.d/10-mail.conf
 +
mail_location = maildir:~/Maildir
 +
 +
Add/uncomment in /etc/dovecot/conf.d/10-master.conf
 +
unix_listener /var/spool/postfix/private/auth {
 +
    mode = 0666
 +
  user = postfix
 +
  }
 +
 +
List mailboxex
 +
doveadm mailbox list
 +
 +
Create mailbox (if you set satndard linux auth this will not work for you)
 +
  doveadm mailbox create -u test test
 +
 +
Create mailbox (if Data source for users, homes and IDs set to Standard Unix user database)
 +
 +
useradd test
 +
mkdir /home/test/Maildir
 +
chown test:test /home/test/Maildir
 +
chmod -R 700 /home/test/Maildir
 +
 +
set  password for newly created user:
 +
passwd test
 +
 +
Now you can login to roundcube WebUI using created user "test". Use "yourdomain.com" or "localhost" as Server
 +
 +
Set dovecot autostart
 +
chkconfig --level 345 dovecot on
 +
 +
 +
 +
-----
 +
test imap/ check mails from console
 +
You can install mutt
 +
yum install mutt
 +
 +
After use commands like:
 +
mutt -f imap://john@example.com@localhost
 +
mutt -f imap://ndi@localhost
 +
 +
After login you will get to the CLI UI and be able to see mailbox and send mails
 +
 +
Here is an example of working /etc/postfix/main.cf:
 +
 +
queue_directory = /var/spool/postfix
 +
command_directory = /usr/sbin
 +
daemon_directory = /usr/libexec/postfix
 +
data_directory = /var/lib/postfix
 +
mail_owner = postfix
 +
myhostname = localhost
 +
mydomain = mydomain.com
 +
myorigin = $mydomain
 +
inet_interfaces = all
 +
inet_protocols = all
 +
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 +
unknown_local_recipient_reject_code = 550
 +
alias_maps = hash:/etc/aliases
 +
alias_database = hash:/etc/aliases
 +
home_mailbox = Maildir/
 +
debug_peer_level = 2
 +
debugger_command =
 +
          PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
 +
          ddd $daemon_directory/$process_name $process_id & sleep 5
 +
 +
sendmail_path = /usr/sbin/sendmail.postfix
 +
newaliases_path = /usr/bin/newaliases.postfix
 +
mailq_path = /usr/bin/mailq.postfix
 +
setgid_group = postdrop
 +
html_directory = no
 +
manpage_directory = /usr/share/man
 +
sample_directory = /usr/share/doc/postfix-2.6.6/samples
 +
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
 +
You can map aliases with the following command:
 +
postmap /path/to/file
 +
 +
'''Enable postfix to use an external mail clients'''
 +
 +
Add following lines to ''/etc/postfix/main.cf'' for enabling sasl authentication:
 +
smtpd_sasl_auth_enable = yes
 +
broken_sasl_auth_clients = yes
 +
smtpd_sasl_type = dovecot
 +
smtpd_sasl_path = private/auth
 +
smtpd_sasl_security_options = noanonymous
 +
smtpd_recipient_restrictions =
 +
    permit_mynetworks,
 +
    permit_sasl_authenticated,
 +
    reject_unauth_destination
 +
Add the following to ''/etc/dovecot/conf.d/10-auth.conf'':
 +
auth_mechanisms = plain login
 +
 +
 +
== '''Mail client settings''': ==
 +
 +
 +
Account type: IMAP<br/>
 +
Incoming mail server: mail.example.com<br/>
 +
port 993, SSL<br/>
 +
Outgoing mail server (SMTP): mail.example.com<br/>
 +
Auth required<br/>
 +
port 25, unencrypted<br/>
 +
 +
 +
___________
 +
 +
 +
**If the emails do not appear in user mailbox but there no errors in the mailserver logfiles you can try to the next fix.
 +
Please note that for testing this case you need to send email to yourself .
 +
 +
postconf -e 'home_mailbox = Maildir/'
 +
export MAIL=/home/test/Maildir
 +
service postfix restart
 +
 +
 +
 +
**If you able to send emails but you can receive the emails only from yourself or/and from other your email server users you should check the Postfix IP address bind configuration.
 +
netstat -tulpn
 +
if you see the next line as one of the output
 +
tcp        0      0 127.0.0.1:25                0.0.0.0:*                  LISTEN      25367/master 
 +
 +
it means that postfix can receive emails only from localhost. Change the allowed networks:
 +
 +
Edit/Add the next line in postfix config /etc/postfix/main.cf to:
 +
inet_interfaces = localhost, 1.1.1.1
 +
 +
Where 1.1.1.1 is your main server IP.
 +
restart postfix after
 +
 +
 +
 +
replace "test" with actual username.
 +
 +
== '''ADD: Using Virtual mailboxes''': ==
 +
Create the user vmail. Note the user GUID. In our example the GUID wqill be 500.
 +
Add/edit the next lines in /etc/postfix/main.cf:
 +
 +
virtual_mailbox_domains = vpsget.com,ndisolutions.co.uk, youdomain.com
 +
virtual_mailbox_maps = hash:/etc/postfix/vmailbox        #this is txt file with emails and path to email folders
 +
virtual_alias_maps = hash:/etc/postfix/virtual_aliases  #txy file with aliases
 +
virtual_mailbox_base = /home/vmail                      #the vmail folder. you should chown it to vmail:vmail.
 +
virtual_mailbox_limit_override = yes
 +
virtual_maildir_extended = yes
 +
virtual_overquota_bounce = yes
 +
#virtual_mailbox_limit_maps = hash:/etc/postfix/vmailbox_limit  #txt file with limits
 +
virtual_create_maildirsize = yes
 +
virtual_trash_count = yes
 +
virtual_trash_name = ".Trash"
 +
virtual_mailbox_limit_inbox = no
 +
virtual_minimum_uid = 500        #vmail user GUID. take a look on it in /etc/passwd for example.
 +
virtual_uid_maps = static:500
 +
virtual_gid_maps = static:500
 +
 +
Edit the mail location in /etc/dovecot.dovecot.conf :
 +
mail_location = maildir:/home/vmail/%d/%n
 +
 +
Create the directory for user under /home/vmail/<domain>. For example:
 +
mkdir /home/vmail/vpsget.com
 +
mkdir /home/vmail/vpsget.com/info
 +
Mkae sure that correct permissions are set for vmail:vmail (*use chown)
 +
 +
Add user in /etc/postfix/vmailbox . For example:
 +
info@vpsget.com        vpsget.com/info/
 +
#mail                  #path from vmail, not full.
 +
 +
Create aliases if need in /etc/postfix/virtual_aliases:
 +
admin@vpsget.com        info@vpsget.com
 +
 +
Use postmap to apply settings from vmailbox and virtual_aliases:
 +
postmap /etc/postfix/vmailbox
 +
postmap /etc/postfix/virtual_aliases
 +
 +
Generate CRAM-MD5 password hash for the user using doveadm command:
 +
doveadm pw
 +
Enter new password: password
 +
Retype new password: password
 +
{CRAM-MD5}26b633ec8bf9dd526293c5897400bddeef9299fad
 +
 +
Copy the result line . you will need to put it into the next step
 +
Open for edit the /etc/dovecot/users. Add/edit the user:
 +
  info@vpsget.com:{CRAM-MD5}26b633ec8bf9dd526293c5897400bddeef9299fad:500:500:/home/vmail/vpsget.com/info
 +
 +
That's all. For sure you can restart postfix and dovecot services.
 +
 +
 +
*Postfix delete mail queue
 +
 +
Remove all mail from the queue:
 +
postsuper -d ALL
 +
 +
Remove all mails in the deferred queue:
 +
postsuper -d ALL deferred
 +
 +
 +
List emails for specified user/mailbox:
 +
mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "user@domain.com" && $9 == "") print $1 } ' | tr -d '*!'
 +
 +
Read email from queue:
 +
postcat -q  DA80E24A0A  #<id from previous list
 +
 +
Delete all emails for specific user/mailbox:
 +
mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "USER@EXAMPLE.COM" && $9 == "") print $1 } ' | tr -d '*!' | postsuper -d -
 +
 +
 +
 +
== Debug errors ==
 +
 +
Error: 554 5.7.1 Relay access denied
 +
 +
Solution: Make sure the recipient's domain is the mailserver's primary domain or is listed in mydestination:
 +
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, domain1.com, domain2.com
 +
 +
 +
[[Category:Linux]]

Latest revision as of 13:33, 17 July 2017

Following guide was tested on CentOS 6.


Install epel repository:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

Remove sendmail and install dovecot:

yum remove sendmail
yum install postfix dovecot
chkconfig dovecot on
chkconfig postfix on
service dovecot start
service postfix start

Install php if not yet installed:

yum install php

Install php extentions:

yum install php-xml php-pdo php-mbstring php-mcrypt php-intl php-mysql

Add to your php.ini:

extension=dom.so
extension=pdo.so

You can locate your working php.ini with the command:

php -i | grep 'Configuration File'

Restart Apache

service httpd restart

Install some database server. In this guide we use MySQL.

yum install mysql-server
chkconfig mysqld on
service mysqld start

Set mysql root password:

mysqladmin -u root password <password>

Enter to mysql:

mysql -p

Create user for Rouncube:

CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'password';

Create database:

CREATE DATABASE roundcubemail;

Grant privileges:

GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit

Download roundcube and extract it in web accessible directoty:

cd /var/www/html
wget http://freefr.dl.sourceforge.net/project/roundcubemail/roundcubemail/1.0.1/roundcubemail-1.0.1.tar.gz
tar xvf roundcubemail-1.0.1.tar.gz

For newest version refer to: http://roundcube.net/

Now you can give some shorter name to it, for example - webmail:

mv roundcubemail-1.0.1 webmail
cd webmail
chmod 777 -R temp
chmod 777 -R logs

Go to web installer using url: http://YourDomainOrIP/webmail/installer

Press "NEXT" at the bottom of the page

Find "Database setup" section and set password for database that you've created in previous steps. You may also configure other options in this step.

Press "CREATE CONFIG" at the bottom of the page.

Two files will be generated and you should place them to your roundcube folder. In our case it is /var/www/html/webmail/config

cd /var/www/html/webmail/config
nano main.inc.php      #Copy content of the generated file from web page
nano db.inc.php        #Copy content of the generated file from web page

Press "CONTINUE"

Perform test and finish installation.

Also you can note that the webmail UI do not show the time. You need to define your timezone in php.ini. For example:

[Date]             
date.timezone = Europe/Amsterdam

dovecot config

Basic management is available in webmin: Servers -> Dovecot IMAP/POP3 Server


for example we will done some basic config using CLI Edit dovecot config, /etc/dovecot/dovecot.conf

protocols = imap
mail_location =  maildir:~/Maildir

check auth parameters in configfile etc/dovecot/conf.d/10-auth.conf

auth_mechanisms = plain login

set maillocation in /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

Add/uncomment in /etc/dovecot/conf.d/10-master.conf

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

List mailboxex

doveadm mailbox list

Create mailbox (if you set satndard linux auth this will not work for you)

 doveadm mailbox create -u test test

Create mailbox (if Data source for users, homes and IDs set to Standard Unix user database)

useradd test
mkdir /home/test/Maildir
chown test:test /home/test/Maildir
chmod -R 700 /home/test/Maildir

set password for newly created user:

passwd test 

Now you can login to roundcube WebUI using created user "test". Use "yourdomain.com" or "localhost" as Server

Set dovecot autostart

chkconfig --level 345 dovecot on



test imap/ check mails from console You can install mutt

yum install mutt

After use commands like:

mutt -f imap://john@example.com@localhost
mutt -f imap://ndi@localhost

After login you will get to the CLI UI and be able to see mailbox and send mails

Here is an example of working /etc/postfix/main.cf:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = localhost
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5 

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES

You can map aliases with the following command:

postmap /path/to/file

Enable postfix to use an external mail clients

Add following lines to /etc/postfix/main.cf for enabling sasl authentication:

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination 

Add the following to /etc/dovecot/conf.d/10-auth.conf:

auth_mechanisms = plain login


Mail client settings:

Account type: IMAP
Incoming mail server: mail.example.com
port 993, SSL
Outgoing mail server (SMTP): mail.example.com
Auth required
port 25, unencrypted


___________


    • If the emails do not appear in user mailbox but there no errors in the mailserver logfiles you can try to the next fix.

Please note that for testing this case you need to send email to yourself .

postconf -e 'home_mailbox = Maildir/'
export MAIL=/home/test/Maildir
service postfix restart


    • If you able to send emails but you can receive the emails only from yourself or/and from other your email server users you should check the Postfix IP address bind configuration.
netstat -tulpn

if you see the next line as one of the output

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      25367/master  

it means that postfix can receive emails only from localhost. Change the allowed networks:

Edit/Add the next line in postfix config /etc/postfix/main.cf to:

inet_interfaces = localhost, 1.1.1.1

Where 1.1.1.1 is your main server IP. restart postfix after


replace "test" with actual username.

ADD: Using Virtual mailboxes:

Create the user vmail. Note the user GUID. In our example the GUID wqill be 500. Add/edit the next lines in /etc/postfix/main.cf:

virtual_mailbox_domains = vpsget.com,ndisolutions.co.uk, youdomain.com
virtual_mailbox_maps = hash:/etc/postfix/vmailbox        #this is txt file with emails and path to email folders
virtual_alias_maps = hash:/etc/postfix/virtual_aliases   #txy file with aliases
virtual_mailbox_base = /home/vmail                       #the vmail folder. you should chown it to vmail:vmail.
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_overquota_bounce = yes
#virtual_mailbox_limit_maps = hash:/etc/postfix/vmailbox_limit  #txt file with limits
virtual_create_maildirsize = yes
virtual_trash_count = yes
virtual_trash_name = ".Trash"
virtual_mailbox_limit_inbox = no
virtual_minimum_uid = 500         #vmail user GUID. take a look on it in /etc/passwd for example.
virtual_uid_maps = static:500
virtual_gid_maps = static:500

Edit the mail location in /etc/dovecot.dovecot.conf :

mail_location = maildir:/home/vmail/%d/%n

Create the directory for user under /home/vmail/<domain>. For example: mkdir /home/vmail/vpsget.com mkdir /home/vmail/vpsget.com/info Mkae sure that correct permissions are set for vmail:vmail (*use chown)

Add user in /etc/postfix/vmailbox . For example:

info@vpsget.com        vpsget.com/info/
#mail                  #path from vmail, not full.

Create aliases if need in /etc/postfix/virtual_aliases:

admin@vpsget.com        info@vpsget.com

Use postmap to apply settings from vmailbox and virtual_aliases:

postmap /etc/postfix/vmailbox
postmap /etc/postfix/virtual_aliases

Generate CRAM-MD5 password hash for the user using doveadm command:

doveadm pw
Enter new password: password
Retype new password: password
{CRAM-MD5}26b633ec8bf9dd526293c5897400bddeef9299fad

Copy the result line . you will need to put it into the next step Open for edit the /etc/dovecot/users. Add/edit the user:

 info@vpsget.com:{CRAM-MD5}26b633ec8bf9dd526293c5897400bddeef9299fad:500:500:/home/vmail/vpsget.com/info

That's all. For sure you can restart postfix and dovecot services.


  • Postfix delete mail queue

Remove all mail from the queue:

postsuper -d ALL

Remove all mails in the deferred queue:

postsuper -d ALL deferred


List emails for specified user/mailbox:

mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "user@domain.com" && $9 == "") print $1 } ' | tr -d '*!'

Read email from queue:

postcat -q  DA80E24A0A   #<id from previous list

Delete all emails for specific user/mailbox:

mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "USER@EXAMPLE.COM" && $9 == "") print $1 } ' | tr -d '*!' | postsuper -d -


Debug errors

Error: 554 5.7.1 Relay access denied

Solution: Make sure the recipient's domain is the mailserver's primary domain or is listed in mydestination:

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, domain1.com, domain2.com