配置电子邮件传输

来源:互联网 发布:最短路径的floyd算法 编辑:程序博客网 时间:2024/06/05 02:51

基本电子邮件发送

电子邮件发送:
服务器使用SMTP协议将电子邮件提交至TCP端口25,或由本地客户端通过/usr/bin/sendmail程序进行提交。如果该MTA是最终目标位置,邮件将传递至MDA。否则,将使用MX记录在DNS中查找下一个MTA,并使用SMTP进转发。

MDA:“邮件发送代理”。MDA将邮件发送至收件人的本地邮件存储位置(默认情况下是/var/spool/mail/user)。Postfix提供自己的MDA,以发送至基于文件的本地默认邮件存储位置/usr/libexec/postfix/local。
转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)。

拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝

退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户。


Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块化程序它,的组件由master进程控制。

Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。

默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发
送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all.

对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于
被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试
再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大
约每小时尝试重新发送一次,直至邮件被接受或过期。


重要的Postfix配置指令:
可以在/etc/postfix/main.cf文件中找到以下所有指令。

myorigin
重写本地发布的电子邮件,使其显示为来自该域。这样有助于确保响应返回入站邮件服务器.
默认:myorigin = $myhostname

inet_interfaces
控制Postfix侦听传入电子邮件的网络接口。如果设置为loopback-only,仅侦听127.0.0.1和::1,
如果设置为all,则侦听所有网络接口。还可以指定特定地址。
默认:inet_interfaces = localhost

mydestination
收到地址为这些域的电子邮件将传递至MDA,以进行本地发送。
默认:mydestination = $myhostname, localhost.$mydomain, localhost

mynetworks
IP地址和网络的逗号分隔列表(采用CIDR表示法)。这些地址和网络可以通过此MTA转发至
任何位置,无需进一步身份验证。
默认:mynetworks = 127.0.0.0/8

relayhost
relayhost转发所有通过的出站邮件。通常用方括号指定,以阻止MX记录查找。
默认:relayhost =local_transport

收件地址为$mydestination的邮件的发送方式。默认情况下,设置为local:$myhostname(使用Local MDA将传入电子邮件发送到/var/spool/mail中的本地邮件存储位置).
默认:local_transport = local:$myhostname
postconf  -d                                                             ##显示默认值。
postconf  -n                                                             ##显示不同于默认值的更改。


postfix(用来发送邮件)

1.

postfix提供smtp协议用来投递邮件

默认端口25
/var/log/maillog                                          ##服务日志
mail root@westos.com
Subject:hello
hello world
.                                                                   ##用"."来结束录入内容并发送
mailq                                                          ##查看邮件队列
postqueue -f                                              ##重新处理邮件队列

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




2.
配置
vim /etc/postfix/main.cf
76 myhostname = westos-mail.westos.com          ##指定mta主机名称
83 mydomain = westos.com                                     ##指定mta的域名

99 myorigin = westo.com                                          ##指定邮件来源结尾(@后面的字符内容)

116 inet_interfaces = all                                            ##25端口开启的网络接口

164 mydestination = $myhostname, $myhostname, $mydomain, localhost  ##接收邮件结尾字符的指定

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

3.
邮件别名

编辑配置文件:

vim /etc/aliases

别名:    真名                           ##邮件别名

别名: :include:filename    ##邮件群发



vim filename
user1
user2

postalias /etc/aliases

mail 别名

4.
通过远程主机发送邮件
[Kiosk@foundation180 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
ehlo hello
250-westos-mail.westos.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:root@westos.com
250 2.1.0 Ok
rcpt to:root@qq.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
adsf
asdf
asdf
.

5.
在mta上
postconf -e "smtp_client_restrictions = check_client_access hash:/etc/postfix/access"  ##做hash加密


编辑配置文件,将要拒绝岁的用户的ip写入:

vim /etc/postfix/access

172.25.254.80   REJECT



postfix /etc/postfix/access

systemctl restart postfix                                 ##重启服务

测试
[root@foundatio80 ~]#telnet 172.25.254.180 25
Trying 172.25.254.180 ...
Connected to 172.25.254.180
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:root@westos.com
250 2.1.0 ok
rcpt to:root@qq.com

554 5.7.1 <unknow[172.25.254.22]>: Client host rejected:Access denied



6.

限制用户发送
postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender"  ##做hash加密


编辑配置文件,将要拒绝的用户的域名写入:

vim /etc/postfix/sender
student@westos.com    REJECT

postmap  /etc/postfix/sender

systemctl restart postfix                                      ##重启服务

测试
[kiosk@foundation80 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:student@westos.com
250 2.1.0 Ok
rcpt to:root@westos.com
554 5.7.1 <student@westos.com>: Sender address rejected: Access denied


7.

限制用户接收
postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recip"  ##hash加密


编辑配置文件,将要拒绝的用户的域名写入:

vim /etc/postfix/recip
westos@westos.com    REJECT

postmap /etc/postfix/recip

systemctl restart postfix          ##重启服务

测试

[kiosk@foundation80 Desktop]$ telnet 172.25.254.180 25
Trying 172.25.254.180...
Connected to 172.25.254.180.
Escape character is '^]'.
220 westos-mail.westos.com ESMTP Postfix
mail from:westos@westos.com
250 2.1.0 Ok
rcpt to:root@westos.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
adsf
adsf
asdf
.
250 2.0.0 Ok: queued as DE17D2461EA
qiut
502 5.5.2 Error: command not recognized
mail from:root@westos.com
250 2.1.0 Ok
rcpt to:westos@westos.com
554 5.7.1 <westos@westos.com>: Recipient address rejected: Access denied



8.

出站地址伪装
postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"  ##做hash加密


编辑配置文件,将要伪装的域名写入,真域名写在前,伪装后的域名写在后:

vim /etc/postfix/generic
westos@westos.com    hello@sb.com

postmap /etc/postfix/generic

systemctl restart postfix

测试
su - westos
mail root@qq.com



9.

入战地址转换
dns mx 记录解析先做好
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"  ##做hash加密


编辑配置文件,按如下格式写入:

vim /etc/postfix/virtual
虚拟名字        真实用户
hello@sb.com        westos@westos.com

postmap /etc/postfix/virtual

systectl restart postfix

测试
mail hello@sb.com


dovecot
1.
dovecot 用来提供收件协议
pop3        110
imap        143
imaps        993
pop3s        995



给定用户名称,用户密码,dovecot程序带我们去看这个用户的邮件文件

2.
yum install dovecot -y                             ##安装

3.

编辑以下两个配置文件,并做如下修改:

vim /etc/dovecot/dovecot.conf
24 protocols = 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


systemctl restart dovecot               ##重启服务


[westos@qq-mail  ~] $ mkdir mail/.imap/ -p

[westos@qq-mail ~] $ touch mail/.imap/INBOX


测试:

[kiosk@foundation80 Desktop] $ mutt  -f  pop://westos@172.25.254.180



postfix和mysql

1.

编辑配置文件,并作如下修改:

vim  /etc/postfix/mailuser.cf                       ##用户名称查询


host  =  localhost                                          ##数据库所在主机                                               

user  =  postuser                                          ##登陆数据库的用户

password  =  postuser                                 ##登陆数据库的密码

dbname  =  email                                          ##postfix要查询的名称

table  =  emailuser                                        ##postfix要查询的表的名称

select_field  =  username                            ##postfix要查询的字段

where_field  =  username                                              ##用户给定postfix的查询条件


vim  /etc/postfix/maildomain.cf                   ##用户域名查询


host  =  localhost                                          ##数据库所在主机                                              
user  =  postuser                                          ##登陆数据库的用户
password  =  postuser                                 ##登陆数据库的密码
dbname  =  email                                          ##postfix要查询的名称
table  =  emailuser                                        ##postfix要查询的表的名称
select_field  =  domain                                 ##postfix要查询的域名

where_field  =  domain                                  ##用户给定postfix的查询条件



vim  /etc/postfix/maildomain.cf                   ##用户邮箱位置查询

host  =  localhost                                          ##数据库所在主机                                               
user  =  postuser                                          ##登陆数据库的用户
password  =  postuser                                 ##登陆数据库的密码
dbname  =  email                                          ##postfix要查询的名称
table  =  emailuser                                        ##postfix要查询的表的名称
select_field  =  maildir                                  ##postfix要查询的邮箱
where_field  =  username                            ##用户给定postfix的查询条件


postmap  -q  "abc@abc.com"  mysql:/etc/postfix/mailuser.cf

abc@abc.com


postmap  -q  "abc@abc.com"  mysql:/etc/postfix/maildomain.cf

abc.com


postmap  -q  "abc@abc.com"  mysql:/etc/postfix/mailbox.cf

/mnt/abc.com/abc


配置postfix

groupadd  -g  888  vmail 

useradd  -s  /sbin/nologin  -u  888  vmail   -g  888


postconf -e ""virtual_mailbox_base  =  /home/vmail"                               ##设定虚拟用户的邮件目录

postconf -e ""virtual_uid_maps  =  static:888"                                           ##虚拟机用户建立文件的uid

postconf -e ""virtual_gid_maps  =  static:888"                                           ##虚拟机用户建立文件的gid
postconf -e ""virtual_alias_maps  =  mysql:/etc/postfix/mailuser.cf"
postconf -e ""virtual_mailbox_domain  =   mysql:/etc/postfix/maildomain.cf"

postconf -e ""virtual_mailbox_maps  =   mysql:/etc/postfix/mailbox.cf"


systemctl  restart postfix                                                                                                                                 ##重启服务


原创粉丝点击