CentOS7 安装邮件服务器(PostfixAdmin & MariaDB & Dovecot & Spamassassin)

本教程详细介绍了如何在 CentOS7 上安装和配置邮件服务器,包括安装 MariaDB 数据库、Apache 和 PHP7,部署 PostfixAdmin 管理平台,配置 Postfix 发送服务器、Dovecot 接收服务器,以及启用 Spamassassin 垃圾邮件过滤。按照步骤操作,您可以搭建起一个功能齐全的邮件服务器。
摘要由CSDN通过智能技术生成

安装步骤
1. 更新系统各组件
2. 创建邮件系统所需账户
3. 安装MariaDB数据库
4. 安装Apache 和 php7
5. 安装PostfixAdmin(邮件服务器账户及域名管理平台)
6. 安装和配置Postfix参数(邮件发送服务器)
7. 安装和配置Dovecot参数(邮件接收服务器)
8. 安装和配置Spamassassin参数(垃圾邮件过滤插件)
9. 配置Postfix启用Spamassassin

1. 更新系统各组件
Yum update && yum install wget nano
个人比较喜欢nano文本编辑器风格,如果你喜欢使用vi vim请随意。

2. 创建邮件系统所需账户
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
mkdir -p /var/vmail
chmod -R 770 /var/vmail
chown -R vmail:mail /var/vmail
出于安全考虑,我们新建一个账户他是所有邮箱的所有者。

3. 安装MariaDB 数据库
yum install mariadb-server
默认版本即可,也可以通过其他方式安装最新版本。

systemctl start mariadb.service
systemctl enable mariadb.service
设置启动和开机启动数据库服务器。

mysql_secure_installation
运行数据库安装命令

mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE postfixadmin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'strong_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q
创建PostfixAdmin所需数据库和账户授权

4. 安装apache和php7
yum install php php-mysql php-imap php-mbstring php-common httpd

5. 安装PostfixAdmin
最新版本支持三种数据库模式。MySQL/MariaDB , PostgreSQL , SQLite
考虑到企业级应用需要快速响应,我们这里使用MariaDB
wget -q -O - " https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz " | tar -xzf - -C /var/www/html
下载和解压最新版本的PostfixAdmin到网站根目录/var/www/html

nano /var/www/html/postfixadmin-3.2/config.inc.php
打开配置文件

$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'strong_password';
$CONF['database_name'] = 'postfixadmin';

$CONF['domain_path'] = 'NO';
$CONF['domain_in_mailbox'] = 'YES';

chown -R apache: /var/www/html/postfixadmin-3.2
修改目录所有者为apache用户
运行安装程序https://你的服务器IP/postfixadmin-3.2/public/setup.php
可能会缺少某些组件包,需要自行安装。仅仅出现警告提示并不影响安装使用。只要不出现error
填写安装秘钥,第一按确认会生成一串很长的秘钥复制秘钥段到配置文件 $CONF['setup_password'] = 秘钥串 保存文件
然后才能正确安装。

6. 安装和配置Postfix
yum install postfix
安装软件包
mkdir -p /etc/postfix/sql/
创建配合mysql用的语句配置文件

nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
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 AND alias_domain.active='1'

nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
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 AND alias_domain.active='1'

nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
query          = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query          = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query           = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100

nano /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'

nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = strong_password
hosts = localhost
dbname = postfixadmin
query           = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100
以上是创建各个配置文件
接下来在命令行中调整postfix配置参数
postconf -e "myhostname = $(hostname -f)"
 
postconf -e "virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
postconf -e "virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
postconf -e "virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"
 
postconf -e "smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt"
postconf -e "smtpd_tls_key_file = /etc/pki/tls/private/localhost.key"
postconf -e "smtpd_use_tls = yes"
postconf -e "smtpd_tls_auth_only = yes"
 
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
 
postconf -e "mydestination = localhost"
postconf -e "mynetworks = 127.0.0.0/8"
postconf -e "inet_protocols = ipv4"
postconf -e "inet_interfaces = all"

postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
以上命令行会改变/etc/postfix/main.cf中的配置参数

nano /etc/postfix/master.cf
打开这个配置文件,去掉一些#号并修改两行内容
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

然后设置重启和开机启动Postfix
systemctl enable postfix
systemctl restart postfix

7. 安装和配置Dovecot
安装dovecot 和mysql支持
Yum install dovecot dovecot-mysql
然后又是无聊的改对应文件中的参数
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n
mail_privileged_group = mail
mail_uid = vmail
mail_gid = mail
first_valid_uid = 150
last_valid_uid = 150

nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext

nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=strong_password
default_pass_scheme = MD5-CRYPT
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%u' as home, 'maildir:/var/vmail/%d/%u' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=',  quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes

nano /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@your_domain_name.com

nano /etc/dovecot/conf.d/10-master.conf
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    #group = vmail
  }
  user = dovecot
}

service auth-worker {
  user = vmail
}

然后修改dovecot配置文件的用户所属和给其他用户读写运行权限
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

systemctl enable dovecot 
systemctl restart dovecot 
设置开机启动dovecot

8. 安装和配置Spamassassin
yum install spamassassin
创建spamassassin所需的账户和组
groupadd spamd
useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd
chown spamd:spamd /var/log/spamassassin

9. 配置Postfix 启用SpamAssassin
nano /etc/postfix/master.cf
找到
smtp      inet  n       -       n       -       -       smtpd
在它下面新增一行
-o content_filter=spamassassin
然后再末尾加入
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

然后设置开机启动Spamssassin
systemctl enable spamassassin 
systemctl restart spamassassin 

最后重启各服务 生效所有配置
systemctl restart postfix
systemctl restart dovecot


参考:https://www.rosehosting.com/blog/set-up-a-mail-server-with-postfixadmin-and-mariadb-on-centos-7/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值