Showing posts with label Mailserver. Show all posts
Showing posts with label Mailserver. Show all posts

postgrey的安装与设置

安装环境Ubuntu
在Ubuntu下安装Postgrey非常方便,只要apt-get install postgrey。然后就是自己的设置。
首先,修改Postfix的设置,编辑/etc/postfix/main.cf,加入以下代码:

smtpd_client_restrictions = reject_rbl_client relays.ordb.org, reject_rbl_client bl.spamcop.net
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000


通常我们希望给经常有邮件来往的客户开放绿色通道,那么,我们开启Postgrey的白名单 。修改
/etc/default/postgrey文件,将原来的
POSTGREY_OPTS="--inet=127.0.0.1:60000"
改为:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --auto-whitelist-clients=1"
然后,重新启动Postgrey和Postfix
/etc/init.d/postgrey restart
/etc/init.d/postfix restart


根据文档,白名单的开启,默认就是1,所以如果我们仅仅是要开启白名单的话,postgrey文件可以不作修改。白名单位于/etc/postgrey下面,
whitelist_clients 针对寄信的Server或者是domain name
whitelist_recipients 是指机器上这些受件人不受postgrey限制。
... Read more!

Postfix配置文件main.cf中常用参数介绍

1,外发域配置
参数:
myorigin

说明:
myorigin参数用于指定该服务器使用哪个域名来外发邮件。
缺省的情况下myorigin采用本机主机名称(与参数myhostname相同)。

建议:在很小的网络中,采用缺省配置。而在Internet中,我们建议你保持myorigin与mydomain参数相同。也就是说采用该服务器所在的域名称。

  例如:

  myorigin = $myhostname (缺省)
  myorigin = $mydomain (推荐)
2,接收域配置
参数:
mydestination

说明:
用于指定该服务器的使用哪个域名来接收邮件。
我们建议,系统安装好后,尽量不要改动这个参数。

例如:
缺省设置:
  mydestination = $myhostname localhost.$mydomain

广泛设置:
  mydestination = $myhostname localhost.$mydomain $mydomain

多DNS设置:
  mydestination = $myhostname localhost.$mydomain www.$mydomain ftp://ftp.$mydomain/">ftp.$mydomain

3,转发限定
参数:
mynetworks
relay_domains
mydestination

说明:
转发限定在邮件系统中非常重要。C-Link为客户缺省配置了最安全的转发限定参数。
与转发限定的参数有很多:主要请参看mynetworks、relay_domains、mydestination。

4,系统故障报告配置
参数:
notify_classes

说明:
该参数用于告知系统,在哪种情况下用哪种方式通知用户。

可以选择的参数类型有:

  bounce 邮件原封不动弹回;
  2bounce 将双份弹回邮件发送给Postmaster;
  delay 将拖延的邮件的头部信息通知Postmaster;
  policy 将被系统过滤掉的信息通知Postmaster;
  protocol 将协议错误信息通知Postmaster;
  resource 将因系统资源短缺而投递失败的信息通知Postmaster;
  software 将因软错误而投递失败的信息通知Postmaster.

  例如:
  缺省:
  notify_classes = resource, software

5,主机名配置
参数:
myhostname

说明:
  myhostname参数用于描述运行C-Link系统的服务器所符合规则的域名全称。在许多UNIX系统中,C-Link会自动检测出正确的名称。但在某些操作系统中需要手工配置,如TurboLinux。

  例如:

  myhostname = host.local.domain (local hostname is not FQDN)
  myhostname = host.virtual.domain (virtual interface)
  myhostname = virtual.domain (virtual interface)

6,原始域配置
参数:
mydomain

说明:
系统自己检测。暂不开放。

7,系统内部网络子网配置
参数:
mynetworks_stype
mynetworks

说明:
  mynetworks_stype用于设定邮件系统内部子网的限制情况。通常情况下设定为subnet。在单机情况下设置为host.
  设定的子网内部,邮件可以开放式转发。这对于配置邮件集群很有作用。但要小心使用,防止将邮件系统设置为OPEN RELAY。

  例如:
  mynetworks_style = subnet
  mynetworks_style = host
  mynetworks = 168.100.189.0/28, 127.0.0.0/8

8,系统内部网络地址配置
参数:
net_interfaces

说明:
  inet_interfaces用于指定特定的网络地址。
  系统保留,暂不开放。

  例如:
  inet_interfaces = all
  inet_interfaces = virtual.host.name (virtual domain)
  inet_interfaces = $myhostname localhost.$mydomain (non-virtual mailer)

9,进程限制
参数:
default_process_limit

说明:
  用于限定SMTP服务的最大同时连接数量。缺省为50。根据服务器配置及操作系统的不同,可以做非常宽限的配置。

  例如:
  default_process_limit = 1024

10,本地同时同址分发限制
参数:
local_destination_concurrency_limit

说明:
  系统保留,暂不开放。

  例如:
  local_destination_concurrency_limit = 2

11,缺省同时同址分发限制
参数:
default_destination_concurrency_limit

说明:
  系统保留,暂不开放。

  例如:
  default_destination_concurrency_limit = 10

12,队列重发周期
参数:
queue_run_delay

说明:
  用于设定队列处理程序对拖延邮件的扫描周期。
  缺省为1000秒。
  例如:
  queue_run_delay = 1000

13,最长队列生命期
参数:
maximal_queue_lifetime

说明:
  用于设定队列处理程序对滞留邮件的最长保存期。
  缺省为5天。

  例如:
  maximal_queue_lifetime = 5

14,最小投递失败周期
参数:
minimal_backoff_time

说明:
  用于设定队列处理程序对无法投递的邮件的最短巡回时间。
  缺省为1000秒。

  例如:
  minimal_backoff_time= 1000

15,最长投递失败周期
参数:
maximal_backoff_time

说明:
  用于设定队列处理程序对无法投递的邮件的最长巡回时间。
  缺省为4000秒。

  例如:
  maximal_backoff_time= 4000

16,错误命令缓冲时间
参数:
smtpd_error_sleep_time

说明:
  当SMTP服务端口接收到非法的命令时,系统将缓冲处理的时间间隔。
  这个参数对于防止恶意攻击非常有效。

  例如:
  smtpd_error_sleep_time = 5
  smtpd_error_sleep_time =0

17,软错误容忍次数
参数:
  smtpd_soft_error_limit

  说明:
  SMTP服务所允许的软错误次数。这个参数对于防止恶意攻击非常有效。
  缺省10次。

  例如:
  smtp_soft_error_limit = 5

18,硬错误容忍次数
参数:
  smtpd_hard_error_limit

  说明:
  SMTP服务所允许的硬错误次数。这个参数对于防止恶意攻击非常有效。
  缺省100次。

  例如:
  smtp_hard_error_limit = 100

19,邮件头部过滤
  参数:
  header_checks

  说明:
  用于过滤邮件的头部信息。

  例如:
  header_checks = regexp:/wdpost/filter/header_checks
  文件header_checks内容遵循完全的regexp强大的字符串语法匹配规则。
  如,/^to: *friend@public\.com$/ REJECT

20,SMTP连接控制过滤
  参数:
  smtpd_client_restrictions

  说明:
  smtpd_client_restrictions 参数的功能非常强大。它可以对连接到C-Link邮件服务器的各种客户端以及其他服务器进行限制。
  该参数有以下的选项可以灵活配置设定。
  reject_unknown_client 拒绝不能IP反向解析的地址;
  permit_mynetworks 允许子网中的连接;
  check_client_access maptype:mapname 检测在mapname文件中设定的规则;
  reject_maps_rbl拒绝符合rbl行为条件的连接。
  reject_unauth_pipelining 拒绝为认证的管道连接。
  缺省状态下,该参数不做设定。

  例如:
  smtpd_client_restrictions =

21,HELO握手要求控制过滤
  参数:
  smtpd_helo_required

  说明:
  设定C-Link邮件系统是否在SMTP连接时必须进行HELO或EHLO握手。
  缺省为不需要。

  例如:
  smtpd_helo_required = no

22,HELO握手主机控制过滤
  参数:
  smtpd_helo_restrictions

  说明:
  当HELO握手必须时。该参数用于验证握手信息是否符合要求。

  可以选择的参数有:
  reject_invalid_hostname 拒绝错误的hostname。
  permit_naked_ip_address 拒绝裸IP地址。
  reject_unknown_hostname 拒绝为被DNS A或MX纪录指定的域名。
  reject_non_fqdn_hostname 拒绝不符合域名规则的域名。
  check_helo_access maptype:mapname 根据mapname中设定的信息限制。

23,RFC821类型信封地址控制过滤
  参数:
  strict_rfc821_envelopes

  说明:
  设定C-Link系统是否必须只接受符合RFC821所定义的负荷规则的邮件地址。  
  缺省为no.

  例如:
  strict_rfc821_envelopes = yes

24,发信人地址限定过滤
  参数:
  smtpd_sender_restrictions =

  说明:
  设定发信人地址必须符合的规则。确实为任意。
  可以设定为以下参数:
  reject_unknown_sender_domain 拒绝为没有DNS A或MX纪录的发信人域名。
  check_sender_access maptype:mapname 根据mapname文件中的规则设定。
  reject_non_fqdn_sender 拒绝不符合规则的发信人地址。

25,收信人地址限定过滤
  参数:
  smtpd_recipient_restrictions

  说明:
  设定特殊的发信人地址参数限制。
  可以选择的参数有:
  check_relay_domains 检测转发域。
  permit_auth_destination 允许经过认证的目的地。
  reject_unauth_destination 拒绝为经过认证的目的地。
  permit_mx_backup 允许反查询MX主机名称。
  check_recipient_access maptype:mapname 根据mapname文件中设定的规则限制。
  reject_unknown_recipient_domain 拒绝转发到没有DNS A或MX纪录的域名。
  reject_non_fqdn_recipient 拒绝不符合规则的转发目标。
  reject_unknown_sender_domain 拒绝没有IP反解析纪录的发件人域名。
  ETRN命令限定过滤
  系统保留,不开放。

26,反垃圾邮件组织过滤
  参数:
  maps_rbl_domains

  说明:
  这是一个非常有特色的反垃圾邮件功能。这个参数通常设定为
  maps_rbl_domains = blackholes.mail-abuse.org

  如果RBL lookup打开,系统回自动与全球著名的反垃圾邮件组织mail-abuse进行同步。组织来自mail-abuse所列举的不安全的电子邮件服务器。

  在缺省状态下这个功能是关闭的。

27,SMTP对话行长度限定过滤
  参数:
  line_length_limit

  说明:
  设定SMTP所接受的最长字符行的长度。
  缺省为2048字节。

28,邮件头部长度限定过滤
  参数:
  header_size_limit
  
  说明:
  设定SMTP所接受的最长邮件头部信息的长度。
  缺省为102400字节

29,收件人数量限定过滤
  参数:
  extract_recipient_limit

  说明:
  限制扩展的收件人数量限制。这通常用于防止采用"sendmail -t"的方式来进行的攻击行为。

30,邮件长度限定过滤
  参数:
  message_size_limit

  说明:
  这个参数很重要。用于限定系统所接受的最大的单封邮件长度。
  缺省为10240000 字节。

  例如:
  message_size_limit = 20480000

31,弹回邮件长度过滤
  参数:
  bounce_size_limit

  说明:
  这个参数非常重要,用于设定弹回的最大邮件尺寸。
  缺省为50000 字节。
... Read more!

amavis的白名单

我现在使用amavis-new加ClamAV加SpamAssassin来抵御垃圾邮件以及病毒邮件,但是不知道为何,SpamAssassin总会将我的一些工作邮件识别为垃圾邮件,估计没有好好学习的缘故,而我的默认规则是BOUNCE掉Spam邮件的,这样一来,搞得很多有用的邮件被Reject。没办法,在没有搞明白学习规则之前,还是启用白名单吧。
直接在Amavis中设定,这些设定将覆盖SpamAssassin的设定,Ubuntu中Amavis的设定文件全部位于/etc/amavis/conf.d目录下面,直接在50-user文件中进行修改,首先启动White List
$sa_auto_whitelist = 1; # turn on AWL (default: false)

下面设定白名单的位置,注意,这些指定的文件必须存在,否则Amavis将无法启动,而且,注意这些文件的权限,Amavis必须要能够访问到。
# 指定白名单
read_hash(\%whitelist_sender, '/var/lib/amavis/whitelist');
# 指定黑名单
read_hash(\%blacklist_sender, '/var/lib/amavis/blacklist');
# 若收件人位于此列表中,则不进行垃圾邮件检测
read_hash(\%spam_lovers, '/var/lib/amavis/spam_lovers');

下面还可以指定一些特定的规则,比如,超过特定大小的邮件可以不经过SpamAssassin的扫描
$sa_mail_body_size_limit = 150*1024; # don't waste time on SA is mail is larger
# (less than 1% of spam is > 64k)
# default: undef, no limitations

# 下面是设定一些评分规则
# 超过这个值,就在邮件头信息中加入Spam信息
$sa_tag_level_deflt = 4.0; # add spam info headers if at, or above that level
# 超过这个标准,则直接被视为垃圾邮件
$sa_tag2_level_deflt = 6.3; # add 'spam detected' headers at that level
# 超过这个标准,则将邮件备份后删除
$sa_kill_level_deflt = 10 ; # triggers spam evasive actions
# at or above that level: bounce/reject/drop,
# quarantine, and adding mail address extension

# 下面是开启调试信息
# Turn on SpamAssassin debugging (output to STDERR, use with 'amavisd debug')
$sa_debug = 1; # defaults to false

然后重新启动amavis即可
... Read more!

Postfix常用维护命令

Ubuntu中Postfix常用工具一般位于/usr/sbin 目录下面
#postqueue -p 显示邮件队列中的邮件,也可以使用可以使用mailq命令。
执行postqueue -q 会得到如下的输出
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
DBA3F1A9 553 Mon May 5 14:42:15 kdent@example.com
(connect to mail.ora.com[192.168.155.63]: Connection refused) kdent@ora.com

最Super的命令:postsuper
#postsuper -d 将某一封queue message 删除,后面直接跟QueueID,比如:
#postsuper -d DBA3F1A9

删除所有的queue
#postsuper -d ALL

#postsuper -sv 检查和修复postfix的邮件

显示指定的Message
# postcat -q DBA3F1A9
... Read more!

使用Greylisting机制来阻挡垃圾邮件

Greylisting的原理:
1,此机制是利用SMTP(SMTP RFC)回传一个ERROR CODE 450的技巧来判断对方是否为垃圾邮件,或者是正常的MTA。当mail server收到一封未知发信者(根据IP)寄来的邮件,mail server会退回此邮件,并且标注上“try angain later”,正常的MTA,在看到这个“try again later”时,会重新发送此邮件。但是一般的垃圾邮件服务器不会理会,而会放弃重新发送。
2,目前的大部分垃圾邮件服务器还没有Greylisting。此机制的优点在于误判率低,效率高,坏处就是邮件会延迟。当然邮件延迟的范围是在mail server首次看到由“未知”IP寄来的邮件时会做这样的处理。对方邮件服务器重送的时间依据对方服务器的设置。
3,如果是属于经常会有邮件来往的IP,则会进入whitelist,直接allow。

在Postfix上的实现是Postgrey,目前Jclips.com邮局也使用了此功能。
在第一次接收某个IP的邮件的时候,我们从maillog中可以看到类似于下面的日志:
。。。。 Recipient address rejected: Greylisted。。。。
就代表Postgrey已经开始工作了。
... Read more!

一起courier-authdaemon认证失败问题的初步解决

最近在设置courier认证,但是发现站内投递邮件老是失败,一直报下面的错误。
ERR: authdaemon: s_connect() failed: Permission denied

在su权限下,使用authtest完全没有问题,但是使用maildrop的用户也提示上面的失败信息。google了一下,很多人建议修改 /var/run/courier/authdaemon 的权限,一般建议改为755,但是我改了一下还是不行。最后想,让authdaemon以我的maildrop的身份运行尝试一下,修改/etc/init.d/courier-authdaemon运行脚本,在chown的地方改成maildrop的用户和组,将chmod的地方由750改为755,然后重新启动此daemon,运行成功。
... Read more!