irpas技术客

CentOS7.9+Postfix+Dovecot+PostgreSQL+Postfixadmin搭建一个邮件服务器_h2402108258_postfix p

未知 1073

1.准备工作 介绍

这是配置邮件服务器的多部分教程。在最后,你将拥有一个能够为多个域提供标准电子邮件服务的邮件服务器。我将使用 Postfix、Dovecot、PostgreSQL 和 Postfixadmin。

在此之前,我将假设你拥有自己的服务器或 CentOS 7 最小的虚拟专用服务器 (VPS)。我还假设你有自己的域名。

开始使用

在进行设置postfix之前,我们需要一些做一些事情。更新你的yum。

yum update -y 设置主机名

重新设置你的主机名,你可以用"hostnamectl"指令设置你的主机名。

hostnamectl set-hostname mail.domain.com

验证你的更改是否有效

hostnamectl status 禁用selinux

?接下来,我们关闭selinux。编辑“/etc/selinux/config”或“/etc/sysconfig/selinux“来完成此操作。

vim /etc/selinux/config

将SELINUX选项改为”disabled“,编辑完成后你的文件如下图所示。

?

?接下来,我们先进行PostgreSQL的安装与配置。

2.PostgreSQL安装与配置

我们将安装最新版本的PostgreSQL,你可以去官网(“PostgreSQL: Linux downloads (other)”)选择你自己喜欢的版本,或者和我一样,使用以下命令安装14版本的PostgreSQL:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql14-server sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

?接下来修改配置文件:

vim /var/lib/pgsql/14/data/postgresql.conf

找到以下内容修改为:

listen_addresses = '*'

这意味着它监听所有的地址,或者你只想监听本机的地址,那么你可以将"*"替换成你自己的ip地址。?postgresql默认监听的端口是5432,如果你想修改,将“#port = 5432”注释取消并修改为你想要的端口。

接着修改"/var/lib/pgsql/14/data/pg_hba.conf"认证配置文件。

vim /var/lib/pgsql/14/data/pg_hba.conf

在文件最后,修改IPv4下面的

host all all 0.0.0.0/0 md5

如果你使用的?IPv6,那你应该修改对应下面的这行。

?运行并设置开机启动:

systemctl start pgsql-14 systemctl enable pgsql-14

安装 PostgreSQL 时,会为数据库服务器创建一个超级用户postgres,但它没有密码。以 root 身份使用以下命令设置密码,在这种情况下不要忘记“sudo”,因为您实际上想以另一个用户身份运行该命令。

sudo -u postgres psql

现在你应该在“postgres=#”提示符下。使用以下命令设置 postgres 用户的密码:

ALTER USER postgres PASSWORD 'your-new-password';

如果密码设置成功,服务器应该响应“ALTER ROLE”。

?创建数据库

由于我们将使用 PostfixAdmin 来管理用户和域,因此我们需要为其创建一个用户和一个数据库。为了方便,我们将创建名为postfix的用户和数据库。以下命令将创建用户和用户密码:

CREATE USER postfix WITH password 'YOUR_PASSWORD';

创建数据库并将权限赋予角色:?

CREATE DATABASE postfix ENCODING 'utf8'; GRANT ALL privileges ON DATABASE postfix TO postfix;

重启服务:

systemctl restart pgsql-14

使用以下命令退出:?

\q

记住,你必须在服务器上打开的你5432端口,以便在接下来的设置中可以连接到数据库。

Unix 邮件阅读器帐户

邮件将存储在文件系统中,因此邮件服务器需要一个系统帐户才能读取邮件。首先让我们看看该组是否存在。它应该已经创建,您可以使用以下命令进行验证:

cat /etc/group | grep mail

如果组 ID 号不是“12”,它应该返回类似“mail:x:12:postfix”的信息,请记下这个数字,因为稍后你将需要它。如果该组不存在,请使用以下命令添加:?

groupadd -g 12 mail

创建用于在磁盘上存储和访问电子邮件文件的新用户:

useradd -g mail -u 200 -d /home/mail -s /sbin/nologin mailreader

上一行将 mailreader 用户添加到“mail”组,将他们的用户 ID 号设置为 200,将他们的“主”目录设置为“/home/mail”并禁用登录。?

注意,如果你没有"/home/mail",请先创建它,如果你想使用其他目录,那么在接下来的设置中必须同步修改。

接下来,让我们进行PostfixAdmin的安装与配置。

3.PostfixAdmin安装与配置

PostfixAdmin具有很强大的功能,可以让我们轻松地管理邮箱、虚拟域和别名,支持用户管理自己的邮箱,包括修改密码、别名等。在安装 PostfixAdmin 之前,我们需要安装一些 PHP 的东西。首先,我将使用 PHP 版本 7.4,请记住,PostfixAdmin最少需要的是PHP7.0或以上的版本。

安装PHP

CentOS7默认安装了低版本的PHP,因此,我们先移除它。使用以下命令:

yum remove php*

接着我们添加几个yum源以便支持我们安装高版本的PHP。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-8.rpm

使用以下命令安装PostfixAdmin 需要或推荐的 PHP 模块:

yum install -y php74 php74-php-pgsql php74-php-fpm php74-php-fpm php74-php-mbstring php74-php-gd php74-php-json php74-php-curl php74-php-zip php74-php-xml

如果你不知道哪些没有安装且你的硬盘空间足够大,那你可以安装所有模块:

yum install php74*

接下来我们来对其进行配置。打开"/etc/opt/remi/php74/php-fpm.d/·/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz

解压文件并重新命名为postfixadmin:

tar xvf postfixadmin-3.3.11.tar.gz mv postfixadmin-postfixadmin-3.3.11 postfixadmin

?PostfixAdmin 需要一个templates_c目录,Web 服务器需要对该目录的读写权限。

cd postfixadmin mkdir templates_c chown -R nginx: /var/www/html/postfixadmin

默认PostfixAdmin 配置文件是config.inc.php,你可以在这里查询到所有PostfixAdmin可用的配置,但我不建议你直接修改此文件,因为这会使更新变得更加困难。让我们创建一个本地配置文件:

vim config.local.php

添加以下代码:?

<?php $CONF['default_language'] = 'cn'; #默认语言为中文 $CONF['database_type'] = 'pgsql'; #使用PostgreSQL数据库 $CONF['database_host'] = 'xxx.xxx.xxx.xxx'; #连接数据库的IP地址 $CONF['database_user'] = 'postfix'; #连接数据库的用户名 $CONF['database_password'] = 'YOUR_PASSWORD'; #密码 $CONF['database_name'] = 'postfix'; #使用的数据库名称 #默认使用的密码方法,需要与后面的dovecot密码方案一致 #$CONF['encrypt'] = 'dovecot:md5crypt'; $CONF['configured'] = true; ?> Nginx配置

?修改nginx的配置文件"/etc/nginx/nginx.conf"

vim /etc/nginx/nginx.conf

配置以下信息,使得你的WEB服务器可以访问php内容:?

server { listen 80; server_name mail.domain.com; include /etc/nginx/default.d/*.conf; root /var/www/html/postfixadmin/public; index index.html index.php; location / { try_files $uri $uri/ index.php; } location ~ \.php$ { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) {return 40;} # 使用之前配置php74-php-fpm的listen地址 fastcgi_pass unix:/var/opt/remi/php74/run/php-fpm/·/setup.php,它会显示以下画面?

systemctl start nginx systemctl enable nginx

如果是第一次打开,它会显示让你输入管理员密码,接着重新打开这个页面,并使用刚刚你设置的密码登入,你应该看到类似的内容

如果这期间有什么错误,那么它会提示你错误信息,你只需要解决它们再重新刷新,接着我们在最后面,添加一个管理员账号,比如admin@domain也许是一个不错的名字。

接着我们打开http://mail.domain.com/,它会默认跳到http://mail.domain.com/login.php,输入你的管理员账户进行登录。你完全可以将/var/www/html/postfixadmin/public的setup.php删除,以防止其他人管理你的邮箱服务器。

点击左上角的域名清单新增一个域名,接着你可以在虚拟用户清单那里为你的域名新建一个邮箱。接下来,我们进行Postfix的安装与配置。?

4.Postfix安装与配置

CentOS 7 默认自带 Postfix,但自带的版本只支持 MySQL,不支持 PostgreSQL。使用以下命令,检查你的postfix包含的数据库支持。

postconf -c /etc/postfix -m | grep sql

如果是默认安装的,你会看到以下内容:

[root@mail ~]# postconf -c /etc/postfix -m | grep sql mysql [root@mail ~]#

?编辑你的”/etc/yum.repos.d/CentOS-Base.repo”,它应该看起来像这样:

[base] name=CentOS-$releasever - Base release=$releasever&arch=$basearch&repo=os baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/ gpgcheck=1 priority=1 exclude=postfix* gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 [extras] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/ name=Qcloud centos extras - $basearch [os] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/os/$basearch/ name=Qcloud centos os - $basearch [updates] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/updates/$basearch/ name=Qcloud centos updates - $basearch [centosplus] name=CentOS-$releasever - Plus - mirrors.aliyun.com release=$releasever&arch=$basearch&repo=centosplus baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=1 priority=2 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 重新安装postfix

?在重新安装之前,必须先删除旧版本:

yum remove postfix -y

我们来安装新的postfix以支持postgresql:

yum install postfix -y

再运行"postconf -c /etc/postfix -m | grep sql",你会得到以下输出:

[root@mail ~]# postconf -c /etc/postfix -m | grep sql mysql pgsql [root@mail ~]#

接下来进行postfix的配置,由于网上关于此类的教程很多,所以我不再完成对本地进行测试的配置,我会直接完成对postgresql的所有支持配置。打开"/etc/postfix/main.cf"?

vim /etc/postfix/main.cf

找到这两行配置,将默认的配置注释,并重新添加为以下内容:

inet_interfaces = all inet_protocols = all

?接下来,我们在最后面添加以下内容:

mydestination = localhost, localhost.localdomain home_mailbox = Maildir/ #设置虚拟邮件用户映射的本地用户的UID号 virtual_uid_maps = static:200 #设置虚拟邮件用户映射的本地组的GID号 virtual_gid_maps = static:12 #启用SMTP认证 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_authenticated_header = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous #定义是否支持像outlook、foxmail等非标准协议认证 broken_sasl_auth_clients = yes # Postgresql 配置信息 #指定虚拟邮件用户对应的别名文件位置 virtual_alias_maps = pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf #域名 virtual_mailbox_domains = pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf #虚拟邮箱地址和存储位置对应关系的映射位置 virtual_mailbox_maps = pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf #指定虚拟邮箱存储目录的路径起点 virtual_mailbox_base = /home/mail relay_domains = $mydestination, proxy:pgsql:/etc/postfix/pgsql/relay_domains.cf virtual_mailbox_limit = 512000000 virtual_minimum_uid = 8 virtual_transport = virtual local_transport = virtual local_recipient_maps = $virtual_mailbox_maps

如果在main.cf之前有相同的配置,请将它们注释掉。保证所有我们增加的配置在最后面,这样以便修改和还原。?接下来,我们来创建在这些配置所需要的一些东西,其中一部分的解释我已经放在了上面。

接下来,我们来创建我们需要的文件,创建一个目录来保存新的映射:

mkdir /etc/postfix/pgsql

注意,所有创建文件的字段,为我们之前创建数据库角色的名称密码和数据库的名称。?

虚拟别名映射 vim /etc/postfix/pgsql/virtual_alias_maps.cf

添加以下内容:

user = postfix password = yourpassword hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = true 虚拟域映射 vim /etc/postfix/pgsql/virtual_domains_maps.cf

添加以下内容:

user = postfix password = yourpassword hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = false and active = true ?虚拟邮箱(用户)映射 vim /etc/postfix/pgsql/virtual_mailbox_maps.cf

添加以下内容:

user = postfix password = yourpassword hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true 虚拟邮箱限制 vim /etc/postfix/pgsql/virtual_mailbox_limits.cf

添加以下内容:

user = postfix password = yourpassword hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s' 中继域 vim /etc/postfix/pgsql/relay_domains.cf

?添加以下内容:

user = postfix password = yourpassword hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = true

如果你现在运行“ls -alh /etc/postfix/pgsql/”,你的“pgsql”目录中应该有 5 个文件:

?重启Postfix

systemctl restart postfix

接着我们对Dovecot安装与配置。?

5.Dovecot安装与配置

第一步是在我们的服务器上安装 Dovecot:

yum install -y dovecot dovecot-pgsql

Dovecot主?配置文件位于“/etc/dovecot/dovecot.conf”,打开文件:

vim /etc/dovecot/dovecot.conf

我通常将整个文件保留为默认配置,并将我的自定义设置添加到文件末尾。向下滚动文件并在最后,通过在其前面添加“#”来注释掉这一行:

#!include_try /etc/dovecot/local.conf

这将阻止 Dovecot 尝试加载其他文件,我们将对这个文件的末尾进行所有更改,因此我们不希望它在其他一些设置中读取并覆盖我们设置的内容。接下来,添加以下设置:

# 邮箱默认位置 mail_location = maildir:/home/mail/%u/ # 收件箱 namespace inbox { type = private inbox = yes location = mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix = } # 使用的协议 protocols = imap pop3 lmtp # 禁用认证 ssl = no # 收到新连接时发送的消息 login_greeting = xxxxxxx # 身份验证 auth_mechanisms = plain login # 明文密码验证,telnet测试收件更改为no disable_plaintext_auth = yes # 登录调试信息,如果你在客户端登录出现问题,请打开它 #auth_debug = yes #auth_debug_passwords = yes service auth { # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } # Auth process is run as this user. user = postfix group = postfix } service imap { executable = imap } # 数据库验证 userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf } passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf } first_valid_uid = 200 mail_uid = 200 mail_gid = 12 mail_plugins = $mail_plugins zlib plugin { zlib_save_level = 6 zlib_save = gz } protocol imap { mail_plugins = $mail_plugins imap_zlib } mail_max_userip_connections = 50 # 日志 log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot-info.log

接着我们创建“/etc/dovecot/dovecot-sql.conf”,添加以下内容:

driver = pgsql connect = host=localhost dbname=postfix user=postfix password=yourpassword # 如果你在PostfixAdmin的配置中修改了密码配置,请修改为对应的密码方案 # md5crypt -> MD5-CRYPT # md5 -> PLAIN-MD5 # cleartext -> PLAIN default_pass_scheme = MD5-CRYPT password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' user_query = SELECT '/home/mail/' || maildir AS mail, 200 as uid, 12 as gid FROM mailbox WHERE username = '%u' AND active = '1'

?启动Dovecot:

systemctl start dovecot systemctl enable dovecot

接下来,你可以使用Foxma进行登录测试发信收信认证,注意,用户名和账号必须是完整的user@domain.com,不要忘记将服务器的25,80,110,143端口打开。如果出现错误,打开"/var/log/maillog" "/var/log/dovecot.log"?"/var/log/dovecot-info.log"查看相关的错误信息。

测试结果:?

?

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #postfix #postgresql #我将使用 # #Postfixadmin