如何在 Ubuntu 环境下搭建邮件服务器(三)

简介:

在本系列的最后,我们将详细介绍如何在 Dovecot 和 Postfix 中设置虚拟用户和邮箱。

欢迎回来,热心的 Linux 系统管理员们! 在本系列的第一部分和第二部分中,我们学习了如何将 Postfix 和 Dovecot 组合在一起,搭建一个不错的 IMAP 和 POP3 邮件服务器。 现在我们将学习设置虚拟用户,以便我们可以管理所有 Dovecot 中的用户。

抱歉,还不能配置 SSL

我知道我答应过教你们如何设置一个受 SSL 保护的服务器。 不幸的是,我低估了这个话题的范围。 所以,我会下个月再写一个全面的教程。

今天,在本系列的最后一部分中,我们将详细介绍如何在 Dovecot 和 Postfix 中设置虚拟用户和邮箱。 在你看来这是有点奇怪,所以我尽量让下面的例子简单点。我们将使用纯文本文件和纯文本来进行身份验证。 你也可以选择使用数据库后端和较强的加密认证形式,具体请参阅文末链接了解有关这些的更多信息。

虚拟用户

我们希望邮件服务器上用的是虚拟用户而不是 Linux 系统用户。使用 Linux 系统用户不能扩展,并且它们会暴露系统登录账号,给你的服务器带来不必要的风险。 设置虚拟用户需要在 Postfix 和 Dovecot 中编辑配置文件。我们将从 Postfix 开始。首先,我们将从一个干净、简化的 /etc /postfix/main.cf 开始。移动你原始的main.cf 到别处做个备份,创建一个新的干净的文件,内容如下:

 
 
  1. compatibility_level=2 
  2. smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU) 
  3. biff = no 
  4. append_dot_mydomain = no 
  5.  
  6. myhostname = localhost 
  7. alias_maps = hash:/etc/aliases 
  8. alias_database = hash:/etc/aliases 
  9. myorigin = $myhostname 
  10. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 
  11. mailbox_size_limit = 0 
  12. recipient_delimiter = + 
  13. inet_interfaces = all 
  14.  
  15. virtual_mailbox_domains = /etc/postfix/vhosts.txt 
  16. virtual_mailbox_base = /home/vmail 
  17. virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt 
  18. virtual_minimum_uid = 1000 
  19. virtual_uid_maps = static:5000 
  20. virtual_gid_maps = static:5000 
  21. virtual_transport = lmtp:unix:private/dovecot-lmtp0 

你可以直接拷贝这份文件,除了 mynetworks 参数的设置 192.168.0.0/24,它应该是你的本地子网掩码。

接下来,创建用户和组 vmail 来拥有你的虚拟邮箱。虚拟邮箱保存在 vmail 的家目录下。

 
 
  1. $ sudo groupadd -g 5000 vmail 
  2. $ sudo useradd -m -u 5000 -g 5000 -s /bin/bash vmail 

接下来重新加载 Postfix 配置:

 
 
  1. $ sudo postfix reload 
  2. [sudo] password for carla:  
  3. postfix/postfix-script: refreshing the Postfix mail system 

Dovecot 虚拟用户

我们会使用 Dovecot 的 lmtp 协议来连接到 Postfix。你可以这样安装:

 
 
  1. $ sudo apt-get install dovecot-lmtpd 

main.cf 的最后一行涉及到 lmtp。复制这个 /etc/dovecot/dovecot.conf 示例文件来替换已存在的文件。再说一次,我们只使用这一个文件,而不是 /etc/dovecot/conf.d 内的所有文件。

 
 
  1. protocols = imap pop3 lmtp 
  2. log_path = /var/log/dovecot.log 
  3. info_log_path = /var/log/dovecot-info.log 
  4. ssl = no 
  5. disable_plaintext_auth = no 
  6. mail_location = maildir:~/.Mail 
  7. pop3_uidl_format = %g 
  8. auth_verbose = yes 
  9. auth_mechanisms = plain 
  10.  
  11. passdb { 
  12.   driver = passwd-file 
  13.   args = /etc/dovecot/passwd 
  14.  
  15. userdb { 
  16.   driver = static 
  17.   args = uid=vmail gid=vmail home=/home/vmail/studio/%u 
  18.  
  19. service lmtp { 
  20.  unix_listener /var/spool/postfix/private/dovecot-lmtp { 
  21.    group = postfix 
  22.    mode = 0600 
  23.    user = postfix 
  24.   } 
  25. }
  26.  
  27. protocol lmtp { 
  28.   postmaster_address = postmaster@studio 
  29. service lmtp { 
  30.   user = vmail 

最后,你可以创建一个含有用户和密码的文件 /etc/dovecot/passwd。对于纯文本验证,我们只需要用户的完整邮箱地址和密码:

 
 
  1. alrac@studio:{PLAIN}password 
  2. layla@studio:{PLAIN}password 
  3. fred@studio:{PLAIN}password 
  4. molly@studio:{PLAIN}password 
  5. benny@studio:{PLAIN}password 

Dovecot 虚拟用户独立于 Postfix 虚拟用户,因此你需要管理 Dovecot 中的用户。保存所有的设置并重启 Postfix 和 Dovecot:

 
 
  1. $ sudo service postfix restart 
  2. $ sudo service dovecot restart 

现在让我们使用老朋友 telnet 来看下 Dovecot 是否设置正确。

 
 
  1. $ telnet studio 110 
  2. Trying 127.0.1.1... 
  3. Connected to studio. 
  4. Escape character is '^]'
  5. +OK Dovecot ready. 
  6. user molly@studio 
  7. +OK 
  8. pass password 
  9. +OK Logged in
  10. quit 
  11. +OK Logging out
  12. Connection closed by foreign host. 

现在一切都好!让我们用 mail 命令,发送测试消息给我们的用户。确保使用用户的完整电子邮箱地址而不只是用户名。

 
 
  1. $ mail benny@studio 
  2. Subject: hello and welcome! 
  3. Please enjoy your new mail account! 

最后一行的英文句点表示发送消息。让我们看下它是否到达了正确的邮箱。

 
 
  1. $ sudo ls -al /home/vmail/studio/benny@studio/.Mail/new 
  2. total 16 
  3. drwx------ 2 vmail vmail 4096 Dec 14 12:39 . 
  4. drwx------ 5 vmail vmail 4096 Dec 14 12:39 .. 
  5. -rw------- 1 vmail vmail  525 Dec 14 12:39 1481747995.M696591P5790.studio,S=525,W=540 

找到了。这是一封我们可以阅读的纯文本文件:

 
 
  1. $ less 1481747995.M696591P5790.studio,S=525,W=540 
  2. Return-Path: <carla@localhost> 
  3. Delivered-To: benny@studio 
  4. Received: from localhost 
  5.         by studio (Dovecot) with LMTP id V01ZKRuuUVieFgAABiesew 
  6.         for <benny@studio>; Wed, 14 Dec 2016 12:39:55 -0800 
  7. Received: by localhost (Postfix, from userid 1000) 
  8.         id 9FD9CA1F58; Wed, 14 Dec 2016 12:39:55 -0800 (PST) 
  9. Date: Wed, 14 Dec 2016 12:39:55 -0800 
  10. To: benny@studio 
  11. Subject: hello and welcome! 
  12. User-Agent: s-nail v14.8.6 
  13. Message-Id: <20161214203955.9FD9CA1F58@localhost> 
  14. From: carla@localhost (carla) 
  15.  
  16. Please enjoy your new mail account! 

你还可以使用 telnet 进行测试,如本系列前面部分所述,并在你最喜欢的邮件客户端中设置帐户,如 Thunderbird,Claws-Mail 或 KMail。

故障排查

当邮件工作不正常时,请检查日志文件(请参阅配置示例),然后运行 journalctl -xe。 这时会提供定位输入错误、未安装包和可以 Google 的短语等所有需要的信息。





本文作者:佚名
来源:51CTO
目录
相关文章
|
3月前
|
监控 安全 Linux
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第18天】在RHEL环境下部署Subversion服务器需依次完成安装Subversion、创建版本库、配置服务器、启动服务、客户端连接及备份维护等步骤。确保遵循安全最佳实践,保障数据安全。
124 1
|
3月前
|
SQL 机器学习/深度学习 分布式计算
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
113 1
|
10天前
|
JSON Ubuntu 开发者
ubuntu 22安装lua环境&&编译lua cjson模块
通过上述步骤,可以在 Ubuntu 22.04 系统上成功安装 Lua 环境,并使用 LuaRocks 或手动编译的方式安装 lua-cjson 模块。本文详细介绍了每一步的命令和操作,确保每一步都能顺利完成,适合需要在 Ubuntu 系统上配置 Lua 开发环境的开发者参考和使用。
47 13
|
1月前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
48 8
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
46 4
|
2月前
|
Ubuntu 网络协议 关系型数据库
超聚变服务器2288H V6使用 iBMC 安装 Ubuntu Server 24.04 LTS及后续系统配置
【11月更文挑战第15天】本文档详细介绍了如何使用iBMC在超聚变服务器2288H V6上安装Ubuntu Server 24.04 LTS,包括连接iBMC管理口、登录iBMC管理界面、配置RAID、安装系统以及后续系统配置等步骤。
187 4
|
3月前
|
安全 Linux 数据安全/隐私保护
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第17天】在RHEL环境下部署Subversion服务器包括安装Subversion、创建和配置版本库、启动服务器、客户端连接以及备份与恢复等步骤。通过这些步骤,可确保服务器的安全性和稳定性,满足版本控制需求。
|
3月前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
80 2
|
3月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
702 3
|
3月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
523 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。