邮件服务主要由两部分构成,一部分是发邮件,另一部分是收邮件。
发邮件用的协议是SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。所用的服务软件是postfix,发送邮件是不需要身份验证的
收邮件指的是远程收邮件,例如用QQMAIL接受服务器里的邮件 需要身份验证,用的协议有POP3,IMAP,这两个写以可提供身份验证的功能,
而搭载这两个协议用的服务是dovecot。
########邮件系统(postfix)l######
需要两台主机,在同一网段(可以ping通)这里的两台是(westos.westos.com linux.;inux.com)
#####1.配置DNS使得两台主机能够通过名字找到对方####
#yum install bind -y
#vim /etc/named.conf ##开启所有端口
#vim /etc/named.rfc1912.zones ##添加这两个域名
#vim /var/named/linux.com.zone
+ $TTL 1D
+ @ IN SOA dns.linux.com. root.linux.com. (
+ 0 ; serial
+ 1D ; refresh
+ 1H ; retry
+ 1W ; expire
+ 3H ) ; minimum
+ NS dns.linux.com.
+ dns A 172.25.254.113
+ linux.com. MX 1 172.25.254.213. ##邮箱的存放
#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.113
+ westos.com. MX 1 172.25.254.113.
#vim /etc/resolv.conf ##修改DNS服务器
#dig -t mx linux.com ##测试
#####2.修改postfix的配置文件使得能互发邮件###
systemctl status postfix.service ##查看邮件服务
1.vim /etc/postfix/main.cf ##修改配置文件
> 76 myhostname = linux.linux.com ##配置主机名
> 83 mydomain = linux.com ##配置域名
> 99 myorigin = $mydomain ##配置给别人发时用的名字
> 113 inet_interfaces = all ##打开所有接口
> 116 #inet_interfaces = localhost ##与上者对应
> 164 mydestination = $myhostname, $mydomain, localhost ##配置收什么样的邮件(什么样的属于自己的)
2.systemctl restart postfix.service
3.mail root@linux.com ##发送邮件,'.'表示结束
4.mailq ##查看邮件队列(未发出的)
6.postqueue -f ##刷新邮箱队列(重发队列里的邮件)
7.cat /var/log/maillog ##查看邮件日志
8.postsuper -d ****** ##删除队列李的邮件后面时ID
#####3.别名发送和群发######
->邮件转移
1.vim /etc/aliases ##编辑该文件(类似于邮件转移将前面发给后面)
+ admin: root ##将发给admin的给root
+ more: :include:/etc/postfix/users ##将给more的给后面文件的用户(文件里每行一个用户)
+ root: student ##将发给root的邮件发给student
+ root: root@mr.com ##将发给root的邮件发给root@mr.com
+ root: :include:/etc/postfix/users ##将发给root的邮件发文件的用户
+ admin: root@mr.com ##将发给admin的给root@mr.com
2.postalias /etc/aliases ##加密aliases(重载)
->接受伪装(linux.com可以接受发给mr@qq.com,@163.com的邮件)(别人向这里发送时需要更改DNS)
1.vim /etc/postfix/virtual ##编辑以更换@后面的
+ mr@qq.com root@linux.com ##当发送给前面时自动换乘后面的
+ @163.com @linux.com ##同上
2.postmap /etc/postfix/virtual ##加密处理
3.postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual" ##读取加密文件
->发送伪装(用上面两者的身份发送)
1.vim /etc/postfix/generic
+ root@linux.com mr@qq.com
+ @linux.com @qq.com
2.postmap /etc/postfix/generic
3.postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
#####4.远程收(dovecot)发(postfix)邮件#####
->发邮件(postfix服务)
测试(用其他同网段的电脑):
1.yum install telnet -y ##安装telnet服务
2.telnet 172.25.254.213 25 ##测试25端口
- mail from:admin@qq.com
- rcpt to:student@163.com
- data
- quit
->收邮件(dovecot服务)
1.yum install dovecot -y
2.vim /etc/dovecot/dovecot.conf ##编辑主配置文件
> 24 protocols = imap pop3 lmtp
> 48 login_trusted_networks = 0.0.0.0/0
+ 49 disable_plaintext_auth = no
3.vim /etc/dovecot/conf.d/10-mail.conf ##子配置文件
> 30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
4.systemctl start dovecot
5.touch ~/mail/.imap/INBOX ##用student(普通用户)建立
->拓展
6.touch /etc/skel/mail/.imap/INBOX ##新建的用户会自动建立skel下的目录到自己的家目录
测试(用其他同网段的电脑):
1.yum install mutt -y
2.mutt -f pop://student@172.25.254.213
3.可以使用客户端雷鸟
#######5.建立虚拟用户处理邮件########
1.yum install mariadb-server httpd php php-mysql -y
mysql -uroot -p
create user postfix@localhost identified by 'postfix'; ##创建用户
grant insert,select on email.* to postfix@localhost; ##授权
配置图形数据库建立一个数据库email,表maildb,和字段(username,password,domain,maildir(/redhat.com/mr/)),并插入一条数据
2.建立一个数据库用户postfix,密码postfix,权限仅对email有INSERT和SELECT
3.vim /etc/postfix/mysql-users.cf ##建立查询用户名,mysql脚本
+ hosts = localhost ##指定主机
+ user = postfix ##指定用户
+ password = postfix ##指定密码
+ dbname = email ##指定数据库
+ table = maildb ##指定表名
+ select_field = username ##查询username
+ where_field = username ##条件
4.vim /etc/postfix/mysql-domain.cf ##建立查询域名
+ hosts = localhost
+ user = postfix
+ password = postfix
+ dbname = email
+ table = maildb
+ select_field = domain
+ where_field = domain
5.vim /etc/postfix/mysql-mailbox.cf ##建立查询邮件目录
+ hosts = localhost
+ user = postfix
+ password = postfix
+ dbname = email
+ table = maildb
+ select_field = maildir
+ where_field = username
6.postmap -q "mr@redhat.com" mysql:/etc/postfix/mysql-mailbox.cf ##测试邮件目录查询
7.postmap -q "mr@redhat.com" mysql:/etc/postfix/mysql-users.cf ##测试用户名查询
8.postmap -q "redhat.com" mysql:/etc/postfix/mysql-domain.cf ##测试主机名查询
9.groupadd -g 888 vmail
10.useradd -u 888 -g 888 vmail
(11.)postconf -e "virtual_gid_maps = static:888" ##可以通过命令实现
11.vim /etc/postfix/main.cf ##也可以通过编写配置文件
+ virtual_mailbox_base = /home/vmail
+ virtual_gid_maps = static:888
+ virtual_uid_maps = static:888
+ virtual_alias_maps = mysql:/etc/postfix/mysql-users.cf
+ virtual_mailbox_maps = mysql:/etc/postfix/mysql-mailbox.cf
+ virtual_mailbox_domains = mysql:/etc/postfix/mysql-domain.cf
12.systemctl restart postfix.service
#######6.建立虚拟用户收邮件#########
1.yum install dovecot-mysql.x86_64 -y
2.vim /etc/dovecot/dovecot.conf
> 48 login_trusted_networks = 0.0.0.0/0 #允许访问网络地址
+ 49 disable_plaintext_auth = no #开始明文认证
3.vim /etc/dovecot/conf.d/10-auth.conf
> 123 !include auth-sql.conf.ext ##开启数据库数据认证
4.cp /usr/share/doc/dovecot-2.2.10/example-config/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext
5.vim /etc/dovecot/dovecot-sql.conf.ext
> 32 driver = mysql ##选择数据库类型
> 78 default_pass_scheme = PLAIN ##明文加密
> 71 connect = host=localhost dbname=email user=postfix password=postfix ##登陆数据库
> 107 password_query = \ ##用密码认证 数据库里面找用户名 域名和密码
108 SELECT username, domain, password \
109 FROM mailsql WHERE username = '%u' AND domain = '%d'
> 125 user_query = SELECT maildir, 888 AS uid, 888 AS gid FROM mailsql WHERE username = '%u'
6.vim /etc/dovecot/conf.d/10-mail.conf
> 30 mail_location = maildir:/home/vmail/%d/%n ##邮件目录
7.setsebool -P mysql_connect_any on ##打开selinux服务的允许
测试(另一台主机):
telnet 172.25.254.213 110 ##利用telnet测试110端口
Trying 172.25.254.213...
Connected to 172.25.254.213.
Escape character is '^]'.
+OK [XCLIENT] Dovecot ready.
user admin@redhat.com
+OK
pass 123
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.
最后打开雷鸟或QQmail登录测试