Ubuntu Linux 搭建邮件服务器(postfix + dovecot)

news/2024/11/19 11:41:45/文章来源:https://www.cnblogs.com/007sx/p/18347813

准备工作

1. 一台公网服务器(需要不被服务商限制发件收件的,也就是端口25、110、143、465、587、993、995不被限制),如有防火墙或安全组需要把这些端口开放

2. 一个域名,最好是com cn org的一级域名

3. 域名备案(如果服务器是国外的则不需要备案)

一、配置域名解析

1. 登录阿里云,找到云解析DNS

选择域名,如abc.com

①. 添加MX记录

- 记录类型:MX

- 主机记录:@

- 记录值:mail.abc.com

- MX优先级:1

②添加A记录

- 记录类型:A

- 主机记录:mail

- 记录值:服务器IP

- TTL:10分钟

③添加SPF记录

- 记录类型:TXT

- 主机记录:@

- 记录值:v=spf1 mx:mail.abc.com ip4:服务器IP -all

- TTL:10分钟

最后完成如下图

2. 安装并配置Postfix

apt-get update
sudo apt install -y postfix

安装过程中有选项需要选择,先选择1(No configuration),等下一步再单独配置

安装完成,输入下面命令配置Postfix

sudo dpkg-reconfigure postfix

将显示配置界面,选择 Internet Site ,然后分别输入或者选择以下值

  •  mail.abc.com
  • steve
  • mail.abc.com, abc.com, localhost.localdomain, localhost
  • no
  • 127.0.0.0/8
  • 0
  • +
  • ipv4

配置邮箱目录

sudo postconf -e 'home_mailbox = Maildir/'

使用 SASL(Dovecot SASL)配置 Postfix 的 SMTP-AUTH,在终端提示符下运行这些命令

sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain = $myhostname'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
sudo postconf -e 'smtpd_sasl_tls_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

配置TLS(使用自签名证书)

[root@mail ~]# cd# 生成私钥
[root@mail ~]# openssl genrsa -des3 -out server.key 2048
Enter pass phrase:    #输入密码
Verifying - Enter pass phrase:  #重复输入密码#下面这个步骤是删除server.key中的密码
[root@mail ~]# openssl rsa -in server.key -out server.key.insecure
Enter pass phrase for server.key:  #输入刚才设置的密码
writing RSA key#重命名证书
[root@mail ~]# mv server.key server.key.secure
[root@mail ~]# mv server.key.insecure server.key# 生成CSR(证书签名请求)
[root@mail ~]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: #输入刚才设置的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN #国家简称
State or Province Name (full name) []:Beijing #省
Locality Name (eg, city) [Default City]:Beijing  #城市
Organization Name (eg, company) [Default Company Ltd]:OPS  #公司名
Organizational Unit Name (eg, section) []:OPS   #部门名
Common Name (eg, your name or your server's hostname) []:mail.abc.com
Email Address []:admin@abc.com  
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:  #直接按Enter
An optional company name []:  #直接按Enter#生成自签名证书
[root@mail ~]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Enter pass phrase for server.key:  #直接按Enter
Certificate request self-signature ok
subject=C = CN, ST = Beijing, L = Beijing, O = OPS, OU = OPS, CN = mail.abc.com, emailAddress = admin@abc.com
Getting Private key#设置权限
[root@mail ~]# chmod 400 server.*

最后把证书拷贝到系统证书目录

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

拥有证书后,配置 Postfix,在终端提示符下运行这些命令:

sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_auth_only = yes'

最后查看配置 vim /etc/postfix/main.cf 后面部分如下即可

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key
smtpd_tls_security_level = maysmtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scachesmtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.abc.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.abc.com, abc.com, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous,noplaintext
smtpd_sasl_tls_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_auth_only = yes

配置SMTPS ==> vim /etc/postfix/master.cf 

smtps部分去掉注释

smtps     inet  n       -       -       -       -       smtpd-o smtpd_tls_wrappermode=yes-o smtpd_sasl_auth_enable=yes-o smtpd_client_restrictions=permit_sasl_authenticated,reject-o milter_macro_daemon_name=ORIGINATING

3. 安装并配置Dovecot

sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d

 安装完成配置信息

vim /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain  改成  auth_mechanisms = plain login 

vim /etc/dovecot/conf.d/10-master.conf
改成如下
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 = #group = }# Postfix smtp-authunix_listener /var/spool/postfix/private/auth {mode = 0660user = postfixgroup = postfix}}
vim /etc/dovecot/dovecot.conflisten = *, ::#!include conf.d/*.conf!include conf.d/10-auth.conf
!include conf.d/10-master.confssl = no
disable_plaintext_auth = no
mail_location = maildir:~/Maildir

4. 启动邮箱服务并新增邮箱用户

sudo systemctl start postfix
sudo systemctl start dovecot
#重启命令:
sudo systemctl restart postfix
sudo systemctl restart dovecot

#======新建邮箱用户====== useradd -m 用户名 passwd 用户名 #输入密码 #确认密码#======验证账户====== sudo doveadm auth test 用户名

5. 安装mailutils测试发件

sudo apt install -y mailutils#======测试发件======
echo '搭建邮件服务器成功啦!!!' | mail -s '通知!' xxx@qq.com

6. 安装系统日志

sudo yum install -y rsyslog
sudo systemctl enable rsyslog
sudo systemctl start rsyslog
后续查看邮件服务日志方式
sudo tail -f /var/log/maillog

 

二、使用Foxmail收发邮件

①windows10版本的Foxmail 新建账号完成后闪退,所以先设置下:

首先找到Foxmail快捷方式,右键属性。
找到兼容性,并且在下方找到“以管理员身份运行此程序”,勾选,确定

②打开Foxmail,新建账号 => 其它邮箱 => 手动设置 => POP3

邮件账号:账号@abc.com

密码:xxxxxx

POP服务器:mail.abc.com    SSL 110(不勾选,如果想勾选走995端口,则需要配置Dovecot的SSL信息,可自行研究)

SMTP服务器:mail.abc.com  SSL 465(勾选)

 注:虽然发件服务(SMTP)启用了SSL走的端口是465,但是实测25端口还得开放,不然无法接收外部邮件

 

 

 

 

 

参考:https://ubuntu.com/server/docs/install-and-configure-postfix#smtps

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779462.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P1064 金明的预算方案——题解

洛谷P1064题解传送锚点摸鱼环节 [NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 \(n\) 元钱…

从0到1:穿透 SpringCloud 工业级 底座工程的架构和实操,让自己实力猛增

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

最小二乘法原理推导+代码实现[Python]

0.前言本文主要介绍了最小二乘法公式推导,并且使用Python语言实现线性拟合。 读者需要具备高等数学、线性代数、Python编程知识。 请读者按照文章顺序阅读。 绘图软件为:geogebra5。1.原理推导 1.1应用 最小二乘法在购房中的应用通常涉及房价预测和房屋定价方面。这种统计方法…

SpringBoot项目中HTTP请求体只能读一次?试试这方案

问题描述 在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到类似以下的错误信息:大体的意思是当前request的getInputStream()已经被调用过了。那为什么会出现这…

类与类之间的基本关系

类与类之间的基本关系 类与类之间的六种关系 一、继承关系继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用…

js 将十进制字符串转换成4字节的字节数组

函数function convertToHexArrays(input) {// 通过制表符分割输入字符串const numbers = input.split(\t);// 用于存储结果的数组const result = [];for (let num of numbers) {// 将字符串转换为数字const value = parseInt(num);// 创建一个 4 字节的 ArrayBufferconst buffe…

超异构计算杂谈

超异构计算杂谈 在这一节中要从更远的视角来看看计算机架构发展的黄金 10 年,主要将围绕异构计算和超异构来展开。在开始具体内容前,非常推荐观看以下两个视频:计算机架构的新黄金时代:A New Golden Age for Computer Architecture 编译器的黄金时代:The Golden Age of Co…

转发wsa和安卓模拟器网络

adb连接上设备后, 执行 执行端口转发 adb forward tcp:6789 tcp:888`就可以了, 把设备的8888端口转发到本机6789, 本机postman之类直接访问 127.0.0.1:6789即可 其他笔记:连接wsa: adb connect 127.0.0.1:58526 连接安卓模拟器: adb connect 127.0.0.1:58526 安装app adb -s 1…

09HTML+CSS

完成小兔鲜儿商城界面1 <!DOCTYPE html>2 <html lang="en">3 4 <head>5 <meta charset="UTF-8">6 <meta name="viewport" content="width=device-width, initial-scale=1.0">7 <!-- 提升…

macos上安装esp-idf v4.2版本

参考 https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/get-started/linux-macos-setup.html 安装 Prerequisites brew install cmake ninja dfu-utilgit下载idf 4.2版本并安装 git clone -b release/v4.2 --recursive https://github.com/espressif/esp-id…

VS设置 LLVM-Clang 编译器进行编译C++项目

在VS中默认的C++编译器一般为 MSVC 编译器,可以根据自己的需要将其设置为 LLVM-Clang 编译器。主要有两种方案: 1)直接使用 Visual Studio Installer来自动下载对应的 Clang 编译器和构建工具,后续无需再进行配置,便可直接使用。 2)使用自己编译或者单独下载的 LLVM-Clan…

记一次微信聊天记录导出工具的折腾

小记微信聊天记录选择性导出工具: WechatExporter 的使用目前的微信app(iOS端 v8.0.46)聊天记录中, 允许用户基于图片/视频进行筛选 单个或者少量保存到本机没啥问题 但是如果你量很大, 不好意思, 有批量操作功能, 但是我不支持全选, 因为我批量操作单次最多只支持 9 个文件 就…