postfix邮件管理

*************实验前配置环境*****************

***首先重置两台虚拟机***
####desktop主机#####
vim /etc/sysconfig/network-scripts/ifcfg-eth0    ##配置网络环境
BOOTPROTO=none
IPADDR=172.25.254.140
PREFIX=24
systemctl restart network            ##重启网络服务
vim /etc/yum.repos.d/...              ##配置yum源
yum clean all                              ##清除yum缓存
hostnamectl set-hostname westos-mail.westos.com ##设置主机名

*****配置dns解析*******
yum install bind -y
systemctl start named
vim /etc/named.conf
   11 //      listen-on port 53 { 127.0.0.1; };
   12 //      listen-on-v6 port 53 { ::1; };
   17 //      allow-query     { localhost; };
   32         dnssec-validation no;


vim  /etc/named.rfc1912.zones
   zone "westos.com" IN {
        type master;
        file "westos.com.zone";
        allow-update { none; };
   };

   zone "qq.com" IN {
        type master;
        file "qq.com.zone";
        allow-update { none; };
   };


vim /var/named/westos.com.zone
$TTL 1D
@       IN SOA  dns.westos.com. root.westos.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                         NS      dns.westos.com.
dns                    A         172.25.254.140
westos.com.     MX 1    172.25.254.140.
###可以用命令:cp -p named.localhost dns.westos.com复制一个配置文件然后修改有关条目


vim /var/named/qq.com.zone

###可以用命令:cp -pdns.westos.com qq.com.zone 复制一个配置文件然后修改有关条目

###进入qq.com.zone后在一般模式下可用命令“:%s/westos/qq/g” 将全文的westos用qq代替

systemctl restart named
vim /etc/resolv.conf
    nameserver 172.25.254.140


#####server主机#####
vim /etc/sysconfig/network-scripts/ifcfg-eth0   ##网络配置
vim /etc/yum.repos.d/rhel_dvd.repo                 ##配置yum源
yum clean all                                                  
hostnamectl set-hostname qq-mail.qq.com
vim /etc/resolv.conf
    nameserver 172.25.254.140

##测试dns配置:dig -t mx qq.com

                           dig -t mx westos.com

postfix邮件管理_第1张图片

postfix邮件管理_第2张图片

1.postfix

postfix提供smtp协议用来投递邮件(默认25端口)

/var/log/maillog                                     ##邮件服务日志(可以用cat命令来查看)
mail [email protected]                         ##向root用户发送邮件
Subject: hello                                        ##邮件标题
hello world                                            ##邮件内容
.                                                           ##用"."来结束录入内容回车发送
mailq                                                    ##查看邮件队列
Mail queue is empty                             ##邮件队列为空,说明已发送
**postqueue -f                                      ##重新处理邮件队列

**默认情况下邮件端口只在127.0.0.1上开启

postfix邮件管理_第3张图片


2.邮件系统基础配置
vim /etc/postfix/main.cf
   116 inet_interfaces = all                                                        ##25端口开启的网络接口
   76 myhostname = westos-mail.westos.com                           ##指定mta(邮件服务器)主机名称
   83 mydomain = westos.com                                                  ##指定mta的域名
   99 myorigin = westos.com                                                     ##指定邮件来源结尾(即@后面的字符内容)
   164 mydestination = $myhostname, $mydomain, localhost    ##接收邮件结尾字符的指定

systemctl stop firewalld                  ##关闭火墙
systemctl restart postfix.service    ##重启服务

测试:mail

postfix邮件管理_第4张图片

继续回车,依次显示邮件内容

postfix邮件管理_第5张图片


3.邮件别名
 vim /etc/aliases
    别名:    真名                       ##邮件别名
    别名:    :include:filename    ##邮件群发

vim filename
    user1
    user2

postalias /etc/aliases               ##刷新别名列表

mail 别名                                 

测试:

desktop端:mail 别名@qq.com

server端:mail                        ##查看邮件

              或mail -u 真名


4.通过远程主机测试邮件服务

postfix邮件管理_第6张图片

在qq.com端用mail命令测试接收结果。


5.邮件访问控制
(1)发送端:
[root@westos-mail ~]# postconf -e "smtpd_client_restrictions = check_client_access hash:/etc/postfix/access"               

###在邮件配置文件中加入配置:开启用户访问检测,并对访问文件进行hash加密

[root@westos-mail ~]# tail -n 1 /etc/postfix/main.cf     ##查看主配置文件的最后一行会发现参数已经添加
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
[root@westos-mail ~]# vim /etc/postfix/access           ##编辑加密文件
       172.25.254.75 REJECT                                      ##最后一行添加要拒绝的主机
[root@westos-mail ~]# postmap /etc/postfix/access   ##加密文件
[root@westos-mail ~]# ls /etc/postfix/                         ##.db文件为真实的加密文件
access     canonical  header_checks  master.cf  relocated  virtual
access.db  generic    main.cf        moreuser   transport
[root@westos-mail ~]# systemctl restart postfix.service     ##重启服务

(2)测试:
[root@foundation150 ~]# telnet 172.25.254.140 25
Trying 172.25.254.140...
Connected to 172.25.254.140.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 : Client host rejected: Access denied                    ##发送邮件时被拒绝
quit
221 2.0.0 Bye
Connection closed by foreign host

postfix邮件管理_第7张图片


6.限制用户发送
(1)首先清除上次实验的控制
[root@westos-mail ~]# vim /etc/postfix/main.cf           ##注释掉邮件访问控制语句
#smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
 
(2)
[root@westos-mail ~]# postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender"        ##限制用户发送邮件,使用哈希在/etc/postfix/sender加密
[root@westos-mail ~]# tail -n 1 /etc/postfix/main.cf     ##查看主配置文件发现参数已经添加
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender
[root@westos-mail ~]# vim /etc/postfix/sender           ##编辑加密文件,写入要加密的用户
[email protected] REJECT                                  ##末尾不能加空格等其他任何字符
[root@westos-mail ~]# postmap /etc/postfix/sender   ##对加密文件进行加密
[root@westos-mail ~]# ls /etc/postfix/                        ##sender.db即生成的加密文件
access     canonical  header_checks  master.cf  relocated  sender.db  virtual
generic    main.cf        moreuser   sender     transport
[root@westos-mail ~]# systemctl restart postfix.service ##重启服务

(3)测试:
[root@foundation41 Desktop]# telnet 172.25.254.140 25
Trying 172.25.254.140...
Connected to 172.25.254.140.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 : Sender address rejected: Access denied    ##发送被限制

postfix邮件管理_第8张图片


7.限制用户接收
(1)
[root@westos-mail ~]# postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recip"    ##限制用户接受文件,使用哈希加密在/etc/postfix/recip加密
[root@westos-mail ~]# vim /etc/postfix/recip             ##编辑加密文件,写入加密用户
   [email protected] REJECT                              ##末尾不能加空格等其他任何字符
[root@westos-mail ~]# postmap /etc/postfix/recip     ##对加密文件进行加密,生成.db文件
[root@westos-mail ~]# ls /etc/postfix/
access     generic        main.cf    moreuser  recip.db   sender     transport
canonical  header_checks  master.cf  recip     relocated  sender.db  virtual
[root@westos-mail ~]# systemctl restart postfix.service ##重启服务

(2)测试:
[root@foundation41 Desktop]# telnet 172.25.254.140 25
Trying 172.25.254.140...
Connected to 172.25.254.140.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:[email protected]                               ##发送者
250 2.1.0 Ok
rcpt to:[email protected]                                               ##接收者
250 2.1.5 Ok
data
354 End data with .
123
1213
.
250 2.0.0 Ok: queued as   29960EAC27                ##由此看出[email protected]可以发送邮件
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 : Recipient address rejected: Access denied ##由此看出不能接受邮件
quit
221 2.0.0 Bye
Connection closed by foreign host.
postfix邮件管理_第9张图片

8.出站地址伪装
(1)
[root@westos-mail ~]# postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"        ##出站地址伪装
[root@westos-mail ~]# vim /etc/postfix/generic                    ##编写加密文件,写入伪装用户
[email protected]    [email protected]                             ##末尾不能加空格等其他任何字符

[root@westos-mail ~]# postmap /etc/postfix/generic            ##进行加密
[root@westos-mail ~]# systemctl restart postfix.service      ##重启服务

(2)测试:
[root@westos-mail ~]# su - westos
[westos@westos-mail ~]$ mail [email protected]
Subject: hello1
hello qq
.
[root@qq-mail ~]# mail                                    ##查看邮件,最后一封邮件发送方显示伪装后的名字[email protected]
postfix邮件管理_第10张图片

9.入站地址转换
(1)实验环境:
[root@westos-mail ~]# vim /etc/postfix/main.cf     ##编辑主配置文件,注释westos用户不能收件的功能
   #smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recip

(2)DNS解析
[root@westos-mail ~]# vim /etc/named.rfc1912.zones
zone "gmail.com" IN {
        type master;
        file "gmail.com.zone";
        allow-update { none; };
};

[root@westos-mail ~]# cp -p /var/named/westos.com.zone /var/named/gmail.com.zone
[root@westos-mail ~]# vim /var/named/gmail.com.zone
把westos换成gmail                                               ##可用命令“:%s/westos/gmail/g”
[root@westos-mail ~]# systemctl restart named

[root@westos-mail ~]# dig -t mx gmail.com

postfix邮件管理_第11张图片
(3)转换地址
[root@westos-mail ~]# postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"        ##入站地址转换
[root@westos-mail ~]# vim /etc/postfix/virtual                 ##编辑虚拟地址转换文件
虚拟名称    真实名称
[email protected]    [email protected]                       ##末尾不能加空格等其他任何字符

[root@westos-mail ~]# postmap /etc/postfix/virtual         ##进行加密   
[root@westos-mail ~]#
systemctl restart postfix.service ##重启服务

(4)测试
[root@qq-mail ~]# mail [email protected]                        ##向[email protected]回复邮件
Subject: hi   
hi gmail
.
EOT
[root@westos-mail ~]# mail -u westos
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/westos": 1 message 1 new
>N  1 root                  Wed May 24 08:57  21/717   "hi"
&
Message  1:
From [email protected]  Wed May 24 08:57:07 2017
Return-Path:
X-Original-To: [email protected]
                                  ##虚拟名称

Delivered-To: [email protected]                           ##转换成了真实名称

Date: Wed, 24 May 2017 08:57:06 -0400
To: [email protected]
Subject: hi
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

hi gmail
postfix邮件管理_第12张图片
#####出站地址伪装和入站地址转换构成了企业邮箱功能#####


10.dovecot
1.
dovecot 用来提供收件协议,给定用户名称,用户密码,dovecot程序代我们去看这个用户的邮件文件

/etc/services  端口文件
pop3    110
imap    143
imaps    993
pop3s    995

2.下载
yum install dovecot -y                               ##下载dovecot

3.配置
vim /etc/dovecot/dovecot.conf                 ##编辑主配置文件
24 protocols = imap pop3 lmtp                 ##使用imap pop3 lmtp协议
48 login_trusted_networks = 0.0.0.0/0     ##全网访问
49 disable_plaintext_auth = no                ##使用明文密码登陆

vim /etc/dovecot/conf.d/10-mail.conf       ##编辑子配置文件
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u    ##用户邮件所在地
#mbox - mail's box
#~/mail - 用户家目录/mail
#INBOX=/var/mail/%u - INBOX中存放的是/var/mail/%u中的文件
#%u - username

systemctl restart dovecot                       ##重启服务

[root@westos-mail ~]# su - westos        ##切换westos用户
[westos@westos-mail ~]$ pwd
/home/westos
[westos@westos-mail ~]$ mkdir mail/.imap/ -p                    ##建立邮件目录
[westos@westos-mail ~]$ touch mail/.imap/INBOX             ##建立邮件存储文件


[root@westos-mail ~]# mkdir /etc/skel/mail/.imap -p            ##建立用户(新建立的所有)邮件目录
[root@westos-mail ~]# touch /etc/skel/mail/.imap/INBOX    ##建立用户(新建立的所有)邮件存储文件


4.测试
mutt -f pop://[email protected]    ##查看邮件


11.postfix+mysql

1.数据库基础设置
yum install httpd  php php-mysql.x86_64 mariadb-server.x86_64 -y
mv /etc/postfix/main.cf /mnt                                        ##备份配置文件
yum reinstall postfix.x86_64                                       ##重新下载
vim /etc/postfix/main.cf         
systemctl restart postfix.service     
systemctl start mariadb
mysql_secure_installation                                          ##数据库安全证书初始化
tar jxf phpMyAdmin-3.4.0-all-languages.tar.bz2 -C /var/www/html/
rm *.bz2 -f
mv phpMyAdmin-3.4.0-all-languages/ admin/
cp /var/www/html/admin/config.sample.inc.php /var/www/html/admin/config.sample.php
vim /var/www/html/admin/config.sample.php
vim /etc/my.cnf
systemctl restart mariadb
systemctl restart httpd
-----web建立表格
mysql -uroot -pwestos
create user postuser@localhost identified by 'postuser';           ##建立数据库用户
grant select,update,insert on email.* to postuser@localhost;     ##授权


2.设置postfix
(1)用户名查询
vim /etc/postfix/mailuser.cf    ##用户名查询
hosts = localhost                   ##数据库所在主机
user = postuser                     ##登陆数据库的用
password = postuser             ##登陆数据库的用户的密码
dbname = email                     ##postfix要查询的库名称
table = emailuser                   ##postfix要查询的表的名称
select_field = username        ##postfix要查询的字段
where_field = username        ##用户给定的postfix的查询条件

(2)用户域名查询
vim /etc/postfix/maildomain.cf     ##用户域名查询
hosts = localhost
user = postuser
password = postuser
dbname = email
table = emailuser
select_field = domain
where_field = domain

(3)用户邮箱位置查询        
vim /etc/postfix/mailbox.cf         ##用户邮箱位置查询
hosts = localhost
user = postuser
password = postuser
dbname = email
table = emailuser
select_field = maildir
where_field = username

(4)测试
[root@westos-mail postfix]# postmap -q "[email protected]" mysql:/etc/postfix/mailuser.cf
[email protected]
[root@westos-mail postfix]# postmap -q "lee.com" mysql:/etc/postfix/maildomain.cf
lee.com
[root@westos-mail postfix]# postmap -q "[email protected]" mysql:/etc/postfix/mailbox.cf
/mnt/lee.com/lee/


3.配置postfix
(1)
groupadd -g 666 vmail
useradd -s /sbin/nologin -u 666 vmail -g 666

(2)
postconf -e "virtual_mailbox_base = /home/vmail"
postconf -e "virtual_uid_maps = static:666"
postconf -e "virtual_alias_maps = mysql:/etc/postfix/mailuser.cf"
postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/maildomain.cf"
postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/mailbox.cf"
systemctl restart postfix.service

(3)
mail [email protected]
ls /home/vmail

你可能感兴趣的:(postfix邮件管理)