Cygal.net.pl

Systemy, Sieci i takie tam :)

Stawiamy własny serwer poczty w oparciu o Postfix, Dovecot, Mysql, PostfixAdmin, Roundcube.

Naszym celem jest stworzenie serwera poczty do obsługi wielu domen z tak zwanymi wirtualnymi użytkownikami. Cała operacja odbywać się będzie z wykorzystaniem systemu Centos 6.3 ale receptur powinna również działać na systemach z rodziny Debian oraz Suse.

1)Zacznijmy od podstawowej konfiguracji systemu

  • Pierwszym krokiem będzie ustawienie nazwy naszego hosta np.:
hostname mail.domena.pl

Następnie dodajemy naszą nazwę do /etc/hosts

vim /etc/hosts
127.0.0.1 mail.domena.pl localhost
  • Instalujemy potrzebne paczki:

w Centosie możemy skorzystać z yuma

yum install postfix postfix-mysql dovecot dovecot-mysql amavisd clamd postgrey

SuSe możemy skorzystać z zyppera

w Debianie możemy skorzystać z apt-get

  • Dla amavisa potrzebować będziemy jeszcze kilka paczek
yum install arj bzip2 cabextract cpio file gzip nomarch pax unzip zip

dla pozostałych systemów instalacja wygląda analogicznie wystarczy tylko skorzystać z odpowiedniego managera pakietów dla swojej dystrybucji.

2)Instalacja PostfixAdmina

  • Stwórzmy teraz naszą baze danych dla Postfixadmina

[sql]
mysql -uroot -p
create database mail;
grant all on mail.* to ‘mail’@’localhost’ identified by ‘mailpassword’;
[/sql]

  • pobierzmy teraz źródła postfixadmina:
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-
2.3.5/postfixadmin-2.3.5.tar.gz

gzip -d postfixadmin-2.3.5.tar.gz
tar -xf postfixadmin-2.3.5.tar
mv postfixadmin-2.3.5 /var/www/postfixadmin
chown -R root:root /var/www/postfixadmin

3)Konfiguracja postfixadmina

  • Musimy teraz dokonać kilku zmian w plikach konfiguracyjnych postfixadmina. Poniżej przedstawione zostały zmiany jakich należy dokonać.
vim postfixadmin/config.inc.php

[php]
/*****************************************************************
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* You have to set $CONF[‘configured’] = true; before the
* application will run!
* Doing this implies you have changed this file as required.
* i.e. configuring database etc; specifying setup.php password etc.
*/
$CONF[‘configured’] = true;

// Postfix Admin Path
// Set the location of your Postfix Admin installation here.
// YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin
$CONF[‘postfix_admin_url’] = ‘https://mail.example.com/postfixadmin’;

// Database Config
// mysql = MySQL 3.23 and 4.0, 4.1 or 5
// mysqli = MySQL 4.1+
// pgsql = PostgreSQL
$CONF[‘database_type’] = ‘mysql’;
$CONF[‘database_host’] = ‘localhost’;
$CONF[‘database_user’] = ‘mail’;
$CONF[‘database_password’] = ‘mailpassword’;
$CONF[‘database_name’] = ‘mail’;

// Site Admin
// Define the Site Admins email address below.
// This will be used to send emails from to create mailboxes.
$CONF[‘admin_email’] = ‘me@example.com’;

// Mail Server
// Hostname (FQDN) of your mail server.
// This is used to send email to Postfix in order to create mailboxes.
//
// Set this to localhost for now, but change it later.
$CONF[‘smtp_server’] = ‘localhost’;
$CONF[‘smtp_port’] = ’25’;

// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// md5 = md5 sum of the password
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
// mysql_encrypt = useful for PAM integration
// authlib = support for courier-authlib style passwords
// dovecot:CRYPT-METHOD = use dovecotpw -s ‘CRYPT-METHOD’. Example: dovecot:CRAM-MD5
$CONF[‘encrypt’] = ‘md5crypt’;

// Mailboxes
// If you want to store the mailboxes per domain set this to ‘YES’.
// Examples:
// YES: /usr/local/virtual/domain.tld/username@domain.tld
// NO: /usr/local/virtual/username@domain.tld
$CONF[‘domain_path’] = ‘NO’
// If you don’t want to have the domain in your mailbox set this to ‘NO’.
// Examples:
// YES: /usr/local/virtual/domain.tld/username@domain.tld
// NO: /usr/local/virtual/domain.tld/username
// Note: If $CONF[‘domain_path’] is set to NO, this setting will be forced to YES.
$CONF[‘domain_in_mailbox’] = ‘YES’;
[/php]

Po dokonaniu powyższych zmian otwieramy przeglądarką adres: http://mail.example.com/postfixadmin/setup.php i postępujemy z godnie z instrukcjami wyświetlanymi na ekranie. Podajemy hasło oraz generujemy hash dla hasła. Następnie hash dodajemy do konfiguracji postfixadmina

[php]
// In order to setup Postfixadmin, you MUST specify a hashed password here.
// To create the hash, visit setup.php in a browser and type a password into the field,
// on submission it will be echoed out to you as a hashed value.
$CONF[‘setup_password’] = ‘tutaj podajemy cały wygenerowany hash’;
[/php]

teraz możemy się już zalogować do postfixadmina przy użyciu podanych haseł. I dodać domenę którą ma obsługiwać nasza poczta.

4. teraz zalogujmy się do postfixadmina i dodajmy domeny oraz skrzynki pocztowe.
Klikami na „new domain” w zakładce „domain list” i dodajemy np. exmple.com. Następnie dodajemy skrzynkę pocztową. „Add mailbox”

5. tworzymy użytkownika systemowego dla wirtualnych skrzynek mailowych.
Wirtualne skrzynkiki mailowe oraz wirtualne dmemy, które tworzymy przez postfixadmina nie maja odzwierciedlenia jako użytkownicy systemowi , zatem musimy stworzyć katalog gdzie będziemy przechowywać skrzynki dla la wirtualnych kont mailowych i domen.
Maile będą przechowywane w folderach dla każdej domeny oraz każdej skrzynki w katalogu /var/vmail np. dla domeny example.com i usera destine będzie mieć postać /var/vamial/example.com/destine.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual maildir" vmail
mkdir /var/vmail
chmod 770 /var/vmail
chown vmail:mail /var/vmail

6. konfiguracja dovecota
Dovecot jest serwerem pop oraz imap jego zadaniem jest odbieranie poczty od postfixa i dostarczanie do lokalnych skrzynek mailowych
Konfiguracja dla dovcot znajduje się w katalogu /etc/dovecot.
Pierwszą rzeczą jaką musimy zrobić to upewnić się ze dovecot będzie szukał użytkowników w bazie danych stworzonej przez postfixadmia. W tym celu tworzymy lub edytujemy plik /etc/dovecot/conf.d/auth-sql.conf.ext

[bash]
Authentication for SQL users. Included from auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>

passdb {
driver = sql

# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
# args = /etc/dovecot/dovecot-sql.conf.ext
args = /etc/dovecot/dovecot-sql.conf
}

# "prefetch" user database means that the passdb already provided the
# needed information and there’s no need to do a separate userdb lookup.
# <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
# driver = prefetch
#}

userdb {
driver = sql
#args = /etc/dovecot/dovecot-sql.conf.ext
args = /etc/dovecot/dovecot-sql.conf
}

# If you don’t have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
#driver = static
#args = uid=vmail gid=vmail home=/var/vmail/%u
#}
[/bash]

teraz tworzymy plik /etc/dovecot/dovecot-sql.conf z godnie z tym co podaliśmy w pliku powyżej.

I wpisujemy w nim:

[bash]
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=PASSWORD
#default_pass_scheme = MD5-CRYPT
default_pass_scheme = CRAM-MD5

# Define the query to obtain a user password.
password_query = SELECT username as user, password, ‘/var/vmail/%d/%n’ as userdb_home, ‘maildir:/var/vmail/%d/%n’ as userdb_mail, 5000 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = ‘%u’ AND active = ‘1’

#Define the query to obtain user information.
user_query = SELECT ‘/var/vmail/%d/%n’ as home, ‘maildir:/var/vmail/%d/%n’ as mail, 5000 AS uid, 12 AS gid, concat(‘dirsize:storage=’, quota) AS quota FROM mailbox WHERE username = ‘%u’ AND active = ‘1’

teraz czas na kolejny plik dotyczący autentykacji czyli /etc/dovecot/conf.d/10-auth.conf

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you’re connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
disable_plaintext_auth = yes

# Space separated list of wanted authentication mechanisms:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
# gss-spnego
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain logi

##
## Password and user databases
##

#
# Password database is used to verify user’s password (and nothing more).
# You can have multiple passdbs and userdbs. This is useful if you want to
# allow both system users (/etc/passwd) and virtual users to login without
# duplicating the system users into virtual database.
#
# <doc/wiki/PasswordDatabase.txt>
#
# User database specifies where mails are located and what user/group IDs
# own them. For single-UID configuration use "static" userdb.
#
# <doc/wiki/UserDatabase.txt>

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
# Use the SQL database configuration rather than any of these others.
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
[/bash]

Gdy juz mamy załatwioną autentykacje userów czas powiedzieć dovecotowi gdzie będą znajdować sie skrzynki dla wirtualnych użytkowników. W tym celu edytujemy plik /etc/dovecot/conf.d/10-mail.conf:

[bash]
# Location for users’ mailboxes. The default is empty, which means that Dovecot
# tries to find the mailboxes automatically. This won’t work if the user
# doesn’t yet have any mail, so you should explicitly tell Dovecot the full
# location.
#
# If you’re using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
# isn’t enough. You’ll also need to tell Dovecot where the other mailboxes are
# kept. This is called the "root mail directory", and it must be the first
# path given in the mail_location setting.
#
# There are a few special variables you can use, eg.:
#
# %u – username
# %n – user part in user@domain, same as %u if there’s no domain
# %d – domain part in user@domain, empty if there’s no domain
# %h – home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
# mail_location = maildir:~/Maildir
# mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
mail_location = maildir:/var/vmail/%d/%n

# System user and group used to access mails. If you use multiple, userdb
# can override these by returning uid or gid fields. You can use either numbers
# or names. <doc/wiki/UserIds.txt>
mail_uid = vmail
mail_gid = mail

# Valid UID range for users, defaults to 500 and above. This is mostly
# to make sure that users can’t log in as daemons or other system users.
# Note that denying root logins is hardcoded to dovecot binary and can’t
# be done even if first_valid_uid is set to 0.
#
# Use the vmail user uid here.
first_valid_uid = 150
last_valid_uid = 150
[/bash]

Teraz należy sobie zadać pytanie czy nie przydałoby się dodać szyfrowania dla naszej poczty. Jeżeli tak to możemy ustawić odpowiednie ścieżki dla naszych certyfikatów ssl w pliku /etc/dovecot/conf.d/10-ssl.conf.

[bash]
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They’re opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert =

Następnie należy wyedytować plik /etc/dovecot/conf.d/10-master.conf i dodać użytkownika i grupe dla postfixa

service auth {
# auth_socket_path points to this userdb socket by default. It’s typically
# used by dovecot-lda, doveadm, possibly imap process, etc. Its default
# permissions make it readable only by root, but you may need to relax these
# permissions. Users that have access to this socket are able to get a list
# of all usernames and get results of everyone’s userdb lookups.
unix_listener auth-userdb {
mode = 0600
user = vmail
group = mail
}

unix_listener /var/spool/postfix/private/auth {
mode = 0660
# Assuming the default Postfix user and group
user = postfix
group = postfix
}
[/bash]

ostatnim krokiem jest dopisanie adresu mail dla postmastera w pliku /etc/dovecot/conf.d/15.lda.conf oraz ustawienie uprawnień na plikach konfiguracyjnych tak aby były dostępne zarówno przez dovcote oraz vmail

[bash]
# Address to use when sending rejection mails.
# Default is postmaster@.
postmaster_address = postmaster@example.com
[/bash]

chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

7. Konfiguracja postfixa
Postfix jest serwerem SMTP i jego zadnie to rutowanie poczty. Konfiguracja postfixa znajduje się w dwóch głównych plikach master.cf oraz main.cf dodatkowo postfix korzysta z plików mapujących w na podstawie których wie dla jakiej domeny i użytkownika ma dostarczyć pocztę.

Stwórzmy teraz odpowiednie mapowania dla naszej konfiguracji opartej o mysql.

vim /etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

[bash]
user = mail
password = mailpassword
hosts = 127.0.0.1
dbname = mail
query = SELECT goto FROM alias,alias_domain
WHERE alias_domain.alias_domain = ‘%d’
AND alias.address=concat(‘%u’, ‘@’, alias_domain.target_domain)
AND alias.active = 1
[/bash]

vim /etc/postfix/mysql_virtual_alias_maps.cf

[bash]
user = mail
password = mailpassword
hosts = 127.0.0.1
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = ‘1’
[/bash]

vim /etc/postfix/mysql_virtual_domains_maps.cf

[bash]
user = mail
password = mailpassword
hosts = 127.0.0.1
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘0’ and active = ‘1’
[/bash]

vim /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

[bash]
user = mail
password = mailpassword
hosts = 127.0.0.1
dbname = mail
query = SELECT maildir FROM mailbox, alias_domain
WHERE alias_domain.alias_domain = ‘%d’
AND mailbox.username=concat(‘%u’, ‘@’, alias_domain.target_domain )
AND mailbox.active = 1
[/bash]

vim /etc/postfix/mysql_virtual_mailbox_maps.cf

[bash]
user = mail
password = mailpassword
hosts = 127.0.0.1
dbname = mail
table = mailbox
select_field = CONCAT(domain, ‘/’, local_part)
where_field = username
additional_conditions = and active = ‘1’
[/bash]

przejdźmy teraz do głównej konfiguracji postfixa na początek plik main.cf

vim /etc/postfix/main.cf

[bash]
# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# The first text sent to a connecting process.
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
# appending .domain is the MUA’s job.
append_dot_mydomain = no
readme_directory = no

# SASL parameters
# ———————————

# Use Dovecot to authenticate.
smtpd_sasl_type = dovecot
# Referring to /var/spool/postfix/private/auth
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes

# TLS parameters
# ———————————

# Replace this with your SSL certificate path if you are using one.
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# The snakeoil self-signed certificate has no need for a CA file. But
# if you are using your own SSL certificate, then you probably have
# a CA certificate bundle from your provider. The path to that goes
# here.
#smtpd_tls_CAfile=/path/to/ca/file
smtpd_use_tls=yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
#smtpd_tls_auth_only = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

# SMTPD parameters
# ———————————

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
# will it be a permanent error or temporary
unknown_local_recipient_reject_code = 450
# how long to keep message on queue before return as failed.
# some have 3 days, I have 16 days as I am backup server for some people
# whom go on holiday with their server switched off.
maximal_queue_lifetime = 7d
# max and min time in seconds between retries if connection failed
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# how long to wait when servers connect before receiving rest of data
smtp_helo_timeout = 60s
# how many address can be used in one message.
# effective stopper to mass spammers, accidental copy in whole address list
# but may restrict intentional mail shots.
smtpd_recipient_limit = 16
# how many error before back off.
smtpd_soft_error_limit = 3
# how many max errors before blocking it.
smtpd_hard_error_limit = 12

# This next set are important for determining who can send mail and relay mail
# to other servers. It is very important to get this right – accidentally producing
# an open relay that allows unauthenticated sending of mail is a Very Bad Thing.
#
# You are encouraged to read up on what exactly each of these options accomplish.

# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
# Requirement for the recipient address. Note that the entry for
# "check_policy_service inet:127.0.0.1:10023" enables Postgrey.
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_data_restrictions = reject_unauth_pipelining

# require proper helo at connections
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes

# General host and delivery info
# ———————————-

myhostname = mail.example.com
myorigin = /etc/hostname
# Some people see issues when setting mydestination explicitly to the server
# subdomain, while leaving it empty generally doesn’t hurt. So it is left empty here.
# mydestination = mail.example.com, localhost
mydestination =
# If you have a separate web server that sends outgoing mail through this
# mailserver, you may want to add its IP address to the space-delimited list in
# mynetworks, e.g. as 111.222.333.444/32.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mynetworks_style = host

# This specifies where the virtual mailbox folders will be located.
virtual_mailbox_base = /var/vmail
# This is for the mailbox location for each user. The domainaliases
# map allows us to make use of Postfix Admin’s domain alias feature.
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
# and their user id
virtual_uid_maps = static:150
# and group id
virtual_gid_maps = static:8
# This is for aliases. The domainaliases map allows us to make
# use of Postfix Admin’s domain alias feature.
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
# This is for domain lookups.
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

# Integration with other packages
# —————————————

# Tell postfix to hand off mail to the definition for dovecot in master.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

# Use amavis for virus and spam scanning
content_filter = amavis:[127.0.0.1]:10024

# Header manipulation
# ————————————–

# Getting rid of unwanted headers. See: https://posluns.com/guides/header-removal/
header_checks = regexp:/etc/postfix/header_checks
# getting rid of x-original-to
enable_original_recipient = no
[/bash]

teraz drugi z głównych plików posfixa czyli master.cf

vim /etc/postfix/master.cf

[bash]
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================

# SMTP on port 25, unencrypted.
smtp inet n – – – – smtpd
#smtp inet n – – – 1 postscreen
#smtpd pass – – – – – smtpd
#dnsblog unix – – – – 0 dnsblog
#tlsproxy unix – – – – 0 tlsproxy

# SMTP with TLS on port 587. Currently commented.
#submission inet n – – – – smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_enforce_tls=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
# -o smtpd_sasl_tls_security_options=noanonymous

# SMTP over SSL on port 465.
smtps inet n – – – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous

#628 inet n – – – – qmqpd
pickup fifo n – – 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
cleanup unix n – – – 0 cleanup
qmgr fifo n – n 300 1 qmgr
#qmgr fifo n – n 300 1 oqmgr
tlsmgr unix – – – 1000? 1 tlsmgr
rewrite unix – – – – – trivial-rewrite
bounce unix – – – – 0 bounce
defer unix – – – – 0 bounce
trace unix – – – – 0 bounce
verify unix – – – – 1 verify
flush unix n – – 1000? 0 flush
proxymap unix – – n – – proxymap
proxywrite unix – – n – 1 proxymap
smtp unix – – – – – smtp
relay unix – – – – – smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n – – – – showq
error unix – – – – – error
retry unix – – – – – error
discard unix – – – – – discard
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – – – – lmtp
anvil unix – – – – 1 anvil
scache unix – – – – 1 scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix – n n – – pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
# mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix – n n – – pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix – n n – – pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp unix – n n – – pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender – $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail unix – n n – – pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix – n n – – pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix – n n – 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix – n n – – pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

# The next two entries integrate with Amavis for anti-virus/spam checks.
amavis unix – – – – 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n – – – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

# Integration with Dovecot – hand mail over to it for local delivery, and
# run the process under the vmail user and mail group.
dovecot unix – n n – – pipe
flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -d $(recipient)
[/bash]

Pozostało nam teraz skonfigurować postgrey. W systemie CentOS w tym celu edytujemy plik /etc/init.d/postgrey.
Odnajdujemy poniższą linie w pliku options=”–unix=/var/spool/postfix/postgrey/socket” komentujemy ją a następnie zastępujemy wpisem

[bash]
#options="–unix=/var/spool/postfix/postgrey/socket"
options="–whitelist-clients=/etc/postfix/postgrey_whitelist_clients –whitelist-recipients=/etc/postfix/postgrey_whitelist_recipients –inet=60000 -d –unix=/var/spool/postfix/postgrey/socket –delay=60"
[/bash]

na koniec pozostaje zrestartować odpowiednie serwisy systemowe

service postgrey restart
service postfix restart
service dovecot restart

Instalacja oraz konfiguracja roundcube webmail

1)pobieramy pliki ze strony http://roundcube.net/

2)następnie rozpakowywujemy archiwum

tar -xfz roundcubemail-xx.tar.gz

Teraz utwórzmy odpowiednia hierarchie katalogów. W moim systemie pliki stron www trzymam w domyślnym katalogu czyli /var/www/html zatem dla porzadku utworze katalog wewnątrz tej ścieżki o nazwie roundcube, a następnie skopiuje tam wcześniej wypakowane pliki.

mkdir –p /var/www/html/roundcube
mv /root/roundcube/* /var/www/html/roundcube

musimy też pamiętać, że dwa katalogi w katalogu roundcube takie jak temp i logs potrzebują mieć prawo do zapisu. Zatem ustawmy odpowiednie prawa na tych katalogach.

chown –R apache.apache roundcube/
chmod 755 roundcube/logs
chmod 755 roundcube/temp

3)tworzymy bazę danych dla roundcube.

Logujemy sie na roota do bazy danych

mysql –uroot -p

następnie tworzymy nowa bazę.

[sql]
CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO username@localhost IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;
[/sql]

Oczywiście w miejsce username@localhost wstawiamy nazwę naszego użytkownika bazy danych oraz w miejsce password nasze hasło do bazy danych

otwieramy przeglądarkę internetową i podajemy adres

http://localhost/roundcube/installer

proces instalacji jest automatyczny. Roundcube sprawdza wszystkie zależności i w razie problemów informuje o nich.
Również poprzez installer zostaną utworzone pliki konfiguracyjne.

Po zainstalowaniu ustawiamy zmienna enable_instaler w main.inc.php na false

[php]
$rcmail_config[‘enable_installer’] = false
[/php]

8 thoughts on “Stawiamy własny serwer poczty w oparciu o Postfix, Dovecot, Mysql, PostfixAdmin, Roundcube.
  • redelek pisze:

    Świetny opis, troszkę inczej to się robi na debianie ale dzięki Twojemu opisowi
    wszystko pięknie zadziałało. Różnica wynikała z pakietów i ich konfiguracji.
    Nie opisałeś postgrey którą ustawiłeś w postfix
    smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10023 oraz
    header_checks = regexp:/etc/postfix/header_checks jak powinien on wyglądać.
    Reguła w przypadku debiana dovecot_destination_recipient_limit = 1
    powoduje błąd usługi i nie wstaje postfix.
    Brakuje jeszcze opisu Roundcube tak jak w tytule podałeś, ale poza tym śmiga aż miło

    Dzięki

  • andrew pisze:

    Witam.
    Opierając się na tym i podobny tutorialu na samym końcu dostaje info w logach:
    auth: Fatal: Unknown passdb driver ‘mysql’

    W dovecont.conf wrzucilem

    userdb {
    driver = mysql
    args = /etc/dovecot/dovecot-sql.conf
    }
    passdb {
    driver = mysql
    args = /etc/dovecot/dovecot-sql.conf
    }

    W dovecot-sql.conf.ext zachaszowałem wpis
    driver = mysql ,ale nic to nie pomogło.

    Jakieś sugestie?
    Dzieki za odp.

  • destine pisze:

    spróbuj zmienić driver z mysql na sql.

    passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
    }

    userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
    }

    w dovecot-sql.conf zostaw driver mysql
    driver = mysql

    pozdrawiam

  • Notifymer pisze:

    Czy ustawianie hosta ma jakies znaczenie? uzywam ubuntu do kilku domen na raz. Np a.com, b.com. Stoi tam nginx ktory otwiera odpowiednia strone na podstawie domeny ktora do niego przychodzi.
    Chciailbym zeby skonfigurowac poczty dla tych domen na tym samym serwerze czyli np mail.a.com oraz mail.b.com
    Na co wtedy trzeba ustawiac hostname i ten FQDN?

    Dzieki!

    • destine pisze:

      Pytasz o hostname czy o dyrektywę postfixa myhostname ? Jeżeli chodzi o hostname to ustawiasz sobie dowolna nazwę np host1.domena1.com. Ważne abyś miał taka nazwę dodana do swojego DNSa. Natomiast dyrektywa myhostname powinna byc ustawiona na twoja podstawowa domene np mail.domena1.com. Reszta swoich domen będziesz traktował jako domeny wirtualne w postfixie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


Time limit is exhausted. Please reload CAPTCHA.