centos 7使用 Postifx 与 Dovecot 部署邮件系统,并使用sendemai发送邮件

1 常见的邮件协议:
--简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的 25/TCP 端口。
--邮局协议版本 3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的 110/TCP 端口。
--Internet 消息访问协议版本 4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的 143/TCP 端口。

大家在生产环境中部署企业级的电子邮件系统时,有 4 个注意事项请留意。
--添加反垃圾与反病毒模块:它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰。
--对邮件加密:可有效保护邮件内容不被黑客盗取和篡改。
--添加邮件监控审核模块:可有效地监控企业全体员工的邮件中是否有敏感词、是否有透露企业资料等违规行为。
--保障稳定性:电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范分布式拒绝服务(Distributed Denial of Service, DDoS)攻击的准备。

2 部署基础的电子邮件系统

一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于
SMTP 协议的 Postfix 服务程序提供发件服务功能,并使用基于 POP3 协议的 Dovecot 服务程
序提供收件服务功能。
在 RHEL 5、 RHEL 6 以及诸多早期的 Linux 系统中, 默认使用的发件服务是由 Sendmail服务程序提供的,
而在 RHEL 7 系统中已经替换为 Postfix 服务程序。

第 1 步:配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致:

[root@zabbix ~]# cat /etc/hostname
zabbix

第 2 步:清空 iptables 防火墙默认策略 或者修改防火墙策略
开放我们需要的端口,端口有25(SMTP服务,用于发送邮件),110(pop3服务,用于接收邮件)143(imap服务,用于接收邮件)

firewall-cmd --add-port=25/tcp --permanent
firewall-cmd –-add-port=110/tcp --permanent
firewall-cmd --reload
或者
[root@zabbix ~]# systemctl stop firewalld

第 3 步:为电子邮件系统提供域名解析。

[root@zabbix ~]# yum install bind-chroot -y
[root@zabbix ~]# vim /etc/named.conf
 12 options {
 13         listen-on port 53 { any; };
 21         allow-query     { any; };
[root@zabbix ~]# vim /etc/named.rfc1912.zones
zone "zabbix" IN {
        type master;
        file "zabbix.com.zone";
        allow-update { none; };
}
[root@zabbix ~]# cd /var/named/
[root@zabbix named]# cp -a named.localhost zabbix.com.zone
[root@zabbix named]# vim zabbix.com.zone 
[root@zabbix named]# systemctl restart named
[root@zabbix ~]# hostnamectl set-hostname mail.zabbix.com
[root@zabbix ~]# hostname
mail.zabbix.com
[root@zabbix named]# cat zabbix.com.zone 
$TTL 1D
@       IN SOA  zabbix.com. root.zabbix.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.zabbix.com.
ns     IN A 10.15.1.199
@      IN MX 10  mail.zabbix.com.
mail   IN A 10.15.1.199
[root@mail named]# named-checkzone zabbix.com. /var/named/zabbix.com.zone 
zone zabbix.com/IN: loaded serial 0
OK
[root@mail named]# vim /etc/sysconfig/network-scripts/ifcfg-ens192 #修改dns的值为10.15.1.199
[root@mail named]# systemctl restart network
[root@mail named]# dig mail.zabbix.com

; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> mail.zabbix.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 42949
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

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

;; Query time: 0 msec
;; SERVER: 10.15.1.199#53(10.15.1.199)
;; WHEN: Mon Sep 14 03:31:42 MDT 2020
;; MSG SIZE  rcvd: 44
[root@mail named]# ping mail.zabbix.com
PING mail.zabbix.com (10.15.1.199) 56(84) bytes of data.
64 bytes from zabbix (10.15.1.199): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from zabbix (10.15.1.199): icmp_seq=2 ttl=64 time=0.039 ms

电子邮件系统所对应的服务器主机名即为 mail.zabbix.com,而邮件域为 @zabbix.com

2.1 配置 Postfix 服务程序
Postfix 是一款由 IBM 资助研发的免费开源电子邮件服务程序,能够很好地兼容 Sendmail服务程序,可以方便 Sendmail 用户迁移到 Postfix 服务上。
Postfix 服务程序的邮件收发能力强于 Sendmail 服务, 而且能自动增加、 减少进程的数量来保证电子邮件系统的高性能与稳定性。

第 1 步:安装 Postfix 服务程序。

[root@mail named]# yum install postfix -y
Loaded plugins: aliases, changelog, fastestmirror, langpacks, tmprepo, verify, versionlock
Loading mirror speeds from cached hostfile
Package 2:postfix-2.10.1-7.el7.x86_64 already installed and latest version
Nothing to do
[root@mail nam ###centos 7 自带postfix

第 2 步:配置 Postfix 服务程序。

[root@mail ~]# ll /etc/postfix/main.cf 
-rw-r--r--. 1 root root 27176 Oct 30  2018 /etc/postfix/main.cf
重要参数:
myhostname 邮局系统的主机名
mydomain 邮局系统的域名
myorigin 从本机发出邮件的域名名称
inet_interfaces 监听的网卡接口
mydestination 可接收邮件的主机名或域名
mynetworks 设置可转发哪些主机的邮件
relay_domains 设置可转发哪些网域的邮件
[root@mail ~]# vim /etc/postfix/main.cf
 77 myhostname = mail.zabbix.com
 84 mydomain = zabbix.com
 99 myorigin = $mydomain
116 inet_interfaces = all
164 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
264 mynetworks = 127.0.0.0/8
420 home_mailbox = Maildir/
572 smtpd_banner = $myhostname ESMTP
# 添加到最后 
# 规定邮件最大尺寸为10M 
message_size_limit = 10485760 
# 规定收件箱最大容量为1G 
mailbox_size_limit = 1073741824 
# SMTP认证 
smtpd_sasl_type = dovecot 
smtpd_sasl_path = private/auth 
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_local_domain = $myhostname 
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject 

第 3 步:创建电子邮件系统的登录账户。 邮件的用户是和系统用户一致的,也就是说系统用户可以当做邮件用户。

[root@mail ~]# useradd boss
[root@mail ~]# echo "*****" |passwd --stdin boss
Changing password for user boss.
passwd: all authentication tokens updated successfully.
[root@mail ~]# systemctl restart postfix
[root@mail ~]# systemctl enable postfix
[root@mail ~]# systemctl enable named

2.2 配置 Dovecot 服务程序
Dovecot 是一款能够为 Linux 系统提供 IMAP 和 POP3 电子邮件服务的开源服务程序,安
全性极高,配置简单,执行速度快,而且占用的服务器硬件资源也较少,因此是一款值得推
荐的收件服务程序。

第 1 步:安装 Dovecot 服务程序软件包
[root@mail ~]# yum install dovecot -y
第 2 步:配置部署 Dovecot 服务程序。
[root@mail ~]# vim /etc/dovecot/dovecot.conf
 24 protocols = imap pop3 lmtp
 25 disable_plaintext_auth = no
 32 listen = *
 49 login_trusted_networks = 10.15.1.1/223 步:配置邮件格式与存储路径。
[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf
 24  mail_location = maildir:~/Maildir
 25 # mail_location = mbox:~/mail:INBOX=/var/mail/%u
#    [root@mail ~]# su - boss
#    [boss@mail ~]$ mkdir -p mail/.imap/INBOX
#    [boss@mail ~]$ exit
#    logout
[root@mail ~]# vim /etc/dovecot/conf.d/10-auth.conf
10 disable_plaintext_auth = no
100 auth_mechanisms = plain login
[root@mail ~]# vim /etc/dovecot/conf.d/10-master.conf
 88   # permissions (e.g. 0777 allows everyone full permissions).
 89   unix_listener /var/spool/postfix/private/auth {
 90     mode = 0666
 91     user = postfix
 92     group = postfix
 93   }
 
注意:如果我们没有使用ssl的话需要进行下面的操作。使用了则不需要。
[root@mail ~]# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no

[root@mail ~]# systemctl restart dovecot
[root@mail ~]# systemctl enable dovecot
Created symlink from /etc/systemd/system/multi-user.target.wants/dovecot.service to /usr/lib/systemd/system/dovecot.service.
    
[root@mail named]# nslookup
> mail.zabbix.com
;; connection timed out; no servers could be reached
[root@mail ~]# dig -t A mail.zabbix.com @10.15.1.199

; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> -t A mail.zabbix.com @10.15.1.199
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1902
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

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

;; Query time: 0 msec
;; SERVER: 10.15.1.199#53(10.15.1.199)
;; WHEN: Mon Sep 14 03:40:29 MDT 2020
;; MSG SIZE  rcvd: 44
[root@mail ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-09-14 03:42:46 MDT; 58s ago
  Process: 6278 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 6113 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 6304 (named)
   CGroup: /system.slice/named.service
           └─6304 /usr/sbin/named -u named -c /etc/named.conf

Sep 14 03:43:43 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/AAAA/IN': 2001:500:84::b#53
Sep 14 03:43:43 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/A/IN': 2001:500:84::b#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving 'pcapp-push.youku.com/A/IN': 2001:500:12::d0d#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving 'pcapp-push.youku.com/A/IN': 2001:500:1::53#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving './NS/IN': 2001:500:1::53#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/AAAA/IN': 2001:500:12::d0d#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/A/IN': 2001:500:12::d0d#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/AAAA/IN': 2001:500:1::53#53
Sep 14 03:43:44 mail.zabbix.com named[6304]: network unreachable resolving '1.centos.pool.ntp.org.zabbix.com/A/IN': 2001:500:1::53#53
修改 
zone "zabbix" IN { 》》zabbix.com
        type master;
        file "zabbix.com.zone";
        allow-update { none; };
};
[root@mail ~]# systemctl restart named
[root@mail ~]# systemctl status named    
[root@mail ~]# nslookup
> mail.zabbix.com
;; connection timed out; no servers could be reached
> mail.zabbix.com
Server:        10.15.1.199
Address:    10.15.1.199#53

Name:    mail.zabbix.com
Address: 10.15.1.199

windows端 修改dns地址为10.15.1.199,然后ping邮件服务器地址

C:Usersadmin>ping mail.zabbix.com

正在 Ping mail.zabbix.com [10.15.1.199] 具有 32 字节的数据:
来自 10.15.1.199 的回复: 字节=32 时间<1ms TTL=63
来自 10.15.1.199 的回复: 字节=32 时间<1ms TTL=63

10.15.1.199 的 Ping 统计信息:
    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms    

2.3 测试电子邮件系统

C:Usersadmin>ipconfig /flushdns
    
用户名:boss@zabbix.com/*******
[root@mail ~]# telnet mail.zabbix.com 25
Trying 10.15.1.199...
Connected to mail.zabbix.com.
打开Foxmail,添加账号后,并发送邮件给 root@zabbix.com

 发送邮件

[root@mail Packages]# yum install -y mailx
[root@mail Packages]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 zabbix@zabbix.locald  Wed Aug 12 02:54  16/643   "*** SECURITY information for zabbix ***"
& 
Message  1:
From root@zabbix.localdomain  Wed Aug 12 02:54:30 2020
Return-Path: <root@zabbix.localdomain>
X-Original-To: root
Delivered-To: root@zabbix.localdomain
To: root@zabbix.localdomain
From: zabbix@zabbix.localdomain
Auto-Submitted: auto-generated
Subject: *** SECURITY information for zabbix ***
Date: Wed, 12 Aug 2020 02:54:30 -0600 (MDT)
Status: R

zabbix : Aug 12 02:54:30 : zabbix : user NOT in sudoers ; TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/nmap -O 10.15.10.199

-----------------------------添加新账号    

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

=================测试用sendEmail来发送邮件

[root@mail opt]# tar xvzf sendEmail-v1.56.tar.gz 
sendEmail-v1.56/
sendEmail-v1.56/CHANGELOG
sendEmail-v1.56/README
sendEmail-v1.56/README-BR.txt
sendEmail-v1.56/TODO
sendEmail-v1.56/sendEmail
sendEmail-v1.56/sendEmail.pl
[root@mail opt]# cp sendEmail-v1.56/sendEmail /usr/local/bin/
[root@mail opt]# chmod +x /usr/local/bin/sendEmail 
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
-cc 表示抄送
-bcc 表示暗抄送
[root@mail opt]# /usr/local/bin/sendEmail -f yhq1314@zabbix.com -t boss@zabbix.com -s mail.zabbix.com -u "send by 123"  -o message-content-type=html -o message-charset=utf8 -xu yhq1314 -xp ****** -m "邮件发送成功,good"
Sep 14 20:32:03 mail sendEmail[2906]: Email was sent successfully!

============注意事项:

mynetworks 参数不要设置为all,可能会被其他邮件当作垃圾邮件
检查日志
[root@mail opt]# du -sh /var/spool/postfix/*
[root@mail opt]# tail -n 10 /var/log/maillog
Sep 14 20:32:03 mail postfix/cleanup[2913]: A51ED20815CA: message-id=<804310.105132998-sendEmail@mail>
Sep 14 20:32:03 mail postfix/qmgr[10300]: A51ED20815CA: from=<yhq1314@zabbix.com>, size=877, nrcpt=1 (queue active)
Sep 14 20:32:03 mail postfix/smtpd[2907]: disconnect from zabbix[10.15.1.199]
Sep 14 20:32:03 mail postfix/local[2915]: A51ED20815CA: to=<boss@zabbix.com>, relay=local, delay=0.07, delays=0.06/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Sep 14 20:32:03 mail postfix/qmgr[10300]: A51ED20815CA: removed
Sep 14 20:32:18 mail dovecot: pop3-login: Login: user=<boss>, method=PLAIN, rip=10.15.1.60, lip=10.15.1.199, mpid=2932, session=<sGy29VCvcN8KDwc8>
Sep 14 20:32:18 mail dovecot: pop3(boss): Disconnected: Logged out top=0/0, retr=1/990, del=0/2, size=2539
Sep 14 20:35:23 mail postfix/anvil[2909]: statistics: max connection rate 1/60s for (smtp:10.15.1.199) at Sep 14 20:32:03
Sep 14 20:35:23 mail postfix/anvil[2909]: statistics: max connection count 1 for (smtp:10.15.1.199) at Sep 14 20:32:03
Sep 14 20:35:23 mail postfix/anvil[2909]: statistics: max cache size 1 at Sep 14 20:32:03
##grep "authentication failure" /var/log/maillog|awk '{print $7}'|grep -E -o "[0-9]+.[0-9]+.[0-9]+.[0-9]+"|sort|uniq -c > af_iplist.txt

邮件发送截图

 参考:

<linux 就该这么学>

https://www.cnblogs.com/operationhome/p/9056870.html

原文地址:https://www.cnblogs.com/yhq1314/p/13672068.html