时间:2023.08.08
环境:Stream 9 iRedmail 1.6.3 支持及推荐的系统请查看官网
目的:iRedmail安装及配置
说明:本文详细介绍了开源邮箱服务iRedmail的安装及常规配置 对于更详细的配置和说明请查阅官网 推荐使用官方发布的最新正式版本
作者:Zhong
前提条件
根据官方文档说明 要在RHEL或CentOS Linux上安装iRedMail,您需要:
- 一个全新的,工作RHEL或CentOS系统。下载页面上列出了支持的版本。
- 启用了垃圾邮件/病毒扫描的低流量生产邮件服务器至少需要4 GB内存。
- 确保3个UID/GID没有被其他用户/组使用:2000、2001、2002。
准备工作
在域名服务商购买域名 准备一台云服务器/物理机(推荐纯净系统 不要安装有nginx、postgres等软件以免造成干扰)
域名:假设为 zhong.com 邮箱域名指定为mail.zhong.com
使用具有管理员权限的账户操作 本文使用root
服务器配置
系统更新
更新软件
yum update -y
# or
yum upgrade -y
修改主机名
查看主机名
hostname -f
设置主机名 前缀可按照自己要求指定
hostnamectl set-hostname mail.zhong.com
也可以编辑配置文件修改 推荐
vim /etc/hostname
# 修改为如下内容
mail
修改hosts文件 在127.0.0.1 后面增加 mail.zhong.com mail 配置 注意:要将 FQDN 主机名列在第一个。意思是127.0.0.1后面紧跟FQDN主机名
vim /etc/hosts
# 修改为如下
127.0.0.1 mail.zhong.com mail localhost localhost.localdomain
可以重启系统来检查是否已更改主机名称 运行hostname 显示mail 运行hostname -f 显示mail.zhong.com说明配置正确
禁用 SELinux
iRedMail 不支持 SELinux,所以需要在 /etc/selinux/config 文件里禁用它。 不同系统方式略有差异
vim /etc/selinux/config
# 修改SELINUX为如下
SELINUX=disabled
如果不希望禁用 SELinux,可以设置为让它打印警告信息但不强制限制
SELINUX=permissive
也可以无须重启服务就禁用它
setenforce 0
安装
下载安装包
在官网页面或github下载最新版iRedmail 本文使用iRedmail1.6.3版本
可下载到本地再上传到服务器 也可以使用命令直接下载到服务器
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.3.tar.gz
解压文件
tar zxf iRedMail-1.6.3.tar.gz
运行 iRedMail 安装程序
cd iRedMail-1.6.3/
bash iRedMail.sh
note: 如果是在 CentOS 8 系统上安装,iRedMail 安装程序会使用 pip2 命令安装几个 Python-2 的模块,国内用户请指定镜像站点完成安装,否则可能会因网络问题 导致安装失败 执行如下
sudo PIP_MIRROR_SITE='http://pypi.douban.com/simple/' PIP_TRUSTED_HOST=pypi.douban.com bash iRedMail.sh
等待依赖下载完成 根据提示输入Yes进入安装程序
默认邮件存储路径
Next 执行下一步
web server
选择Nginx Next 进入下一步
账户存储后端
根据实际需求选择 本文这儿选PostgreSQL Next进入下一步
数据库管理密码
输入密码
first mail domain name
iRedmail支持多域名 这儿输入第一个域名 zhong.com Next进入下一步
mail domain administrtor password
设置管理密码 Next进入下一步
可选组件
全选上即可
主要配置一览表
确认输入 y
安装完成后
安装完成后你必须知道的几个重要事项
- 邮件服务器最薄弱的环节是用户的弱密码,所以请一定强制你的用户使用强度高的密码。
- 阅读
/root/iRedMail-x.y.z/iRedMail.tips 文件,它包含了:
-
- 各个 web 程序的访问地址(URL),用户名和密码。
- 各个组件的配置文件路径。除此之外还应该阅读文档:Locations of configuration and log files of major components.
- 以及其它一些重要和敏感信息
- 设置 DNS 记录
- 如何配置邮件客户端程序
- 强烈建议获取 SSL 证书以避免每次访问 web 程序时烦人的自签名 SSL 证书警告, Let's Encrypt 提供免费的 SSL 证书。可根据该文档 配置获取的证书:use a SSL certificate.
- 如果需要批量添加邮件账号,可以参考以下针对不同数据库的批量建账号的文档: OpenLDAP, MySQL/MariaDB/PostgreSQL。
- 如果这是一台繁忙的服务器,这里有一些提升性能的建议。
安装完重启
配置
证书
测试验证 多个域名使用,分开
apt install certbot
certbot certonly --webroot --dry-run -w /var/www/html -d mail.zhong.com
根据提示输入邮箱如 postmaster@zhongsdjn.com A yes no
如果验证无问题 那么执行下面的命令 进行真正的证书申请 可使用--cert-name指定名称
certbot certonly --webroot -w /var/www/html -d mail.zhong.com # --cert-name zhong.com.cert
根据提示最好做好备份
修改文件权限
chmod 0755 /etc/letsencrypt/{live,archive}
Use Let's Encrypt cert
Create symbol links 替换对应的域名 注意不同系统平台的差异 根据系统选择
# On Debian/Ubuntu, FreeBSD and OpenBSD
mv /etc/ssl/certs/iRedMail.crt{,.bak} # Backup. Rename iRedMail.crt to iRedMail.crt.bak
mv /etc/ssl/private/iRedMail.key{,.bak} # Backup. Rename iRedMail.key to iRedMail.key.bak
ln -s /etc/letsencrypt/live/mail.zhong.com/fullchain.pem /etc/ssl/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.zhong.com/privkey.pem /etc/ssl/private/iRedMail.key
# On RHEL/CentOS
mv /etc/pki/tls/certs/iRedMail.crt{,.bak} # Backup. Rename iRedMail.crt to iRedMail.crt.bak
mv /etc/pki/tls/private/iRedMail.key{,.bak} # Backup. Rename iRedMail.key to iRedMail.key.bak
ln -s /etc/letsencrypt/live/mail.zhong.com/fullchain.pem /etc/pki/tls/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.zhong.com/privkey.pem /etc/pki/tls/private/iRedMail.key
Restart services
/usr/sbin/service postfix restart
/usr/sbin/service nginx restart
/usr/sbin/service dovecot restart
Depends on the backend you chose during iRedMail installation, you may need to restart
# MySQL or MariaDB
# PostgreSQL
systemctl restart postgresql.service
# OpenLDAP
验证证书
查看证书相关信息
certbot certificates
在网页打开邮箱域名地址 查看是否有提示网站连接不安全 如果配置无误 那么查看会提示连接是安全的之类的信息
自动更新证书
证书有效期大概3个月 可执行 certbot renew 重新生成证书 重启iRedmail服务以生效新的证书
可使用系统定时任务自动更新证书和重启服务 任务在每月的1号的5:01 AM执行 替换对应的域名
crontab -e
# 底部添加如下内容 替换对应你的域名即可
1 5 1 * * certbot renew --post-hook 'ln -sf /etc/letsencrypt/live/mail.zhong.com/privkey.pem /etc/pki/tls/private/iRedMail.key; /usr/sbin/service postfix restart; /usr/sbin/service nginx restart;
/usr/sbin/service dovecot restart'
tips:
- 请替换 /etc/letsencrypt/live/<domain>/privkey.pem 中 <domain> 为实际的域名
- /etc/pki/tls/private/iRedMail.key
CentOS/Rocky系统平台
IRedmail版本对应的就是 /etc/pki/tls/private/iRedMail.key
如果是部署的 iRedMail Easy platform 邮件系统 则替换为 /opt/iredmail/ssl/key.pem
Debian/Ubuntu/FreeBSD/OpenBSD系统平台
则替换为 /etc/ssl/private/iRedMail.key
如果是部署的 iRedMail Easy platform 邮件系统 则替换为/opt/iredmail/ssl/key.pem
note
如果邮箱网页使用的不是默认的 80/443 端口 或者此端口防火墙未放开 或者网络服务商此端口未放开 那么使用certbot可能获取不到或更新不了证书
禁用 iRedMail 灰名单
1、/opt/iredapd/settings.py
找到以下内容 将其中的 ”greylisting ” 这项删去即可
plugins = ["reject_null_sender", "wblist_rdns", "reject_sender_login_mismatch", "greylisting", "throttle", "amavisd_wblist", "sql_alias_access_policy"]
2、To disable greylisting global, please run command below
python3 /opt/iredapd/tools/greylisting_admin.py --disable --from '@.'
重启服务
service iredapd restart
防火墙放开端口
查看防火墙状态
// ubuntu20
ufw status
// centos
systemctl status firewalld
# or
firewall-cmd --state
各端口及作用如下
- 80: HTTP
- 443: HTTPS
- 25: SMTP
- 465: SMTPS (SMTP over SSL)
- 587: SUBMISSION (SMTP over TLS)
- 143: IMAP over TLS
- 993: IMAP over SSL
- 110: POP3 over TLS
- 995: POP3 over SSL
- 4190: Managesieve service
根据需求放开响应端口 如不清楚可放开以上所有端口
物理机通过防火墙放开端口 如有交换机等前置安全设备需一同放开
云服务器通过安全策略放开端口 25 端口很多需要提交工单由服务商来放开 具体请咨询服务商
设置 DNS 记录/其它可选配置
域名解析 Setup DNS records for your iRedMail server (A, PTR, MX, SPF, DKIM, DMARC etc.)
A
记录将FQDN (fully qualified domain name)映射到IP地址。这通常是任何DNS系统中最常用的记录类型。如果您想要将域名指向web服务器,则应该添加此DNS记录。
demo:
| A | 默认 | your ip | 10 分钟 | 正常 | 备注 | 修改暂停删除备注生效检测 |
MX
邮件交换记录或更常见的MX记录是您域的DNS服务器中的一个条目,它告诉其他邮件服务器您的邮件服务器位于何处。当有人从internet向存在于您的邮件服务器上的用户发送电子邮件时,MX提供发送该电子邮件的位置或IP地址。MX记录是您通过DNS提供给外部世界的邮件服务器的位置。
大多数邮件服务器通常有多条MX记录,这意味着您可以设置多个邮件服务器来接收电子邮件。每条MX记录都有一个优先级号
demo:
@ | MX | 默认 | mail.zhong.com | 10 | 10 分钟 | 正常 | 修改暂停删除备注生效检测 |
PTR
什么是PTR
PTR记录,或者更确切地说是反向PTR记录,是将IP地址解析为与其相关联的主机名的过程。
为什么你需要一个反向PTR记录
如果您的域名没有适当的反向PTR记录设置,那么电子邮件垃圾过滤软件可能会阻止来自您的邮件服务器的电子邮件。
如何设置反向PTR记录
您很可能需要联系您的ISP并请求为您的邮件服务器IP地址创建反向PTR记录。例如,如果您的邮件服务器主机名是mail.mydomain.com,那么请您的ISP在其反向DNS区域中设置反向PTR记录192.168.1.5(您的互联网公共IP地址)。反向DNS区域由您的ISP处理,即使您可能有自己管理的正向查找DNS区域。
SPF
SPF是一种打击垃圾邮件和网络钓鱼的方法,它使用DNS SPF记录来定义允许哪些主机为一个域发送电子邮件。有关SPF的详细信息,请查看维基百科。
这是通过为电子邮件域名定义DNS spf记录来实现的,该记录指定允许哪些主机(电子邮件服务器)从该域名发送电子邮件。
其他电子邮件服务器在收到来自此域名的电子邮件时可以查找此记录,以验证发送电子邮件服务器是否从允许的IP地址连接。
demo:
@ | TXT | 默认 | v=spf1 mx ip4:your ip -all | 10 分钟 | 正常 | 修改暂停删除备注生效检测 |
DKIM
查看keys
// Ubuntu
amavisd showkeys
// or
amavisd-new showkeys
// Stream On CentOS, if it complains /etc/amavisd.conf not found, please run the command with path to its config file. For example:
amavisd -c /etc/amavisd/amavisd.conf showkeys
Copy output of command above into one line like below, remove all quotes, but keep ;. we just need strings inside the () block, it's the value of DKIM DNS record. like this(翻译:复制输出的内容到一行显示 去除所有的引号 不要去除‘;’号 只要()里面的内容)
v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxPy9viPs2PdWFfqg7aWuX/lI1dJ6t7DOEu7ygilsBefKFAewjlP3bC5W3v87zNeMZ7H3u1MvBaKeZhNlHz/C
rqXhsMz34eKUqrcvEoHNnq22z2U5M2NZr1r9OgA6YGmQjeXshU1cxAfUOTHmsNzj0F9Us7J5Y8GPwnGmOXs650UNjb8vobYMLVRIjzK0IBB85r2GStCEoKUilTnwVDBdivfv9oqCWpyQe7iUON/0DCWjHo0ITAHoaFuwSf85Q4zYxXrIuW35nqXiiOAR8hX6+zD2U+Oj7/SByYgxtQWc3xnYhLLVZkeRW3jFPFd4FdEA3IY1Ypnp2nAkKcrlVnQrMwIDAQAB
按照以下格式和类型设置 demo:
dkim._domainkey | TXT | 默认 | v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugBy... | 10 分钟 | 正常 | 修改暂停删除备注生效检测 |
验证
dig如果未安装 使用下面的方式安装
yum install bind-utils
_domainkey.mydomain.com替换为对应的实际值
dig -t txt dkim._domainkey.zhong.com
// or
nslookup -type=txt dkim._domainkey.zhong.com
Amavisd验证
amavisd testkeys
// or
amavisd-new testkeys
// 如果centos系统提示/etc/amavisd.conf not found 请指定配置文件所在的路径如下面这样
amavisd -c /etc/amavisd/amavisd.conf testkeys
输出
TESTING#1 zhong.com: dkim._domainkey.zhong.com => pass
如果显示 pass 那么它已生效
DMARC
什么是DMARC,它如何打击网络钓鱼?
DMARC是一种方法,可以使电子邮件发送者和接收者更容易确定给定的消息是否合法地来自发送者,如果不是,该怎么做。这使得识别垃圾邮件和网络钓鱼邮件更容易,并使它们远离人们的收件箱。
DMARC是一个被提议的标准,它允许电子邮件发送者和接收者合作共享他们发送给对方的电子邮件的信息。此信息有助于发件人改进邮件身份验证基础结构,以便对其所有邮件进行身份验证。它还为互联网域名的合法所有者提供了一种方法,可以要求将非法信息(欺骗性垃圾邮件、网络钓鱼)直接放入垃圾邮件文件夹或直接拒绝。
如何设置DMARC记录
DMARC严重依赖SPF和DKIM记录,请确保您有正确和最新的SPF和DKIM记录。
DMARC记录是TXT类型的DNS记录。
一个简化的记录看起来像这样:
v=DMARC1; p=none; rua=mailto:postmaster@zhong.com
详细的样本记录如下所示:
v=DMARC1; p=reject; sp=none; adkim=s; aspf=s; rua=mailto:postmaster@zhong.com; ruf=mailto:postmaster@zhong.com
参数说明
- v=DMARC1标识DMARC协议版本,目前只有DMARC1可用,并且v=DMARC1必须首先出现在DMARC记录中。
-
adkim指定DKIM的对齐模式。有两种选择:
r
: 放宽模式 (adkim=r
)s
: 严格模式 (adkim=s
)
aspf
指定SPF的对齐方式。有两种选择:
r
: 放宽模式 (aspf=r
)s
: 严格模式 (aspf=s
)
- P指定组织域的策略。它告诉接收服务器如果收到的电子邮件没有通过DMARC机制检查该怎么做。有3种选择:
none
(p=none
): 域所有者不要求对消息的传递采取任何具体的操作。quarantine
(p=quarantine
): 域所有者希望邮件接收者将未通过DMARC机制检查的电子邮件视为可疑邮件。根据邮件接收器的功能,这可能意味着“放入垃圾邮件文件夹”,“标记为可疑”,或“将电子邮件隔离在某个地方”,也许更多。reject
(p=reject
): 域所有者希望邮件接收者在SMTP事务期间拒绝未通过DMARC机制检查的电子邮件。
小贴士:
- 如果您确定所有的电子邮件都是由SPF记录中列出的服务器发送的,或者签名了正确的DKIM签名,强烈建议使用p=reject。
- 根据RFC 7489,“v”和“p”标签必须存在,并且必须以该顺序出现。所以请总是把“p”标签紧跟着“v”标签。例如v = DMARC1;p =拒绝;毛孔= s;... 是可以的,但不是v=DMARC1;毛孔= s;p =拒绝;….
-
sp
为所有子域指定策略。这是可选的。可用选项与p相同。 rua
指定传递聚合反馈的传输机制。目前只支持mailto:。这是可选的。邮箱请填写可接收邮件的正常邮箱ruf
指定要报告特定于消息的故障信息的传输机制。目前只支持mailto:。这是可选的。邮箱请填写可接收邮件的正常邮箱
新建完成后如下所示(根据需要填写参数即可)
_dmarc | TXT | 默认 | v=DMARC1; p=none; rua=mailto:postmaster@zhong.com | 10 分钟 | 启用 |
在谷歌Postmaster Tools中注册您的邮件域
这个步骤是可选的,但是强烈推荐。
谷歌Postmaster Tools网站:https://postmaster.google.com,以及Postmaster Tools FAQs。
这很简单:只要在那里注册你的邮件域名,他们就会给你的DNS提供一个文本记录,这样他们就可以验证域名的所有权。
为什么要使用谷歌Postmaster Tools?引用自谷歌邮政管理员工具帮助页面:
如果您向Gmail用户发送了大量电子邮件,您可以使用邮政管理员工具查看:
- 如果用户将你的邮件标记为垃圾邮件
- 你是否遵循bgmail的最佳实践
- 为什么你的邮件可能无法送达
- 你的邮件发送是否安全
它也可以帮助你摆脱垃圾邮箱。
如果您在向Gmail(或谷歌Apps)发送电子邮件时遇到麻烦,谷歌提供了一些最佳实践信息,以确保他们的邮件被发送到Gmail用户:批量发送者指南。
打开https://postmaster.google.com网站 登录后会提示或点击右下角的 “+” 号添加一条记录 输入你的完整域名如 mail.zhong.com 然后点 NEXT
此时将展示的TXT record复制
在你的域名解析添加一条txt记录如下图所示
保存之后在Postmaster Tools刚才的第二步点VERIFY进行验证即可 一般会即刻生效 或者稍等片刻再进行验证也行 验证成功后 主页面Status栏将显示Verified
查看 Outlook.com Postmaster site
Outlook Postmaster网站为邮件服务器管理员提供了一些有用的信息,如果您发送到Outlook.com的电子邮件被标记为垃圾邮件,请查看:
参考
修改邮件附件大小
默认附件限制为10MB
要修改邮件附件大小,需要修改三个地方。
客户端如Outlook/thunderbird
修改 postfix 中邮件大小的设置 100MB = 100 * 1024 * 1024 由于编码原因 实际设置值可大于此值如120MB = 125829120
postconf -e message_size_limit='104857600'
postconf -e mailbox_size_limit='104857600'
重启 Postfix 服务,使上述修改生效
/etc/init.d/postfix restart
// or
service postfix restart
Roundcube 网页邮箱的附件上传大小
如果使用 Roundcube 网页邮箱,需要额外更改两个地方
- 修改 PHP 设置允许上传大附件
修改 PHP 配置文件 /etc/php.ini 中的 memory_limit, upload_max_filesize 和 post_max_size 三个参数
memory_limit = 200M;
upload_max_filesize = 100M;
post_max_size = 100M;
重启nginx
systemctl restart nginx.service
修改 Roundcube 网页邮箱设置以允许上传大附件
修改 roundcube 目录下的 .htaccess 文件:
在 RHEL/CentOS 系统上,此文件路径为 /var/www/roundcubemail/.htaccess
在 Debian/Ubuntu 系统上,此文件路径为 /usr/share/apache2/roundcubemail/.htaccess 或者 /opt/www/roundcubemail/.htaccess.
在 FreeBSD 系统上,此文件路径为 /usr/local/www/roundcubemail/.htaccess
在 OpenBSD 系统上,此文件路径为 /var/www/roundcubemail/.htaccess
注意:某些 Linux/BSD 发行版本可能没有 .htaccess 文件,此时你可以忽略此步骤。
此处使用的CentOS-Stream-9-20230501.0-x86_64-dvd1镜像 修改/opt/www/roundcubemail/.htaccess文件即可
php_value memory_limit 200M
php_value upload_max_filesize 100M
php_value post_max_size 100M
测试之后上面的配置如果不是可行的方案 请按如下进行配置可生效
sudo vim /opt/www/roundcubemail-1.5.3/config/config.inc.php
// 修改为下面
$config['max_message_size'] = '150M';
重启 Apache(Apache was dropped since iRedMail-0.9.8) 或 php-fpm 服务以使上述修改生效
service php-fpm restart
// ubuntu20 php7.4-fpm
systemctl restart php7.4-fpm
客户端应用配置
首先简单说明下IMAP/POP3/SMTP协议的区别
SMTP、IMAP和POP3是三种不同的电子邮件传输和接收协议。它们的主要区别在于邮件的传输方式和功能。
- SMTP(Simple Mail Transfer Protocol):SMTP是一种基于文本的电子邮件传输协议,用于将电子邮件从发件人发送到收件人。它使用TCP协议在端口25上运行,主要负责传递电子邮件,但不提供邮件读取功能。
- IMAP(Internet Message Access Protocol):IMAP是一种双向通信协议,提供邮件访问、管理和发送功能。它允许用户从多个设备上访问新邮件,并提供了摘要浏览功能,允许用户在阅读邮件前浏览到达时间、主题、发件人、大小等信息。IMAP还支持在服务器上保留邮件,同时在客户端上的操作都会反馈到服务器上,保证了邮件状态的一致性。
- POP3(Post Office Protocol version 3):POP3是一种单向通信协议,用于从邮件服务器上接收电子邮件。它允许用户从客户端下载未阅读的邮件,但不会在服务器上保留已下载的邮件。POP3没有提供类似IMAP的摘要浏览功能,用户需要下载整个邮件才能查看邮件内容。此外,POP3在客户端的操作不会反馈到服务器上。
在客户端配置时可参考如下配置:
POP3 服务: STARTTLS (推荐) 对应 端口 110, 或者 SSL 对应 端口 995.
IMAP 服务: STARTTLS (推荐) 对应 端口 143, 或者 SSL 对应 端口 993.
SMTP 服务: STARTTLS(推荐) 对应 端口 587.
tips:
使用 POP3 协议时在一些客户端如 网易邮箱大师 不会显示 垃圾邮件 这个目录
使用 IMAP 协议则支持显示
在安装完成后会向管理员邮箱发送邮件 其中一封会提到客户端端口的配置
网易邮箱大师配置
打开邮箱大师 点 左上角头像 选择 邮箱管理
找到 邮箱设置 点 添加邮箱 此时出现登录框
写入你的邮箱账号 此时因为是自建邮箱系统 出现 服务器设置 提示 点进去
选择IMAP协议 发信/收信服务器填入你的邮箱域名 mail.zhong.com
也可以使用POP3(IMAP/SMTP选择其中一个即可) 协议 发信/收信服务器 mail.zhong.com
修改web网页默认端口号
在某些情况下 如网络服务商未放开80/443端口 端口被其它程序占用等情况下 可以尝试修改nginx监听端口
修改80端口
编辑 /etc/nginx/sites-enabled/00-default.conf 文件 将其中的 80 端口 改成其它端口如 8080
修改443端口
编辑 /etc/nginx/sites-enabled/00-default-ssl.conf 文件 将其中的 443 端口 改成其它端口如 449
以上修改 80/443 端口配置文件后需要重启nginx服务生效 此修改操作会影响certbot申请/更新证书
访问 webmail 和其它 web 程序
安装完成后,可以通过以下 URL 访问相关程序。注意:请将 your_server 替换为实际的服务器地址。
- Roundcube webmail: https://your_server/mail/ 可登录邮箱
- SOGo Groupware: https://your_server/SOGo
- Web 管理后台: httpS://your_server/iredadmin/ 可管理邮箱系统(管理用户/域名等)
- Awstats: httpS://your_server/awstats/awstats.pl?config=web (or
?config=smtp for SMTP log)
服务管理
重启服务
// php-fpm服务 PHP-FPM(PHP FastCGI Process Manager)是一个用于管理 PHP FastCGI 进程的程序。
systemctl restart php8.1-fpm.service
// Postfix服务 开源邮件传输代理/处理电子邮件的路由、投递和传输。
systemctl restart postfix
// nginx服务
systemctl restart nginx
// dovecot服务 邮件接收和投递/邮件存储/用户认证和安全/邮件过滤和归档
systemctl restart dovecot.service
// iredapd
service iredapd restart
// netdata
systemctl restart netdata
// 防火墙
ufw reload // Ubuntu22
systemctl status firewalld.service // Stream9
fail2ban服务
// 关闭服务
systemctl stop fail2ban
// 查看状态
systemctl status fail2ban
Fail2Ban是一个用于保护计算机系统免受恶意攻击的开源软件。它通过监视系统的日志文件,查找具有恶意行为的IP地址,并自动配置防火墙规则来禁止它们的访问。
Fail2Ban的工作原理如下:
- 监视日志文件:Fail2Ban会监视系统的日志文件,例如登录文件(如/var/log/auth.log)和Web服务器日志(如/var/log/apache/access.log)等,以查找异常活动。
- 检测恶意行为:Fail2Ban会搜索日志文件以查找配置的恶意行为模式,例如多次登录失败、尝试访问不存在的URL等等。
- 封禁IP地址:一旦Fail2Ban检测到恶意行为,它会自动将相关IP地址添加到系统的防火墙规则中,从而禁止该IP地址的访问。
- 解封IP地址:Fail2Ban还具有自动解封功能,可以在一定时间后自动解禁被封禁的IP地址,以防止误封合法用户。
通过使用Fail2Ban,系统管理员可以减少恶意攻击的风险,提高系统的安全性。它可以防止暴力破解密码、DDoS攻击、恶意爬虫等类型的攻击。但请注意,Fail2Ban只是一种辅助工具,不能完全保证系统的安全,因此仍然需要其他安全措施的配合,如使用强密码、定期更新系统补丁等。
检测工具
邮箱配置完成后 可使用工具检查邮箱配置是否正确 或者ip/域名是否在黑名单等
Office 365 反垃圾邮件 IP 去除门户
IP AND DOMAIN REPUTATION CHECKER
测试你发出邮件的垃圾邮件匹配度
邮箱数据备份和恢复
备份数据
iRedmail指定了定时任务备份数据库数据
为了数据安全 参照官网备份和恢复数据的文档 我们可以备份数据到远程服务器(异地备份) 这样当iRedmail所在服务器发生异常或磁盘损坏等情况时 也能保证核心数据可恢复 可以通过rsync工具来实现 我们主要演示两种方式备份数据 主要备份数据库数据和邮件数据 其它数据如DKIM keys/SOGo/OpenLDAP backend可根据情况自行备份
假设IRedmail服务器的ip为 192.168.1.168
全量备份
服务器端启动rsync服务 客户端通过定时任务执行脚本去获取数据 数据每次都是全量备份 压缩 然后定时清理超过指定时间的数据
IRedmail服务器端配置
新建凭证文件如 screts.pas 本文为/etc/rsync/screts.pas 写入用户名和密码(作为客户端访问认证凭据 可随意)
vim /etc/rsync/screts.pas
# 写入以下内容
jh:000Axiba
ll查看screts.pas文件属性是否是-rw-------. 1 root root 如若不是使用chmod 600 screts.pas来修改属性
修改/etc/rsyncd.conf文件为如下类似内容(可根据需要变化)
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root
gid = root
use chroot = no
port 873
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
# transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
[vmail_backup]
path = /var/vmail/vmail1
#comment 为描述说明
comment = backup_mail_file
list=yes
read only=yes
ignore errors
#认证用户 和系统用户无关 作为rsync工具认证使用
auth users = jh
#密码文件
secrets file = /etc/rsync/screts.pas
[mail_accounts_backup]
path = /var/vmail/backup
comment = backup_accounts
list=yes
ignore errors
auth users = jh
secrets file = /etc/rsync/screts.pas
以上文件指定了两个备份文件路径 /var/vmail/vmail1和/var/vmail/backup 接下来启动服务
rsync --daemon --config=/etc/rsyncd.conf
备份服务器(客户端)配置
下面在用来备份的服务器上使用rsync(如果不存在那么安装即可)工具备份
在/root/email_backup目录下新建passwd文件 写入对应iRedmail服务器rsync服务的密码
vim /root/email_backup/passwd
# 写入下面的内容
000Axiba
ll查看passwd文件属性是否是-rw-------. 1 root root 如若不是使用chmod 600 passwd来修改属性
新建一个脚本文件如 /root/email_backup/mail_backup.sh 写入如下的内容
#!/bin/bash
WORKDIR_PATH="/root/email_backup"
# 定义日期前缀
DATE_PREFIX=$(date +%Y-%m-%d)
# 本地密钥文件信息
PASSWD_PATH="/root/email_backup/passwd"
# 远程服务器信息
REMOTE_USER="jh"
REMOTE_HOST="192.168.1.168"
VMAIL_REMOTE_DIRECTORY="vmail_backup"
MAIL_ACCOUNTS_REMOTE_DIRECTORY="mail_accounts_backup"
# 本地目标路径
VMAIL_DESTINATION_DIRECTORY="/root/email_backup/vmail"
MAIL_ACCOUNTS_DESTINATION_DIRECTORY="/root/email_backup/mail_accounts"
# 执行rsync备份到本地目录
rsync -avz --password-file=${PASSWD_PATH} ${REMOTE_USER}@${REMOTE_HOST}::${VMAIL_REMOTE_DIRECTORY} ${VMAIL_DESTINATION_DIRECTORY}
# 压缩备份文件并添加日期前缀
tar -czvf ${WORKDIR_PATH}/${DATE_PREFIX}_vmail.tar.gz ${VMAIL_DESTINATION_DIRECTORY}/*
# 移除原始备份文件(可选步骤,根据需求选择是否保留)
rm -rf ${VMAIL_DESTINATION_DIRECTORY}/*
rsync -avz --password-file=${PASSWD_PATH} ${REMOTE_USER}@${REMOTE_HOST}::${MAIL_ACCOUNTS_REMOTE_DIRECTORY} ${MAIL_ACCOUNTS_DESTINATION_DIRECTORY}
tar -czvf ${WORKDIR_PATH}/${DATE_PREFIX}_accounts.tar.gz ${MAIL_ACCOUNTS_DESTINATION_DIRECTORY}/*
rm -rf ${MAIL_ACCOUNTS_DESTINATION_DIRECTORY}/*
以上文件192.168.1.168为远程iRedmail服务器的ip 定义了按当前日期备份远程服务器的邮件文件和数据库文件 压缩后删除源文件
给文件赋予可执行权限 并执行一次
chmod +x /root/email_backup/mail_backup.sh
/root/email_backup/mail_backup.sh
此时在/root/email_backup/目录就能看到已备份的文件了
我们把它做成系统定时任务 每天定时执行 并删除超过12天的备份文件
crontab -e
# 写入以下的内容
00 06 * * * /root/email_backup/mail_backup.sh
36 22 * * * find /root/email_backup/ -mtime +12 -name "*tar.gz" -exec rm -rf {} \;
增量备份
rsync也可以实现增量备份 并且服务器端不必配置rsync 会根据服务器和本地客户端指定的目录比较区别 只更新服务器有变化的文件到本地
首先确定本地是否可以通过ssh远程登录到服务器root账户
ssh root@192.168.1.168
根据提示输入IRedmail服务器的root密码 如果失败可能是服务器没有配置root用户可直接登录权限
那么在服务器端配置
vim /etc/ssh/sshd_config
找到如下行
#PermitRootLogin prohibit-password
修改为
PermitRootLogin yes
重启服务
systemctl restart sshd
在客户端再次测试是否可ssh到服务器 能登录的话就可以使用rsync进行数据同步 如下执行一次同步 根据提示输入IRedmail服务器root账号的密码
rsync -avz root@192.168.1.168:/var/vmail/ /root/vmail/ # -avz 后面可以加--delete选项 如 -avz --delete
说明:
格式为
rsync -参数 remote_account@remote_host:/目录/ /本地目录/
注意前面是服务器 后面是本地备份的目录 切不可颠倒 以免丢失数据 并且路径后面的斜杠/要加上 否则复制的就是这整个目录而不是这个目录下的所有数据 可先建立一些演示数据自己摸索熟了再操作
参数说明:
-a
表示归档模式,它保持文件的所有属性。-v
表示详细模式,显示传输过程中的信息。-z
表示在传输过程中压缩数据。--delete
表示删除目标目录中源目录不存在的文件,这有助于保持目标目录与源目录的同步。--exclude=PATTERN
排除不需要备份的文件或目录- ... ...
以上执行一次同步 如果要通过定时任务每天执行 那么为避免输入密码 可以使用密钥认证
在客户端操作 生成SSH密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
将公钥复制到IRedmail服务器
ssh-copy-id root@192.168.1.168
输入IRedmail服务器root账号的密码即可 此时在服务器端应导入了相应的公钥
cat /root/.ssh/authorized_keys
服务器端可以重启服务来保证服务生效
systemctl restart sshd
客户端编写一个脚本文件如/root/mail_backup.sh 写入要执行的命令 保存
vim /root/mail_backup.sh
# 写入如下的命令
rsync -avz root@192.168.1.168:/var/vmail/ /root/vmail/
增加可执行权限
chmod +x /root/mail_backup.sh
在客户端写入cron定时计划
crontab -e
添加如下的一行 保存
00 06 * * * /root/mail_backup.sh
上面的定时任务将在每天06:00点执行
恢复数据
以下演示基于全量备份 增量备份一样简单不再赘述
假设在另一台以上面方式已安装好iRedmail(同版本/高版本可根据升级文档做修改即可)的服务器上恢复数据 此服务器作为备份环境 数据库本文依然以postgresSQL为例 其它数据库如MariaDB和OpenLDAP等操作语句略有不同
解压备份的文件 如2023-08-08_accounts.tar.gz和2023-08-08_vmail.tar.gz
tar zxvf 2023-08-08_accounts.tar.gz
tar zxvf 2023-08-08_vmail.tar.gz
进入解压后的文件找到mail_accounts/pgsql目录 在里面选择一个需要恢复的数据 一般是最后一次的备份文件 如2023/08/08
使用bunzip2逐个对*.sql.bz2文件解压 得到sql文件
bunzip2 amavisd-2023-08-08-03-01-01.sql.bz2
bunzip2 ... ...
... ...
导入备份的sql数据 note: 导入前可以先删除vmail备份文件里的postmaster数据 也可以导入后删除记录 不然表里会有两条postmaster记录
psql -U postgres -h localhost -d amavisd -f amavisd-2023-08-08-03-01-01.sql -W
psql -U postgres -h localhost -d iredadmin -f iredadmin-2023-08-08-03-01-01.sql -W
psql -U postgres -h localhost -d iredapd -f iredapd-2023-08-08-03-01-01.sql -W
psql -U postgres -h localhost -d roundcubemail -f roundcubemail-2023-08-08-03-01-01.sql -W
psql -U postgres -h localhost -d vmail -f vmail-2023-08-08-03-01-01.sql -W
根据提示输入安装时设置的数据库密码即可导入数据
删除重复的postmaster记录 这儿要删除导入的那条 通过以下指令可以找到
cat vmail-2023-08-08-03-01-01.sql |grep postmaster
这是postmaster用户的加密密码
登录postgresSQl删除这条记录
# 根据提示输入密码登录
psql -U postgres -h localhost -W
# 切换到vmail数据库
\c vmail
# 删除目标记录
DELETE FROM mailbox WHERE password = '{SSHA512}zHDQTwj ... ... 上面查询到的值 JpmnHhlyo=';
进入解压后的文件找到email_backup/vmail目录 将里面的目录文件移动到/var/vmail/vmail1目录下替换同名文件即可
mv /var/vmail/vmail1/zhong.com /var/vmail/vmail1/start_zhong.com
mv /root/email_backup/root/email_backup/vmail/zhong.com/ /var/vmail/vmail1/
完成核心数据的恢复 其它配置如DKIM keys/SOGo/OpenLDAP backend的备份和恢复可按需求自行操作
为确保配置生效 可重启服务验证
FAQ(常见问题)
无法通过域名和公网IP访问
使用其它客户端可以访问 一般发生在管理员添加域名之后 原因可能是fail2ban误认为此操作攻击行为 一段时间后恢复正常访问
可关闭fail2ban服务即可解决问题
SMTP 错误:消息长度超过服务器能接受的长度 (100 MB)
方法:修改 postfix 中邮件大小的设置
Undelivered Mail Returned to Sender
This is the mail system at host mx.example.com.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
1175757741@qq.com>: message size 134353621 exceeds size limit 73400320 of
server mx3.qq.com[183.47.111.94] ... ...
方法:这是超出了对方邮件服务器可接收邮件大小的限制 如QQ邮箱限制附件大概为
50MB 可使用链接方式发送
无法发送有附件的邮件
如qq邮箱无法收到 本地邮箱提示邮件隔离了 不要发送敏感附件如exe文件 bat文件等
code:27 ,domain: SMTP detail:235 2.7.0 Authentication successful, userInfo:
此提示可能发生在携带附件的邮件 发送不成功 可能的原因应该是超出了服务器设定的附件大小 以下为参考信息
- code:27:这是SMTP响应代码的一部分,通常表示一个错误或状态信息
- 2.7.0:这是SMTP响应代码的详细部分,进一步描述了错误或状态。根据RFC 5321,2.7.0表示"不能执行命令,邮件传输服务器不可达"。
- Authentication successful:这表示SMTP服务器已成功验证了发送者的凭据,允许他们发送邮件。
- userInfo:这通常指的是发送者的用户信息,但在这里它后面跟着一个冒号,可能意味着后面应该有更多的信息,但信息被截断了。
方案
检查服务器对邮件附件大小限制的设置 如果是附件超出了范围 可以修改附件限制的设置 也可以使用其它方式发送附件
此网站无法提供安全连接
协议不受支持
客户端和服务器不支持一般 SSL 协议版本或加密套件。
开启所有需要的端口即可如443端口
Undelivered Mail Returned to Sender
554 Reject by behaviour spam at Rcpt State(Connection IP
address:116.232.54.23)ANTISPAM_BAT[01201311R156a, ay29a033002195087]: spf
check failedCONTINUE (in reply to RCPT TO command)
将上面提示的ip地址 116.232.54.23 一同加入到SPF之中如
@ | TXT | 默认 | v=spf1 mx ip4:222.66.141.90 ip4:116.232.54.23 -all | 10 分钟 | 正常 | 修改暂停删除备注生效检测 |
能发不能收
查看25端口是否开启
监听到一直在发邮件
查看发送队列 可能是某个账号被黑了
postqueue -p
Error: Error while checking new version of iRedAdmin: UniqueViolation('错误: 重复键违反唯一约束"updatelog_pkey"\nDETAIL: 键值"(date)=(2023-07-21)" 已经存在\n')
?
550 5.7.606-649 访问被拒绝(550 5.7.1)
host apc.olc.protection.outlook.com[104.47.18.97] said:
550 5.7.1 Service unavailable, Client host [xxx.xxx.xxx.xxx] blocked using
Spamhaus. To request removal from this list see
https://www.spamhaus.org/query/ip/xxx.xxx.xxx.xxxhttps://www.spamhaus.org/query/ip/ (AS3130).
[AM6EUR05FT045.eop-eur05.prod.protection.outlook.com
2023-08-07T10:11:56.101Z 08DB96BEFD7FD092] (in reply to MAIL FROM command)
原因:某些邮箱系统如Outlook把一些自建的邮箱服务默认列为不信任 所以邮件发布出去
方案:通过 https://www.spamhaus.org/query/ip/xxx.xxx.xxx.xxx 移除不被信任的域名/ip即可 同时推荐尝试通过微软的规则 见下一条
Undelivered Mail Returned to Sender
如果收到主题为 Undelivered Mail Returned to Sender 内容如下的邮件反馈内容(自建邮箱和对方邮箱及IP使用举例) 说明邮箱服务器已被列入 spamhaus 这个组织的黑名单
This is the mail system at host mail.xxx.cn.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
<xiaoming@xxx.com>: host
xxx.mail.protection.outlook.com[66.66.66.66(说明:对方邮箱服务器的ip)] said: 550 5.7.1
Service unavailable, Client host [66.66.66.66(说明:自建邮箱的服务器ip)] blocked using Spamhaus. To
request removal from this list see
https://www.spamhaus.org/query/ip/61.169.96.6866.66.66.66https://www.spamhaus.org/query/ip/61.169.96.68 AS(1450)
[HK3PEPF0000021C.xxx.prod.outlook.com 2024-10-29T10:26:04.378Z
可以在这个spamhaus的网站查询ip/域名的状态 网址: https://check.spamhaus.org/ 如果是如下提示那么是正常的就不用管
如果列入黑名单 那么按照页面的提示申请去除即可 被列入黑名单的服务器如果向微软的邮箱Outlook发邮件同样可能会拒收 如果出现此情况或者为保证可用 同时可以在 Office 365 反垃圾邮件 IP 去除门户 网站由个人去申请从阻止列表去除发件人邮箱 网站: Delist IP - Delist IP 按照提示操作即可,此操作需要每个要向微软Outlook邮箱发邮件的人申请 暂未发现以域名整体申请的方式 以下是关于这个错误的详细说明链接
Recipient address rejected: Blacklisted
发邮件后收到来自MAILER-DAEMON@mail.zhong.com的退信提示 重要部分的内容如下:
<zhong@zhong.com>: host mail.xxx.com[66.88.66.68] said: 554 5.7.1
<zhong@zhong.com>: Recipient address rejected: Blacklisted (in reply to
RCPT TO command)
原因:可能判定为垃圾邮件 对方阻止了收信
方案:
一个可行的方案是禁用iRedAPD服务
To disable iRedAPD service:
- please remove all
check_policy_service inet:127.0.0.1:7777
in Postfix config file/etc/postfix/main.cf
(Linux/OpenBSD) or/usr/local/etc/postfix/main.cf
(FreeBSD). - Restart or reload Postfix service.
- Disable iredapd service.
或者尝试禁用white/blacklists
To disable white/blacklists completely, please remove plugin name amavisd_wblist
in iRedAPD config file /opt/iredapd/settings.py
, parameter plugins =
:
plugins = [..., 'amavisd_wblist', ...]
Restarting iRedAPD service is required.
参考网址:Manage iRedAPD (white/blacklists, greylisting, throttling and more)
certbot获取/更新证书失败
根据提示信息查看网络、配置等是否有问题,或者80/443端口是否可访问!
SSL ShakeHand error:00002746:lib(0):func(2):reason(1862)lib: func: reason
一般发生在使用Foxmail工具发送邮件时 提示 错误信息:SSL ShakeHand error:00002746:lib(0):func(2):reason(1862)lib: func: reason
原因:可能是Foxmail工具ssl组件未更新导致(猜测!!!)
方案:
1、可尝试升级Foxmail版本或者使用其它工具替代
2、修改配置(未验证 可自行测试)
3、网上搜索下载ssl组件 覆盖到安装目录(未验证 可自行测试)
术语
FQDN
(fully qualified domain name)
Postfix
SMTP服务器
Roundcube
Webmail
iRedAdmin
web邮件账号管理
Awstats
分析日志文件生成图表
Amavisd
邮件安全防护
在iRedMail, Amavisd 提供以下功能:
- 基于内容的垃圾邮件扫描(调用SpamAssassin)
- 病毒扫描(调用ClamAV)
- DKIM签署
- DKIM验证(通过SpamAssassin + Perl模块)
- SPF验证(通过SpamAssassin + Perl模块)
- 免责声明(通过AlterMIME)
Dovecot
POP3/IMAP/Managesieve
SPF
Sender Policy Framework
SPF是一种打击垃圾邮件和网络钓鱼诈骗的方法,它使用DNS SPF记录来定义允许哪些主机为某个域发送电子邮件。
DKIM
DKIM允许组织以一种可由收件人验证的方式对消息负责。组织可以是消息的直接处理程序,例如作者的、原始发送站点的或传输路径上的中介。但是,它也可以是间接处理程序,例如为直接处理程序提供帮助的独立服务。DKIM通过使用公钥加密和使用域名服务作为其密钥服务器技术,为电子邮件定义了一个域级数字签名认证框架(RFC4871)。
DMARC
DMARC是一种方法,可以使电子邮件发送者和接收者更容易确定给定的消息是否合法地来自发送者,如果不是,该怎么做。这使得识别垃圾邮件和网络钓鱼邮件更容易,并使它们远离人们的收件箱。
DMARC是一个被提议的标准,它允许电子邮件发送者和接收者合作共享他们发送给对方的电子邮件的信息。此信息有助于发件人改进邮件身份验证基础结构,以便对其所有邮件进行身份验证。
欢迎点赞、收藏加关wang