发布者认证信息(营业执照和身份证)未完善,请登录后完善信息登录
Postfix设置发件人地址,邮件地址改写(header)-亿华网
首页 » 资讯 » 编程开发 » LINUX > Postfix设置发件人地址,邮件地址改写(header)

Postfix设置发件人地址,邮件地址改写(header)

  发布时间 : 2017-05-25 10:38:11 140
内容提要
由于工作需要,需要改写用户邮件header头地址与邮件路由地址。整理笔录改写邮件地址是postfix的核心,在收到邮件后就会进行相应
由于工作需要,需要改写用户邮件header头地址与邮件路由地址。整理笔录
改写邮件地址是postfix的核心,在收到邮件后就会进行相应地址修改,地址补充等工作,其流程如下:以下来自postfix官网说明
Postfix address rewriting overview
 

 

trivial-
rewrite(8)

(std form)

 

trivial-
rewrite(8)

(resolve)

 

^
|

|
v

 

^
|

|
v

 

smtpd(8)

>-

cleanup(8)

->

incoming

->

active

->

qmgr(8)

-<

smtp(8)

qmqpd(8)

lmtp(8)

pickup(8)

local(8)

 

^
|

 

^
|

|
v

 
 

bounces
forwarding
notices

 

deferRED

     
 
 
由于工作只需要修改邮件header地址,着重只测试了canonical_maps,smtp_generic_maps,header_checke部分修改邮件头地址的方法
1.用header_checker检查头文件,用正则匹配替换发件人地址From
如将user01@test.com发件地址替换成user01@ct.com
Vim main.cf
添加如下开启头检查,使用的是pcre方式。
header_checks = pcre:/etc/postfix/my_header_checks
建立my_header_checks文件
/^From:(.*)[<]([\w\.\-]+)\@test\.com[>]/i     REPLACeFrom:$1<$2@ct.com>
记得每次修改完my_header_checks文件要重新加载postfix否则出现正则是对的,而匹配出的地址格式显示是错误的
Service postfix reload
以上方法只配置了From:部分,而To:部分如何写正则,真的不好写。
 
2.第二种方法则是postfix的smtp_generic_maps参数设置。类似于sendmail的地址伪装功能,可以将本地网域的邮件地址改写成internet上合法的邮件域名地址。smtp_generic_maps
只作用于外发的需要SMTP的邮件,本地域的内邮件收发,地址是不会修改的。smtp_generic_maps
如将user01@domain.local转换改写成user01@domain.com邮件网关网域地址
文件设置如下
配置postfix添加
Vim main.cf
smtp_generic_maps = hash:/etc/postfix/my_generic_maps
 
vim my_generic_maps
user01@domain.local   user01@domain.com
@localdomain.local     @hisisp.example
 
建立文件后需要postmap生产hash数据文件
postmap /etc/postfix/my_generic_maps
service postfix reload
 
该参数会修改掉邮件header的路由、From:、To:相关邮件地址信息
它作用范围,只会修改掉需要发送出去到别台邮件服务器的邮件地址相关信息,local邮件不影响。
 
3.还可以使用邮件地址规范改写参数canonical_maps实现邮件地址改写:
Canonical_maps的作用区域local与smtp所有邮件,可以用来规范邮件地址,
Firstname.Lastname 风格的地址以及清除无效的域。
缺省postfix是不进行规范地址改写的,你可以通过指定canonical_maps参数的值来使其生效。如: 
canonical_maps = hash:/etc/postfix/canonical 
 
Vim canonical
wyjos@test.com     jos.wang@test.com
@testmail.com @test.com
 
地址改写可以基于单个邮件地址,也可以基于整个域设定。
也可以分别为收件人和发件人地址分别指定不同的改写规范,这时参数sender_canonical_maps和recipient_canonical_maps的优先级比canonical_maps高。如: 
sender_canonical_maps = hash:/etc/postfix/sender_canonical  
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
 
注意:基于以上测试时我发现,用webmail发送的邮件,对方收到的邮件显示地址为改写后的地址(改写成功),但我用OUTLOOK2007发送的邮件对方收到的邮件显示地址并没有被改写。查看header头文件路由Delivered-To:路由信息已被修改但是From:与To:部分的地址没有被改。,
查阅postfix 官网有提到如下注意,而网上与postfix指南都没有这个说明,导致这个问题折腾了我很久。
NOTE: Postfix versions 2.2 and later rewrite message headers from remote SMTP clients only if the client matches the local_header_rewrite_clients parameter, or if the remote_header_rewrite_domain configuration parameter specifies a non-empty value. To get the behavior before Postfix 2.2, specify "local_header_rewrite_clients = static:all".
邮件地址改写作用范围是受local_header_rewrite_clients 设定控制的。默认只是改写
local_header_rewrite_clients (default: permit_inet_inte-ces)
permit_inet_inte-ces只作用于
append the domain name in $myorigin or $mydomain when the client IP address matches $inet_inte-ces. This is enabled by default.
我们可以自定义可以邮件地址改写的作用范围:

local_header_rewrite_clients = permit_mynetworks,

    permit_sasl_authenticated permit_tls_clientcerts

   check_address_map hash:/etc/postfix/pop-before-smtp 

我想任何符合canonical表的邮件无论谁发送的都改写,只需在main.cf添加上,就可以了。
local_header_rewrite_clients = static:all

layui

微信扫码关注 亿华联众 公众号