分类目录归档:邮件系统

postfix 2.10+ 邮件转发问题

最近发邮件一直有这个错误

Apr 12 18:59:04 ZaphodBeeblebrox postfix/smtpd[10669]: NOQUEUE: reject: RCPT from mail.elmarotter.eu[83.161.154.53]: 554 5.7.1 : Relay access denied; from= to= proto=ESMTP helo=<[192.168.0.16]>

后来查看了不少文档, 发现是postfix 升级到 2.10.0的问题,

2.10的release中增加了

smtpd_relay_restrictions

* COMPATIBILITY: adding smtpd_relay_restrictions to main.cf
* to prevent inbound mail from unexpectedly bouncing.
* Specify an empty smtpd_relay_restrictions value to keep using
* smtpd_recipient_restrictions as before.

在/etc/postfix/main.cnf中加上

smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
就能解决这个问题。

maildir(野麦风)邮件中继-反垃圾邮件模板使用说明

野麦风邮件中继有八大反垃圾模块,为什么要使用反垃圾邮件模块呢?因为当你使用中继的时候,很多国外的垃圾邮件会通过中继发到你的垃圾邮箱里,这样中继变成了一个垃圾邮件转发站。

1、在域名列表里,点击你要设置的域名

7

进入域名后可以看到如下的界面。

10

我们来一一介绍一下这些模块,打上勾说明你正使用这些模块,如果不打勾,说明你不用。

1、ratelimit  [频率控制]可以控制别人给你发邮件的速度,从而有效保护服务器不受攻击。设置方法

11

2、senderctrl [发邮件管制]   禁止内部用户向外发邮件,设置地址

12

假定上面设置fy@maildir.cc 禁止向外面发邮件时,fy 只能发邮件给本域名的用户,如果你想fy 除了发邮件给本地用户,还可以发邮件给特定的人,比如客户,那么可以这样设置。

13

3、recipientctrl [本域收件人控制]

本域收件人控制指本域名用户控制接收邮件,本功能有三部分:
1、邮件人白名单,指的是只要给这个人发邮件都会接收,直接跳过防火墙,不理会垃圾邮件等。
2、收件人黑名单,指的是,只要发给本域名内这个列表中的用户都会被拒绝。
3、本域名例外情况,当你使用了黑名单,向这个用户发的任何邮件都会被拒绝(包括本域名)你可以通过例外名单,让黑名单里的用户可以接收指定域名或指定用户的邮件。

14

禁止收到外部邮件

15

4、localctrl [外域发件人控制]

[发件人控制]发件人控制=本地白名单+本地黑名单,主要是针对发件人的黑白名单,可以接受域名,IP,网段(CIDR格式)。
1、白名单,在白名单的邮箱地址、域名、IP段、机器名字向你发邮件时将会直接通过服务器。
2、黑名单,与白名单相同,在黑名单中的邮件地址,域名,IP及IP段向你发邮件时,将会拒收。
注意:不建议将公共邮箱域名加入黑白名单中,如163.com,qq.com 等

白/黑名单支持以下格式

16

以下四个模块没有设置的地方

17

dnswl  使用的是 list.dnswl.org

rbl 使用的服务器是bl.spamcop.net,zen.spamhaus.org

maildir(野麦风)邮件中继系统使用说明

maildir邮件转发系统,方便易用,在国外有众多的转发服务器,能长期提供稳定的服务,而且作者有着10多年的从业经验,下面我们图片说明一下使用过程

1、首先我们要注册一个帐户,注册地址是 http://www.maildir.cn/register

1

点击注册后,我们打开邮箱会收到一封邮件

2

点击邮件内的链接就可以激活你的邮件地址进行登录了。如果你没有收到邮件,到垃圾邮箱看看,可能跑到垃圾邮箱去了。

3

2、添加一个域名

4

添加域名成功后,必须验证域名才可以生效使用。

5

Maildir验证域名的方法很简单,maildir 有下面几台服务器,只需要把其中一台添加到备用MX记录就可以了。(备用Mx解释— 就是MX记录比原来的大,比如以前MX级别是5 那么你添加一个10的MX,就会变成备用mx了)

服务器地址:

gw.maildir.cn (带dns轮询的)

gwhk.maildir.cn (香港转发服务器)

gwjp.maildir.cn  (日本转发服务器)

gwus.maildir.cn (美国转发服务器)

以上服务器,一般情况下,我们只需要添加第一个就可以了,即gw.maildir.cn

6

看看,我原先级别是5 的,我现在添加一条为级别为10的,邮件会按mx记录优先级,数字越小会优先收到,如果这个服务器不通的时候,会偿试下一个服务器。举例:当你的国外客户向你发邮件的时候,会先发给这个域mx级别小的服务器,假定你的服务器在国内,那么会先与你国内的服务器通迅,当你国内的Ip连接不上或者收邮件服务器出错的时候,发信服务器就会偿试我们国外的邮件服务器,当我们服务器收到你的邮件时,会跟据你服务器IP,转到们你们服务器上面。这样就可以保证你的邮件100%到达了。

当你添加完上面的记录时,我们进maildir后台,点击验证,如果验证还没有通过,可能是因为dns还没有生效,等一会再试试。

4、配置域名信息

点击下面任意一个红圈的地方,进入域名配置状态 7

进入域名后,我们第一步先配置这个域名服务器Ip

8

下面是添加服务器IP 的界面,服务器支持不同收邮件的端口,某些ISP可能会封掉25端口,这样的话,你可以用不同的端口来收邮件。

在这里有一个技巧,如果你服务器有多个IP,那么一定要将所有发邮件服务器的IP添加上来,否则可能发邮件时会不通过。另外如果你的服务器收邮件和发邮件IP是不一样的,那么收邮件的IP要添加在第一条记录。

9

到此为止,你服务器就可以正常收到国外或国内有问题服务器的邮件了。

debian+postfix+dovecot 建立一个小型虚拟域邮件系统

如果你的公司只有几号人或到十多号人,或者你的邮件只是建立在vps 上面,或者你只是希望拥有一个小型的邮件系统,那么本文将教你以最快的速度建一个小型邮件系统满足公司日常需要。

假定我的域名是maildir.cn,我已经设置好了mx记录,那么我们将开始这个奇妙的旅程。

1、安装postfix,安装时选择 移除 exaim 和选择”internet site “

aptitude install postfix

修改/etc/postfix/main.cf ,更改下面的参数为

myhostname = mail.maildir.cn #实际的hostname
mydestination =  mail.maildir.cc, localhost.maildir.cc, localhost  #要去除虚拟域名的域名

增加下面内容

virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
#smtpd_tls_auth_only = yes

virtual_mailbox_domains = /etc/postfix/virtual_mailbox_domains

创建/etc/postfix/virtual_mailbox_domains 添加下面的内容

maildir.cn  OK

生成db文件,注意每次修改这个文件都需要执行一次

shell# postmap /etc/postfix/virtual_mailbox_domains

修改 /etc/postfix/master.cf 找到下面的行,去掉注释

submission inet n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd

重启postfix

service postfix restart

2、安装dovecot

shell#apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd

修改 /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/var/mail/vhosts/%d/%n

创建邮件存储目录,执行下面命令

mkdir -p /var/mail/vhosts/maildir.cn
groupadd -g 5000 vmail
useradd -r -g vmail -u 5000 vmail -d /var/mail/vhosts -c "virtual mail user"
chown -R vmail:vmail /var/mail/vhosts/

修改/etc/dovecot/conf.d/10-master.conf,将下条目改为:

service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
        user = postfix
        group = postfix

  }
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
        user = postfix
        group = postfix
  }
}

修改 /etc/dovecot/conf.d/10-auth.conf ,找到下面行,去掉注释改为

disable_plaintext_auth = no
auth_mechanisms = plain login

找到最后几行,改为下面(去掉!include auth-passwdfile.conf.ext注释)

#!include auth-system.conf.ext
#!include auth-sql.conf.ext   
#!include auth-ldap.conf.ext
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

编辑/etc/dovecot/conf.d/auth-passwdfile.conf.ext,修改为

passdb {
  driver = passwd-file
	args = scheme=PLAIN username_format=%u /etc/dovecot/dovecot-users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/dovecot-users
}

创建用户文件/etc/dovecot/dovecot-users,输入下面的内容,以下为明文密码

#cat /etc/dovecot/dovecot-users
fy@maildir.cn:{PLAIN}abc123:5000:5000

重启dovecot

service dovecot restart

测试

发邮件

# sendmail fy@maildir.cn
test
.

日志

Sep 4 13:03:37 mail postfix/pickup[4876]: 0A70CA0F1: uid=0 from=<root>
Sep 4 13:03:37 mail postfix/cleanup[8923]: 0A70CA0F1: message-id=<20150904050337.0A70CA0F1@mail.maildir.cc>
Sep 4 13:03:37 mail postfix/qmgr[4877]: 0A70CA0F1: from=<root@mail.maildir.cccn>, size=255, nrcpt=1 (queue active)
Sep 4 13:03:37 mail dovecot: lmtp(8926): Connect from local
Sep 4 13:03:37 mail dovecot: lmtp(8926, fy@maildir.cn): cLPLCykm6VXeIgAA/cW88w: msgid=<20150904050337.0A70CA0F1@mail.maildir.cc>: saved mail to INBOX
Sep 4 13:03:37 mail postfix/lmtp[8925]: 0A70CA0F1: to=<fy@maildir.cn>, relay=mail.maildir.cc[private/dovecot-lmtp], delay=3.3, delays=2.9/0.02/0.02/0.4, dsn=2.0.0, status=sent (250 2.0.0 <fy@maildir.cn> cLPLCykm6VXeIgAA/cW88w Saved)
Sep 4 13:03:37 mail dovecot: lmtp(8926): Disconnect from local: Client quit (in reset)
Sep 4 13:03:37 mail postfix/qmgr[4877]: 0A70CA0F1: removed

收邮件

# telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user fy@maildir.cn
+OK
pass abc123
+OK Logged in.
list
1 479
.
quit
+OK Logging out.
Connection closed by foreign host.

一切正常

参考

http://wiki2.dovecot.org/HowTo/PostfixDovecotLMTP

https://help.ubuntu.com/community/PostfixVirtualMailBoxClamSmtpHowto

http://www.binarytides.com/install-postfix-dovecot-debian/

http://wiki2.dovecot.org/AuthDatabase/PasswdFile

http://wiki2.dovecot.org/Variables

2500万邮件地址,准确率90+%

某大型网站用户用来验证的邮件地址,准确率90+% 。

域名	=数量(万)
21cn.com	=43
126.com	=331
163.com	=917
gmail.com	=44
hotmail.com=	142
qq.com=	503
sina.com	=250
SHOU.com=120
tom.com	=60
vip.qq.com=	8
vip.163.com	=1.5
vip.sina.com	=5
	

有兴趣的请联系!

去掉Postfix烦人的fatal: bad string length 0 < 1: mysql_virtual_mailbox_maps.cf_dbname =

Postfix 邮件系统时不时出现下面的日志,重启一下就好了,真的头痛

Apr 14 19:09:03 root postfix/qmgr[3333]: 1791D394147F: removed
Apr 14 19:09:48 root postfix/smtpd[5207]: fatal: bad string length 0 < 1: mysql_virtual_mailbox_maps.cf_dbname =
Apr 14 19:09:49 root postfix/master[3314]: warning: process /usr/lib/postfix/smtpd pid 5207 exit status 1
Apr 14 19:09:49 root postfix/master[3314]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling

在网上找了很多资料,最后发现问题如下:

http://blog.chamara.info/2011/05/postfix-error-virtual-mailbox-base.html

解决办法 编辑master.cf文件,注释下面的行即可解决问题

#virtual unix – n n – – virtual

用postfix架设海外邮件转发服务器

第一步,先在本地服务器创建要转发的域名,在main.cf 里加入

transport_maps  = hash:/etc/postfix/relay_maps

在/etc/postfix/relay_maps 输入下面的内容

yiyou.org  smtp:relay.yiyou.org

#  其中,前面部分为要转发的域名,后面是要转到的服务器

执行

postmap /etc/postfix/relay_maps

生成db 文件,重启postfix

第二步,配置relay 服务器,只把postfix 关键部分贴上来

smtpd_recipient_restrictions = permit_mynetworks,  permit_sasl_authenticated,  reject_unauth_destination,  reject_unauth_pipelining,  reject_invalid_hostname

mynetworks = hash:/etc/postfix/network_table

其中/etc/postfix/network_table 内容如下

127.0.0.0/8 OK
111.111.11.11 OK

要防止转发邮件,邮件日志

发信服务器

Dec  8 11:37:22 mail postfix/smtp[26775]: 69B352F276E: to=<fy@yiyou.org>, relay=relay.yiyou.org[111.111.11.2111]:25, delay=1.1, delays=0.05/0/0.7/0.31, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 66892C8B2)

转发服务器

Dec 8 11:36:00 li408-244 postfix/smtpd[16806]: connect from mail.xxxxx.com[11.111.11.11]
Dec 8 11:36:00 li408-244 postfix/smtpd[16806]: 66892C8B2: client=mail.xxxxx.com[11.111.111.11]
Dec 8 11:36:00 li408-244 postfix/cleanup[16810]: 66892C8B2: message-id=<e73ba4d88a6b622d7ccf29a3fc6f174a@xxxx.com>
Dec 8 11:36:00 li408-244 postfix/qmgr[16774]: 66892C8B2: from=<fy@xxxxx.com>, size=925, nrcpt=1 (queue active)
Dec 8 11:36:00 li408-244 postfix/smtpd[16806]: disconnect from mail.xxxxx.com[11.115.111.11]
Dec 8 11:36:03 li408-244 postfix/smtp[16811]: 66892C8B2: to=<fy@yiyou.org>, relay=mxdomain.qq.com[183.60.62.12]:25, delay=2.8, delays=0.16/0.01/0.71/1.9, dsn=2.0.0, status=sent (250 Ok: queued as )
Dec 8 11:36:03 li408-244 postfix/qmgr[16774]: 66892C8B2: removed

用postfwd取代extmail 的slockd

用过sockd 的人都知道,slockd 并不是十分理想,白名单只能靠本地的,所以常常导至邮件不能正常接收,网上有很多postfix policy server,目前发现只有postfwd 十分强大,于是产生了用postfwd取代slockd 的想法,事实证明,postfwd 配置十分灵活,效果很理想,但是少了一个灰名单功能。

下面把我当前的配置文件展示一下:

# local white list //本地白名单,含机器名,IP,发件人
id=WL_001 ;action=OK ;client_name=file:/etc/postfwd/client_name_whitelist
id=WL_002 ;action=OK ;client_address=file:/etc/postfwd/client_address_whitelist
id=WL_003 ;action=OK ;sender=file:/etc/postfwd/sender_whitelist

# local back list //本地黑名单
id=BL_001 ;action=REJECT list on local client_name_backlist;client_name=file:/etc/postfwd/client_name_backlist
id=BL_002 ;action=REJECT list on local client_address_backlist;client_address=file:/etc/postfwd/client_address_backlist
id=BL_003 ;action=REJECT list on local sender_backlist ;sender=file:/etc/postfwd/sender_backlist

# limit rate  //未知发件地址,限制发邮件数量
id=RATE_001; client_name==unknown; action=rate(client_address/5/300/450 4.7.1 only 5 recipients per 5 minutes allowed)

# Check HELO and reverse DNS //对EHLO 和DNS 过滤,有效过虑大部分ADSL 地址
id=SET_HELO;helo_name=^(\[|[^.]+$|.*?[0-9.-]{8});action=set(HIT_helo=1)
id=SET_NODNS;client_name=^unknown$;action=set(HIT_nodns=1)
id=REJECT_HELO_NODNS;HIT_helo==1; HIT_nodns==1;action=REJECT Blocked - Suspicious HELO [$$helo_name] and missing reverse DNS [$$client_address]

# dns white list //使用下面两个DNS 白名单,国内外大部分邮件运营商都可以快速通过
id=DNSWL_01; rbl=list.dnswl.org/^127/43200; action=OK
id=DNSWL_02; rbl=cml.anti-spam.org.cn/^127/43200; action=OK

# DNS  RBL  //国内的RBL 具体看 www.anti-spam.org.cn
id=RBL_001;rbl=cblplus.anti-spam.org.cn;action=REJECT Blocked on cblplus.anti-spam.org.cn

# 外国DNS黑名单,只要匹配两个地址以上,就拒绝,其实匹配一个想弄成灰名单的,,后来没有搞。 
&&DNSBLS{
        rbl=zen.spamhaus.org
        rbl=bl.spamcop.net
        rbl=dnsbl.sorbs.net
}
id=RBL_002;&&DNSBLS;rblcount=all;action=set(HIT_rbls=$$rblcount,HIT_dtxt=$$dnsbltext)
id=RBL_003;HIT_rbls>=2;action=REJECT Blocked on Multiple DNSBLs [$$HIT_dtxt]

 

启动方法

./postfwd-1.35 -f postfwd.cf -u vuser -g vgroup -d

参考资料:http://hege.li/howto/spam/etc/postfwd/postfwd.conf

http://postfwd.org/

http://www.postfix.org/SMTPD_POLICY_README.html

另外对extman功能作了些扩展。

1