1. 程式人生 > >CentOS 7使用Postfix、Dovecot及MariaDB搭建郵箱伺服器

CentOS 7使用Postfix、Dovecot及MariaDB搭建郵箱伺服器

1. 安裝軟體

1.1 更新yum源

yum update

1.2 排除預設Postfix源

CentOS 7主源中自帶的Postfix版本並不支援MariaDB;所以,我們將從CentOS Plus源中進行安裝。在此之前,我們在[base][updates]源中過濾掉Postfix,防止版本更新時,被不支援MariaDB的Postfix覆蓋。

檔案:/etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
exclude=postfix

#released updates
[updates]
name
=CentOS-$releasever - Updates exclude=postfix

1.3 安裝必須的軟體

yum --enablerepo=centosplus install postfix
yum install dovecot mariadb-server dovecot-mysql

以上安裝了Postfix、Dovecot及MariaDB
下面,我們配置MariaDB資料庫

2. 設定MariaDB

2.1 讓MariaDB隨系統啟動

systemctl enable mariadb.service
/bin/systemctl start mariadb.service

2.2 初始化MariaDB

執行mysql_secure_installation命令進行初始化。在初始化過程中,建議我們修改MariaDB的root密碼、移除匿名賬號、禁止root遠端登入及移除測試資料庫,最後會重新載入許可權表。

mysql_secure_installation

2.3 開啟MariaDB控制檯

mysql -u root -p

2.4 建立郵箱服務資料庫mail

CREATE DATABASE mail;
USE mail;

2.5 建立郵箱管理員賬號mail_admin

建立後,我們為他分配mail資料庫的讀寫許可權。

注意:將下面語句中的mail_admin_password替換為您自己的強密碼

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;

2.6 建立虛擬域(virtual domains)表:

CREATE TABLE domains (
    domain varchar(50) NOT NULL,
    PRIMARY KEY (domain)
);

2.7 建立郵件轉發(mail forwarding)表

CREATE TABLE forwardings (
    source varchar(80) NOT NULL,
    destination TEXT NOT NULL,
    PRIMARY KEY (source)
);

2.8 建立使用者(users)表

CREATE TABLE users (
    email varchar(80) NOT NULL,
    password varchar(20) NOT NULL,
    PRIMARY KEY (email)
);

2.9 建立郵件傳輸(transports)表

CREATE TABLE transport (
    domain varchar(128) NOT NULL default '',
    transport varchar(128) NOT NULL default '',
    UNIQUE KEY domain (domain)
);

2.10 退出MariaDB控制檯

quit

2.11 繫結MariaDB到本機(127.0.0.1)

檔案:/etc/my.cnf

[mysqld]
bind-address=127.0.0.1

2.12 重啟資料庫

/bin/systemctl restart mariadb.service

3. 配置Postfix並關聯MariaDB

注意:下面的過程中,請將mail_admin_password替換為您在上面的操作中所設定的密碼。

3.1 建立虛擬域配置檔案

檔案:/etc/postfix/mysql-virtual_domains.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1

3.2 建立虛擬轉發配置檔案

檔案:/etc/postfix/mysql-virtual_forwardings.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

3.3 建立虛擬郵箱配置檔案

檔案:/etc/postfix/mysql-virtual_mailboxes.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1

3.4 建立虛擬郵箱對映檔案

檔案:/etc/postfix/mysql-virtual_email2email.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

3.5 修改以上各配置檔案的許可權

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

3.6 建立系統使用者及組,用來處理郵件。並建立虛擬郵箱的存放路徑

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

3.7 完成剩餘的Postfix配置。

注意:用自己的主機名替換下面的server.example.com

postconf -e 'myhostname = server.example.com'
postconf -e 'mydestination = localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'inet_interfaces = all'
postconf -e 'message_size_limit = 30720000'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination' postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem'
postconf -e 'smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
postconf -e 'virtual_transport = dovecot'
postconf -e 'dovecot_destination_recipient_limit = 1'

3.8 編輯/etc/postfix/master.cf檔案,在檔案底部新增Dovecot服務

檔案:/etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

3.9 配置Postfix隨系統啟動

systemctl enable postfix.service
/bin/systemctl start postfix.service

至此我們完成了Postfix的全部配置

4. 配置Dovecot

4.1 備份/etc/dovecot/dovecot.conf檔案

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup

4.2 新建配置檔案

檔案:/etc/dovecot/dovecot.conf

注意:替換第37行的example.com為您自己的域

protocols = imap pop3
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n/Maildir

ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

namespace {
    type = private
    separator = .
    prefix = INBOX.
    inbox = yes
}

service auth {
    unix_listener auth-master {
        mode = 0600
        user = vmail
    }

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

user = root
}

service auth-worker {
    user = root
}

protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = [email protected]
}

protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
}

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

userdb {
    driver = static
    args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}

4.3 Dovecot與MariaDB關聯

我們需要建立/etc/dovecot/dovecot-sql.conf.ext檔案,並加入如下內容:

注意:替換mail_admin_password

檔案:/etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect =
host=127.0.0.1
dbname=mail
user=mail_admin
password=mail_admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';

4.4 修改以上配置檔案的許可權

chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
chmod o= /etc/dovecot/dovecot-sql.conf.ext

4.5 配置Dovecot隨系統啟動

systemctl enable dovecot.service
/bin/systemctl start dovecot.service

4.6 檢查Dovecot的啟動日誌是否正常

檔案:/var/log/maillog

Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)

4.7 使用telnet工具測試POP3

yum install telnet
telnet localhost pop3

4.8 終端應該會出現如下提示

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.

4.9 輸入quit退出控制檯。

quit

至此,我們完成了Dovecot配置。下一步,我們要確保別名是否正常配置。

5. 配置郵箱別名

5.1 編輯檔案/etc/aliases,確保postmasterroot按照您的資訊進行配置:

檔案:/etc/aliases

postmaster: root
root: [email protected]

5.2 編輯別名,並重啟Postfix

newaliases
/bin/systemctl restart postfix.service

至此,我們完成了別名配置。下一步,我們來測試Postfix是否正常。

6. 測試Postfix

6.1 測試Postfix的SMTP-AUTH和TLS

telnet localhost 25

6.2 保持連線,並輸入如下命令

ehlo localhost

6.3 您將會看到類似資訊

250-hostname.example.com
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

6.4 輸入quit退出測試。下一步,我們建立資料庫用來管理域及使用者。

7 建立測試域及使用者

注意:開始繼續前,請先作好域名的DNS及MX相關設定。

在下面的例子中,我們假設使用”example.com”這個域,並建立”[email protected]”郵箱

7.1 開啟MariaDB控制檯

mysql -u root -p

7.2 切換到mail資料庫,建立域及使用者

注意:下面的password請用強密碼

USE mail;
INSERT INTO domains (domain) VALUES ('example.com');
INSERT INTO users (email, password) VALUES ('[email protected]', ENCRYPT('password'));
quit

7.3 使用mailx小工具傳送測試郵件

yum install mailx
mailx sales@example.com

使用Ctrl+D完成訊息。Cc:一欄我們可以留空。執行完後,我們的郵件系統會自動建立一個新的域和郵箱使用者。

8. 檢查日誌

上面的傳送測試完成後,我們需要檢查一下日誌,看看郵件是否可以正常送達。

8.1 檢查/var/log/maillog。我們應該會看到類似的內容:

檔案:/var/log/maillog

Mar 18 17:18:47 localhost postfix/cleanup[3427]: B624062FA: message-id=<20150318171847.B624062FA@example.com>
Mar 18 17:18:47 localhost postfix/qmgr[3410]: B624062FA: from=<root@example.com>, size=515, nrcpt=1 (queue active)
Mar 18 17:18:47 localhost postfix/pipe[3435]: B624062FA: to=<sales@example.com>, relay=dovecot, delay=0.14, delays=0.04/0.01/0/0.09, dsn=2.0.0, $
Mar 18 17:18:47 localhost postfix/qmgr[3410]: B624062FA: removed

8.2 檢查Dovecot日誌

檔案:/home/vmail/dovecot-deliver.log

deliver(<[email protected].com>): 2011-01-21 20:03:19 Info: msgid=<<20110121200319.E1[email protected].example.com>>: saved mail to INBOX

下面,我們使用郵箱客戶端進行測試。

9. 測試郵箱客戶端

9.1 測試[email protected]的郵箱

cd /home/vmail/example.com/sales/Maildir
find

如果系統禁用了root賬戶,可能導致無法進入vmail目錄。
可以使用su root臨時提升許可權

9.2 我們可以看到如下資訊:

.
./dovecot-uidlist
./cur
./new
./new/1285609582.P6115Q0M368794.li172-137
./dovecot.index
./dovecot.index.log
./tmp

9.3 使用linux下的郵箱客戶端mutt進行測試

yum install mutt
mutt -f .

如果被問到是否需要建立root郵箱,可以隨意回答

9.4 檢視收件箱中的郵件

如果在收件箱中看到郵件,說明Postfix、Dovecot、和MySQL都已經配置成功了!輸入q退出mutt
使用mutt檢視是否收到郵件

10. 更多內容

下面是一些官方的文件。

相關推薦

CentOS 7使用PostfixDovecotMariaDB搭建郵箱伺服器

1. 安裝軟體 1.1 更新yum源 yum update 1.2 排除預設Postfix源 CentOS 7主源中自帶的Postfix版本並不支援MariaDB;所以,我們將從CentOS Plus源中進行安裝。在此之前,我們在[base]

Windows7下的Django環境專案工程搭建(包括anaconda安裝方法)(一)

我這也是邊學邊寫,大家一起吧。參考的資料有點多,但都不太完全,只能依據理解自己把它集合在一起。 首先,安裝python就不說了,我用的是anaconda,我在找了很久走了很多彎路之後才找到,這是一個python的科學環境,它很強大,集成了各種python所需要

kafka入門:簡介使用場景設計原理配置叢集搭建

問題導讀: 1.zookeeper在kafka的作用是什麼? 2.kafka中幾乎不允許對訊息進行“隨機讀寫”的原因是什麼? 3.kafka叢集consumer和producer狀態資訊是如何儲存的? 4.partitions設計的目的的根本原因是什麼? 一、入

CentOS 7 MariaDB搭建主從伺服器

開發十年,就只剩下這套架構體系了! >>>   

CentOS 基本指令(三)——搭建Web 伺服器Jetty & 部署RSSBus

Jetty 相比 Tomcat 等web 伺服器具有小巧輕量級的優點。 首先新建一個目錄,將jetty壓縮包解壓在裡面。 在新建目錄中,新建一個www目錄,與jetty安裝目錄同級: 將rssbus war包和配置資訊檔案放入www資料夾中 進入jetty安裝路徑,修改start.ini

初學Git簡單搭建git伺服器和客戶端

在開發中,會經常碰到bug問題,那麼有了bug就需要修復,每個bug都可以通過一個臨時分支來修復,修復完成後,合併分支,然後將臨時的分支刪除掉。比如我在開發中接到一個404 bug時候,我們可以建立一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。 工作進行到一半時候,我們還無法提交,比如我這

centos7+postfix+devocot+cycus-sasl搭建郵箱伺服器

一.域名配置 1.設定指定ip的A記錄 假設已經有了ip為119.*.*.*(圖中打馬賽克的地方)伺服器,首先在域名解析那配置一條A記錄如下圖所示 2.配置二級域名的A記錄 3.配置mx記錄 使用

Hmailserver搭建郵箱伺服器

  由於阿里雲,谷歌雲,騰訊雲等伺服器都不開放25埠和pop3埠,想要使用郵箱服務得購買他們的企業郵箱,但是對於個人而言比較貴。 所以我們需要利用家庭寬頻申請公網IP。 首先打電話給運營商客服,申請動態公網IP,因為靜態基本是白嫖不到的。理由:家裡裝了監控,需要外網訪問。 我打完電話,過了半小時左右

liunx服務搭建之SVN伺服器搭建授權http訪問設定(CentOS 7)

環境: svnserve, version 1.7.14,CentOS 7 摘要說明: svn伺服器往往是在window系統下使用VisualSVN搭建伺服器;本篇文章主要講述在liunx下如何搭建svn伺服器及相關授權管理和http訪問設定; 步驟: 1.搭建SV

centOS搭建SVN伺服器實現許可權控制linux與windows客戶端的使用排錯

目錄 1.在centOS上搭建svn_server 1.查詢是否已安裝軟體包及安裝軟體包  rpm -qa subversion #查詢是否安裝 yum -y install subversion

Ubuntu 17.10 用 apt 搭建 lamp 環境安裝 phpmyadminredis 擴展mysql 擴展開啟錯誤提示配置虛擬主機

www data 4.2 pass ech span grace 參考 配置文件 最終環境: Ubuntu17.10、Apache2.4.27、MySQL5.7.20、PHP7.1 1. 安裝 apache 官方源有,直接安裝: sudo apt-get

負載均衡集群介紹LVS介紹調度算法LVS NAT模式搭建

外網 redirect 更新 nec sad 接收 -a 使用 防火墻 負載均衡集群介紹 實現負載均衡集群的軟件有:LVS、keepalived、Nginx、haproxy等。其中LVS屬於四層(網絡OSI模型);Nginx 屬於七層;haproxy既可以認為是四層,也

CentOS+Nginx+Tomcat+Mysql+PHP 環境搭建系統部署

Linux Centos tomcat mysql nginx ==============安裝centos 7.0=======================選擇最小安裝,將相關的"調試工具"、“兼容性程序庫”、“開發工具”選中。此操作是為了減少後期安裝或編譯相關服

負載均衡集群LVS介紹調度算法LVS NAT模式搭建

集群 LVS NAT 負載均衡集群介紹 主流開源軟件LVS、keepalived、haproxy、nginx等 其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用 keepalived的負載均衡功能其實就是lvs lvs這種4層的負載均衡

mysql/MariaDB 搭建後創建密碼開啟遠程

機器 bsp OS select col HA class aca sql 創建密碼: mysqladmin -u root -p password newpassword 或 MariaDB [(none)]> use mysql MariaDB [mysql

負載均衡集群介紹LVS介紹調度算法 LVS NAT模式搭建

分配 hashing fault cmp apach dir 流行 tina -s 一、 負載均衡集群介紹 實現負載均衡主流開源軟件LVS、keepalived、haproxy、nginx等 1)、其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haprox

Centos 7上KVM虛擬化平臺搭建管理,圖文並茂,詳細易懂~~

machine err vnc 上傳 ng- list ESS 自己 nag 何為虛擬化: 虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一臺物理的服務器上可以跑多臺虛擬機,虛擬機共享物理機的 CPU、內存、IO 硬件資源,但邏輯上虛擬機之間是相互隔離的。物理機我們一般稱為宿

阿里雲CentOS搭建SVN伺服器許可權管理

  linux(centos)下SVN伺服器如何搭建?說到SVN伺服器,想必大家都知道,可以是在LINUX下如何搭建SVN伺服器呢?那麼今天給大家分享一下linux(centos)搭建SVN伺服器的思路!    雖然在windows上搭建SVN很簡單,但是效能卻不高,

jQuery基礎—1jQuery概述環境搭建

1.1JQuery是什麼? jQuery在javascript基礎上開發出來的,對javascript進行了封裝,功能更強大,操作更方便的一種javascript庫。 JQuery=Javascript + Query(查詢)= 通過Javascript從文件中查詢元素,並對其進行操作。

Kettle叢集介紹(WindowsLinux)環境搭建

一、Kettle叢集概述 1)  Kettle叢集簡介    叢集技術可以用來水平擴充套件轉換,使得他們能夠同時執行在多臺伺服器上。它將轉換的工作量均分到不同的伺服器上。一個集     群schema由一臺主伺服器,