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/22 第 3 步:配置邮件格式与存储路径。 [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 就该这么学>