1 前言
一个问题,一篇文章,一出故事。
笔者公司需要配置一台直接出Internet的邮件传输代理(MTA,即Mail Transfer Agent)中继(Relay),于是笔者便整理此文档。
2 最佳实践
2.1 环境配置
2.1.1 系统配置
HostName = postfix.cmdschool.org
OS = Oracle Linux 9.x x86_64
IP Addr = 192.168.0.25
Internet DNS = 8.8.8.8,8.8.4.4
HostName = postfixclient.cmdschool.org
OS = Oracle Linux 9.x x86_64
IP Addr = any
DNS = any
2.1.2 系统的基本配置
请参阅如下章节完成基本设置,
2.2 中继服务器安装配置
2.2.1 安装软件包
dnf install -y postfix s-nail
启动服务并设置服务自启动,
systemctl start postfix.service systemctl enable postfix.service
2.2.2 修改服务配置
cp /etc/postfix/main.cf /etc/postfix/main.cf.defautl vim /etc/postfix/main.cf
修改如下基本配置,
myhostname = postfix.cmdschool.org mydomain = cmdschool.org myorigin = $mydomain inet_interfaces = all mynetworks = 0.0.0.0/0 relayhost = smtpd_client_restrictions = check_client_access hash:/etc/postfix/access, reject
参数的作用如下,
– 参数“myhostname”声明postfix运行的主机名称
– 参数“mydomain”声明邮件服务器的域名
– 参数“myorigin”声明邮件服务器的组织域名
– 参数“inet_interfaces”声明发送邮件的网卡接口,范例指定所有
– 参数“mynetworks”声明信任的网段,范例指定所有
– 参数“relayhost”声明smtp邮件中继服务器(空表示直接发送到Internet)
– 参数“smtpd_client_restrictions”声明在访问控制列表“/etc/postfix/access”中声明的客户端可发送邮件,其他拒绝
配置修改后,你可以使用如下命令测试配置,
postfix check
重启使服务生效,
systemctl restart postfix.service
可以使用如下命令测试本机的邮件发送,
echo "This is a test message" | s-nail -s test will@cmdschool.org echo "This is a test message" | s-nail -s test -r seradmin@cmdschool.org will@cmdschool.org
然后,你可以使用如下命令查看日志,
tail -f /var/log/maillog
2.2.3 配置访问控制
cat >> /etc/postfix/access << EOF #Allow 10.0.0.0/8 10 OK #Allow 172.16.0.0/12 172.16 OK 172.17 OK 172.18 OK 172.19 OK 172.2 OK 172.30 OK 172.31 OK #Allow 192.168/16 192.168 OK 192.168.0.100 REJECT EOF postmap /etc/postfix/access
以上需根据实际情况配置允许非本机以外的主机发送邮件,
– 网段后面使用空格分隔后跟“OK”表示允许
– 网段后面使用空格分隔后跟“REJECT”表示拒绝
– 由“smtpd_client_restrictions”中定义访问控制默认值是拒绝,即没有匹配到“OK”条目就会被默认拒绝
– 优先级别“REJECT”高于“OK”条目,即只要有显式声明“REJECT”条目则必然会被拒绝,与顺序无关。
然后你需要使用如下命令重载服务使配置生效,
systemctl reload postfix.service
2.2.4 修改服务配置
firewall-cmd --permanent --add-service smtp firewall-cmd --reload firewall-cmd --list-all
2.3 邮件空客户端安装配置
2.3.1 安装软件包
dnf install -y postfix s-nail
启动服务并设置服务自启动,
systemctl start postfix.service systemctl enable postfix.service
2.3.2 修改服务配置
cp /etc/postfix/main.cf /etc/postfix/main.cf.defautl vim /etc/postfix/main.cf
修改如下基本配置,
myhostname = postfixclient.cmdschool.org mydomain = cmdschool.org myorigin = $mydomain inet_interfaces = localhost mydestination = relayhost = postfix.cmdschool.org local_transport = error:local mail delivery is disabled
参数的作用如下,
– 参数“myhostname”声明postfix运行的主机名称
– 参数“mydomain”声明邮件服务器的域名
– 参数“myorigin”声明邮件服务器的组织域名
– 参数“inet_interfaces”声明发送邮件的网卡接口,范例指定回环接口
– 参数“relayhost”声明smtp邮件中继服务器(范例中smtp根据IP地址验证,没有开启用户名和密码验证)
– 参数“mydestination”声明本机邮件的目标域名(即本地接收邮件域,如“cmdschool.org”),范例为空即不接收
– 参数“local_transport”声明本地邮件分发,范例“error:local mail delivery is disabled”为禁用本地分发
中继服务器“postfix.cmdschool.org”必须配置DNS解析,否则你需要替换该服务器的IP地址“192.168.0.25”,然后你可以使用如下命令测试配置,
postfix check
重启使服务生效,
systemctl restart postfix.service
2.3.3 测试邮件发送
echo "test" | s-nail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org
参数的作用如下,
– 参数值“test”声明发送的邮件内容
– 参数“s”声明发送的邮件主题
– 参数“r”声明发件人的邮箱地址
– 参数值“will@cmdschool.org”声明邮件的目标地址
另外,可以配合cat使用,
cat << EOF | s-nail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org test body start test body end EOF
如果shell的函数环境,你可能需要这样书写,
cat <<-EOF | s-nail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org test body start test body end EOF
另外,也支持从一个文件导入邮件内容,
echo "test" > message.txt s-nail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org < message.txt
如果需要发送附件,请参阅如下范例,
echo "test" | s-nail -s "test mail 001" -a /etc/redhat-release -r seradmin@cmdschool.org will@cmdschool.org
参阅文档
=================
https://www.lunanode.com/guides/postfix_smtp_secure
https://www.postfix.org/TLS_README.html
https://www.postfix.org/SMTPD_ACCESS_README.html
没有评论