一、分类
系统安全:
防火墙 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记录:
- mx 记录 说明 test.com 对应的邮件服务器地址
- 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的操作即可