zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/yhq1314/p/13672068.html
Copyright © 2011-2022 走看看