邮件服务
电子邮件基础
电子邮件
- 快速、便捷、通用、异步的通信方式
- 1965年最早由MIT发明并开源 (最早用于同主机用户间通信)
- 1971年确定邮件地址以
@
符号连接(在不同主机间传递信息) - MIME (Multipurpose Internet Mail Extensions 多用途互联网邮件扩展类型) 类型扩展邮件以纯文本到传递文件(文档、图片、媒体)
- 邮件可被伪造
传统物理邮件和电子邮件比较
传统物理邮件
- 写信 —-> 到本地邮局 —-> 目的邮局 —-> 收件人
电子邮件
- client1 —-> server1 ——> server2 ——client2 ,邮件地址通过DNS解析完成邮件路由
- 无收件人返回报错(不通知),连不上目标服务器周期重发,直至失败
邮件协议
SMTP
- Simple Mail Transfer Protocol
- MTA(Mail transfer agents)之间通信协议(SMTPD)
- 由很多个小程序组合实现MTA所以功能
- Sendmail、Postfix、Exim、Qmail 等MTA软件包
- 客户端发邮件MUA ——> MTA 也是用SMTP协议
邮件客户端
Sendmail (功能强大)
- 处理着绝大多数互联网电子邮件
- 开源免费版 / 商业版(GUI界面)
- 配置过于复杂 (默认配置已经可以良好工作)
- 功能全面但性能不占优势
Postfix
- 来自于IBM的开源MTA(Ubuntu默认首选的MTA)
- 速度优于 Sendmail , 配置管理更简单(配置文件、命令)
- 可以平滑替换Sendmail (模块化)
Qmail
- Postfix的可替代选择(模块化的MTA,用户、配置分离)
- 设计初衷是实现取代sendmail的更安全快速的MTA
- 从sendmail迁移到Qmail过程复杂
- 众多插件,包含web mail、POP服务
Exim
- 比Sendmail / Postfix 更安全快速,但配置方式不同
- 与Qmail都使用maildir格式邮箱储存
MBOX
- 传统的mbox格式邮箱储存 将所有邮件存于一个文件中,索引定位具体邮件
- 文件和索引损坏可能造成邮件丢失,故障恢复困难
- 不适宜存储与NSF 挂载在目录中
MAILDIR
- Maildir 格式包含三个子目录
/cur、/new、/tmp
,每个邮件分离独立保存 - 可并行访问,性能更高(mbox不支持并行访问)
- 可用NFS作为邮箱存储
MTA可直接投递和读取邮件
- 更多时候邮件投递由MDA完成 MDA就是邮件投递代理
电子邮件架构
基础
MDA(Mail Delivery Agent)
- MDA比 MTA额外实现自动过滤、回复、规则转存、杀毒等
Mailx
- MDA + MUA(Ubuntu的默认MDA)
- 来自MTA的邮件交给Mailx投递到用户邮箱 (/var/mail)
- 主目录下
.forward
文件实现自动转发
mail.local
- 常用于BSD的MDA程序
- 功能使用与Mailx类似
procmail
- 最流行的MDA之一
- Recipes允许用户自定义邮件处理脚本 (.procmailrc)
MUA(Mail User Agent)
- 读取和展示邮箱中的邮件(不进行邮件传递)
- 以什么角度区分MUA:在哪读取邮件 / 邮件显示格式(MIME)
Mailx(MUA + MDA)
- 服务器本地直接读取邮箱mail
Dovecot
- 远程客户端访问邮箱
- POP3 (Post Office Protocol version3 )
- 适合单一客户端,单项通信协议(MUA <—- MDA)
- IMAP4(Internet Message Access Protocol 4)
- 适合多邮件客户端,双向同步协议(MUA <—-> MDA)
其他邮箱访问方式
- web mail
- MAPI
- 微软专有邮件协议
Fetchmail
- 邮件服务器 <——-邮件服务器 (POP3 / IMAP)
- 适用于没有稳定互联网连接的小公司
邮件结构
- 信封: 用于邮件路由,对用户透明不可见
- 邮件头:邮件路由传输过程的记录日志
- 邮件体:邮件要传递的具体内容
SPAM
- 垃圾邮件,不请自来的邮件
- 处理浪费时间、网络带宽、存储空间
邮件规范
- 收件人为事件直接相关人
- 次要相关人按职位顺序
- 主题简洁清晰,高度概括
- 保证表达清楚的前提下邮件内容尽可能短(避免语法错误)
- 适当使用表情符
- 回复、转发完整邮件流(禁止写一封新的邮件作为回复)
- 压缩附件
- 附上个人签名
Postfix简单部署
安装配置DNS服务器
1 | sudo apt install bind9 |
配置:
1 | sudo vim /etc/bind/named.conf.options |
配置:
重启服务:
1 | sudo systemctl restart bind9 |
网络配置
配置成静态ip地址
1 | sudo vi /etc/netplan/*.yaml |
1 | # 重启网络 |
修改主机名
1 | sudo vi /etc/cloud/cloud.cfg |
1 | sudo vi /etc/hostname |
安装Postfix
1 | sudo apt install postfix |
只有mail组的成员可以发邮件
1 | sudo usermod -aG mail cwz |
发送邮件:
给zs用户发邮件,并抄送给cwzdzg@163.com
企业部署Postfix
组件:
- Postfix:MTA
- Dovecot:POP / IMAP服务
- SASL:身份认证
- Postfixadmin:管理邮件、虚拟域、别名等web应用
- LNMP:postfixadmin的依赖
Postfix的两种域
- Local Domain:为本系统账号投递邮件(/etc/password)
- Virtual Domain:为非本账号系统投递邮件
首先是安装DNS服务器
安装LNMP依赖:
1 | sudo apt install nginx |
验证是否正常工作
1 | sudo vi /etc/nginx/sites-available/default |
重启服务:
1 | systemctl restart nginx.service |
安装Postfixadmin
1 | # 手动下载源码、解压、安装、配置 |
配置数据库
1 | mysql -uroot -p |
postfixadmin数据库连接文件
1 | cd /opt/postfixadmin/ && cp config.inc.php config.local.php |
创建临时目录
1 | mkdir /opt/postfixadmin/templates_c && chmod 755 -R /opt/postfixadmin/templates_c |
WEB安装阶段
- 浏览器地址栏输入 http://mail.qq.com/pfa/setup.php
- 生成
setup password
并添加到 config配置文件中
1 | $CONF['setup_password'] = 'c777a686bbbf8e923e2de9d4c9578e98:77e8853a57fbea31f4bc5365e5bbfb1823650e6a'; |
- 创建管理员账号
- 登录管理员界面
创建虚拟域、创建邮件
安装邮件功能
集成Postfix
1 | sudo apt install postfix postfix-mysql sasl2-bin |
配置sasl自动启动
1 | sudo vi /etc/default/saslauthd |
邮箱目录、访问账号、组
1 | groupadd -g 5000 vmail && mkdir -p /var/mail/vmail |
数据库配置文件1(共创建3个配置文件)
1 | mkdir -p /etc/postfix/sql |
配置加入主配置文件/etc/postfix/main.cf
1 | postconf -e virtual_mailbox_domains=mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf |
数据库配置文件2
1 | vi /etc/postfix/sql/mysql_virtual_mailbox_maps.cf |
配置加入/etc/postfix/main.cf
1 | postconf -e virtual_mailbox_maps=mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf |
数据库配置文件3
1 | vi /etc/postfix/sql/mysql_virtual_alias_maps.cf |
配置加入/etc/postfix/main.cf
1 | postconf -e virtual_alias_maps=mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf |
权限
1 | chgrp postfix /etc/postfix/sql/mysql_*.cf |
启用SASL强制Postfix发邮件使用Dovecot进行身份验证
1 | vi /etc/postfix/main.cf |
启用安全SMTP端口
1 | vi /etc/postfix/master.cf |
添加一条配置
1 | -o smtpd_client_restrictions=permit_sasl_authenticated.reject |
添加一条配置
1 | -o smtpd_client_restrictions=permit_sasl_authenticated.reject |
验证配置
1 | postconf -n |
重启服务
1 | systemctl restart postfix |
安装Dovecot(IMAP、POP3)
1 | sudo apt install dovecot-imapd dovecot-mysql dovecot-managesieved dovecot-pop3d |
配置Dovecot(多配置文件)
1 | cd /etc/dovecot/conf.d && vim 10-auth.conf # 系统账号/SQL账号 |
配置SQL账号
1 | vi auth-sql.conf.ext |
连接数据库
1 | vi /etc/dovecot/dovecot-sql.conf.ext |
指定邮箱存储位置
1 | vi 10-mail.conf |
配置服务器连接
1 | vi 10-master.conf |
配置sieve
1 | vi 15-lda.conf |
重启服务
1 | systemctl restart dovecot |
查看日志
1 | tail -n 20 -f /var/log/mail.log |
集成Postfix / Dovecot
1 | vi /etc/postfix/master.cf |
重启服务
1 | systemctl restart postfix |
测试
- postfixadmin 发送邮件
apt install mailutils
echo "Hello Alain" | mail -s "test mail" tom@qq.com
查看结果
1 | tail -n 20 -f /var/log/mail.log |
增加其他虚拟域、邮箱
1 | echo "Hello ZS, it's tom" | mail -s "Subject" -aFrom:tom\<tom@qq.com\>zs@taobao.com |
WEB MAIL
web mail安装
- 各大邮件服务商全部提供webmail
- 基于浏览器的统一使用体验,无需配置客户端
- Roundcube 非常流行且稳定的 web mail应用
- 安装依赖包
apt install php7.2-intl php-imagick php7.2-ldap
下载rounducbe
1 | cd /var/www/html |
创建数据库
1 | create database roundcubedb; |
导入数据
1 | mysql -u roundcube -p roundcubedb < SQL/mysql.initial.sql |
配置站点文件
检查配置
1 | nginx -t |
重启服务
1 | systemctl restart nginx |
权限
1 | chown -R www-data:www-data /var/www/html/webmail/ |
web安装阶段
删除installer目录
登录web mail
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 伊甸园!