Linux——邮件服务器

一、分类

系统安全:

防火墙  SELinux

系统应用服务:

1、文件或者存储相关的解决方案 --- smb   nfs   ftp  (raid iscsi 以及一些高级的存储服务等 )面向服务器中提供存储资源

2、网络或者站点访问的相关服务     面向目标用户/客户提供网站访问

        1. DNS (DNS 记录的类型 A/AAAA    PTR   txt  NS MX SOA CNAME)

        2. web (http   )

        3. 数据库服务(数据备份和恢复/数据主从架构 -- 数据集群 [ 数据库读写分离 | 数据的分库分库(写库) ])

3、内部应用软件运维

        1. 邮件服务器

        2. 企业微信/钉钉

邮件服务器

电子邮件系统整体架构:

MailBox

类Unix/Linux 系统中的mailbox格式主要有两种:mbox格式和Maildir格式,通常存储在 /var/mail 或者 /var/spool/mail 目录下。

mbox格式:

mbox是一种简单的文件格式,它将所有的邮件存储在单个文件中。mbox文件的每行都以“From ”开头,后跟发件人的信息和日期。这就是为什么mbox文件有时也称为“From ”文件。在mbox文件中,每个邮件都由两个“From ”行分隔开。在Unix中,这些行通常由一个冒号和一个换行符组成,例如“From: sender@example.com\n”。为了避免意外中断,邮件正文中的所有“From ”行都必须被转义。

Maildir格式:

Maildir格式是一种使用多个目录来组织邮件的格式。Maildir格式将每个邮件存储在单独的文件中,这使得它更易于管理和备份。Maildir格式包括三个目录:cur,new和tmp。

无论是mbox还是Maildir格式,都可以使用各种邮件客户端程序进行读取和管理。邮件客户端程序通常支持这两种格式中的一种或多种。

邮件角色

可以把这些当作快递的形式

MUA   相当于邮箱

(Mail User Agent)接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信;例如Foxmail或Outlook。(网易邮箱大师 | QQ邮箱)

MTA  用于传递邮件

(Mail Transfer Agent) 通过SMTP协议发送、转发邮件;例如Linux中的sendmail和postfix。

MDA   相当于菜鸟驿站保存并扫描快递

(Mail Deliver Agent)将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描;

MRA   读取邮件并和MUA进行交流

(Mail Receive Agent)负责实现IMAP与POP3协议,与MUA进行交互;

邮件协议

SMTP 发送协议

(Simple Mail Transfer Protocol) 发送邮件所使用的标准协议, 普通协议使用25端口,SSL/TLS 协议(SMTPS)使用465端口,STARTTLS 协议(smtp-submission)使用587端口;

IMAP 发送协议

(Internet Message Access Protocol) 接收邮件使用的标准协议之一, 普通协议使用143端口,SSL/TLS 协议(IMAPS)使用993端口;

POP3 接受协议

(Post Office Protocol 3) 接收邮件使用的标准协议之一,普通协议使用110端口,SSL协议(POP3S)使用995端口;

其中pop3属于比较早期的协议,需要把邮件全部下载到本地,且本地的操作比如删除、打标等不能回传到服务端,现在已经比较少使用,imap的操作是双向的,即客户端本地操作可以同步到服务端,目前主流的邮件服务器都是使用的smtp及imap协议,有些出于历史兼容性考虑也会支持pop3。

有些文章中说smtp协议用于发送邮件,pop3/imap协议用于接收邮件,严格意义上来说是不准确的。上述的说法,视角是站在客户端的,即邮件客户端(MUA)使用smtp协议发送邮件,使用pop3/imap协议接收邮件。smtp协议定义的是邮件传输标准,即smtp协议即可以发邮件,也可以收邮件。事实上,各个MTA之间都是使用smtp协议来传输邮件,比如新浪邮箱传输邮件到谷歌邮箱:

上述流程中,谷歌的MTA作为接收方使用smtp协议接收新浪传过来的邮件。

邮件传输完整流程

搞清前面说的那些概念,对照电子邮件系统架构图,邮件发送和接收的整体流程如下:

step 1:发送方邮件客户端(MUA)通过smtp协议发送邮件至发送方MTA

step 2:发送方MTA查询接收方邮件域名的dns mx记录,获取接收方MTA的ip地址

step 3:发送方MTA通过smtp协议发送邮件给接收方MTA

step 4:接收方MTA将邮件发给MDA(投递代理)

step 5:MDA将邮件存入主机的 MailBox 文件中    (接收方顺利接受邮件)

step 6:接收方邮件客户端(MUA)通过imap/pop3请求MRA接收邮件

step 7:MRA 从主机的 MailBox 中读取最新邮件

常用邮件软件对应关系

  • MUA:outlook、thunderbird、Mac Mail、Foxmail、mail/mailx(命令行)、mutt(命令行)
  • MTA:sendmail、postfix
  • MDA:procmail、dropmail
  • MRA:dovecot

一般自建的话,只需要 postfix + dovecot,我们基于这些软件搭建的电子邮件系统架构如下图所示:

SMTP 也是基于 TCP 协议的,下面是命令和应答清单:

Postfix 重要配置参数:

参数

描述

myhostname

邮局系统的主机名

mydomain

邮局系统的域名

myorigin

从本机发出邮件的域名名称

inet_interfaces

监听的网卡接口

mydestination

可接收邮件的主机名或域名

mynetworks

设置可转发哪些主机的邮件

relay_domains

设置可转发哪些网域的邮件

电子邮件系统中,存在四个不同的角色,

MUA                 // thunderbird

MTA  MDA       // postfix

MRA                 // dovecot

实验

实验规划域名为:

邮件域: test.com    所有的邮箱地址 xxx@test.com

DNS记录:

  1. mx 记录 说明 test.com 对应的邮件服务器地址
  2. A    邮件服务器域名和IP的对应关系
[root@mail ~]# yum -y install unbound

[root@mail ~]# ls /etc/unbound/

conf.d  keys.d  local.d  unbound.conf

[root@mail ~]# vim /etc/unbound/unbound.conf 

配置监听地址、允许访问的地址范围 ,以以及DNS记录

此处仅有DNS记录 其他自行配置

[root@mail ~]# systemctl start unbound
[root@mail ~]# 
[root@mail ~]# unbound-checkconf 
unbound-checkconf: no errors in /etc/unbound/unbound.conf
[root@mail ~]# dig -t mx test.com

; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t mx test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59255
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
; COOKIE: e666b739533aff2a002c0a2f663994bddc2c143ba5645930 (good)
;; QUESTION SECTION:
;test.com.			IN	MX

;; AUTHORITY SECTION:
test.com.		5	IN	SOA	ns.test.com. postmaster.test.com. 2020111201 28800 7200 604800 3600

;; Query time: 2 msec
;; SERVER: 192.168.110.2#53(192.168.110.2)
;; WHEN: Mon May 06 19:41:01 PDT 2024
;; MSG SIZE  rcvd: 115

[root@mail ~]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain test.com
nameserver 192.168.110.131

# 解析存在问题,排除错误 

[root@mail ~]# ss -anput | grep 53
udp   UNCONN 0      0               192.168.122.1:53              0.0.0.0:*      users:(("dnsmasq",pid=4996,fd=5))                                              
udp   UNCONN 0      0                     0.0.0.0:5353            0.0.0.0:*      users:(("avahi-daemon",pid=1051,fd=15))                                        
udp   UNCONN 0      0                        [::]:5353               [::]:*      users:(("avahi-daemon",pid=1051,fd=16))                                        
udp   UNCONN 0      0                        [::]:45396              [::]:*      users:(("avahi-daemon",pid=1051,fd=18))                                        
tcp   LISTEN 0      32              192.168.122.1:53              0.0.0.0:*      users:(("dnsmasq",pid=4996,fd=6))                                              
[root@mail ~]# killall dnsmasq
[root@mail ~]# systemctl restart unbound
[root@mail ~]# ss -anput | grep 53
省略输出

[root@mail ~]# dig -t mx test.com 
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t mx test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32861
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com.			IN	MX

;; ANSWER SECTION:
test.com.		3600	IN	MX	10 mail.test.com.

;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Mon May 06 19:42:58 PDT 2024
;; MSG SIZE  rcvd: 58

[root@mail ~]# dig -t a mail.test.com

; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t a mail.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49380
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mail.test.com.			IN	A

;; ANSWER SECTION:
mail.test.com.		3600	IN	A	192.168.110.131

;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Mon May 06 19:43:19 PDT 2024
;; MSG SIZE  rcvd: 58

//DNS解析和规划一致

配置postfix  邮件传输  主要是配置允许传输test.com域的邮件  

[root@mail ~]# rpm -qa | grep postfix 
[root@mail ~]# rpm -qa | grep sendmail
[root@mail ~]# yum -y install postfix 
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 2:21:15 ago on Mon 06 May 2024 05:24:49 PM PDT.
Dependencies resolved.
==============================================================================================================================
 Package                     Architecture               Version                              Repository                  Size
==============================================================================================================================
Installing:
 postfix                     x86_64                     2:3.3.1-12.el8                       baseos                     1.5 M

Transaction Summary
==============================================================================================================================
Install  1 Package

Total size: 1.5 M
Installed size: 4.1 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                      1/1 
  Running scriptlet: postfix-2:3.3.1-12.el8.x86_64                                                                        1/1 
  Installing       : postfix-2:3.3.1-12.el8.x86_64                                                                        1/1 
  Running scriptlet: postfix-2:3.3.1-12.el8.x86_64                                                                        1/1 
  Verifying        : postfix-2:3.3.1-12.el8.x86_64                                                                        1/1 
Installed products updated.

Installed:
  postfix-2:3.3.1-12.el8.x86_64                                                                                               

Complete!
[root@mail ~]# ls /etc/postfix/
access     dynamicmaps.cf    generic        main.cf        master.cf        postfix-files    relocated  virtual
canonical  dynamicmaps.cf.d  header_checks  main.cf.proto  master.cf.proto  postfix-files.d  transport
[root@mail ~]# vim /etc/postfix/main.cf
### 找到对应的行 并修改即可
myhostname = mail.test.com
mydomain = test.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain

[root@mail ~]# systemctl enable --now  postfix.service 
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
[root@mail ~]# systemctl status postfix 
[root@mail ~]# ss -anput | grep 25 
udp   ESTAB  0      0      192.168.110.131%ens160:68      192.168.110.254:67     users:(("NetworkManager",pid=1274,fd=26))                                      
tcp   LISTEN 0      100                   0.0.0.0:25              0.0.0.0:*      users:(("master",pid=39081,fd=16))                                             
tcp   LISTEN 0      100                      [::]:25                 [::]:*      users:(("master",pid=39081,fd=17))                                             
// 服务启动完毕,必须配置MRA

配置Dovecot 进行邮件的接受

[root@mail ~]# yum -y install dovecot
[root@mail ~]# vim /etc/dovecot/dovecot.conf 
[root@mail ~]# grep -v '^$' /etc/dovecot/dovecot.conf | grep -v "#"
## 重点是下面这三行
protocols = imap pop3
disable_plaintext_auth = no 
login_trusted_networks = 192.168.110.0/24
[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf 
# 加这一行
mail_location = mbox:~/mail:INBOX=/var/mail/%u
<pre>[root@mail ~]# systemctl enable dovecot.service 
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /usr/lib/systemd/system/dovecot.service.
[root@mail ~]# ss -anput | grep 143
[root@mail ~]# ss -anput | grep do
[root@mail ~]# ss -anput | grep 143
[root@mail ~]# systemctl start dovecot.service 
[root@mail ~]# ss -anput | grep 143
tcp   LISTEN 0      100                   0.0.0.0:143  0.0.0.0:*      users:((dovecot,pid=40157,fd=41))                                            
tcp   LISTEN 0      100                      [::]:143                [::]:*      users:((dovecot,pid=40157,fd=42))
// 服务启动

设置测试用户

[root@mail ~]# useradd  aaa 
[root@mail ~]# echo "redhat" | passwd --stdin aaa
Changing password for user aaa.
passwd: all authentication tokens updated successfully.
[root@mail ~]# useradd  bbb
[root@mail ~]# echo "redhat" | passwd --stdin bbb
Changing password for user bbb.
passwd: all authentication tokens updated successfully.
[root@mail ~]# su - aaa
[aaa@mail ~]$ mkdir -p mail/.imap/INBOX 
[aaa@mail ~]$ touch mail/.imap/Sent
[aaa@mail ~]$ exit
logout
[root@mail ~]# su - bbb
[bbb@mail ~]$ mkdir -p mail/.imap/INBOX
[bbb@mail ~]$ touch mail/.imap/Sent
[bbb@mail ~]$ exit
logout

图形化

配置thunderbird  用户代理(主要就是实现登录邮箱、收发邮件的功能,图形化操作更加简单)

也可以换一个主机 但是需要注意放行防火墙  两个服务!

[root@mail ~]# yum -y install thunderbird

打开thunderbird 然后登陆用户,验证邮件收发

登陆后,在如下界面中编写邮件

可以向目前系统中任意存在的用户发邮件

此处向root用户发送了一个测试邮件,在系统的邮箱文件中查看,注意因为系统的配置,所有shell 不是/bin/bash 用户的邮件都会转发给root ,所以没必要使用root登录thunderbird,直接在文件中查看即可

登录bbb用户,用aaa 向 bbb@test.com 发送一个测试邮件,验证dovecot的邮件接收功能

然后重复aaa的操作即可

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值