policy添加黑白名单

12 年 ago jony policy添加黑白名单已关闭评论
iredmail相关的黑白名单操作是由policy提供的服务。且policy相关的具体内容由数据库保存。相关的是mysql中的policyd数据库的各个表构成。
1, 直接web方式可以打开https://mail.xxx.com.cn/phpmyadmin/     #xxx是你的域名
2,参考zhb说的地址,有一段:
DNS name whitelisting
    INSERT INTO whitelist_dnsname (_whitelist,_description) \
      VALUES ('%.mweb.co.za','# whitelist *.mweb.co.za');
我的理解意思就是将 mweb.co.za这个域列为白名单
直接在https://mail.xxx.com.cn/phpmyadmin/打开的数据库页面,点击选择右边的“policy(16)”数据库-->“whitelist_dnsname”表,然后 点击上面一排的“SQL”,直接在空白处输入SQL语句,插入你想列为白名单的域名,如上:
INSERT INTO whitelist_dnsname (_whitelist,_description) VALUES ('%.mweb.co.za','# whitelist *.mweb.co.za')
如:
INSERT INTO whitelist_dnsname (_whitelist,_description) VALUES ('*.baidu.com','# whitelist *.baidu.com')
然后点击“执行“
说明:如果报错,多半是你在语句末尾加了";",然后嘛,就自己测试咯!
加了一条黑名单,可以用IP的
INSERT INTO blacklist_helo (_helo) VALUES ('221.175.25.1**')
 
policy数据库添加黑白名单的具体数据库操作:
需要为 policyd 设置一个 crontabs 任务,用于清除过期的数据。 这样可以保持数据库条目尽可能的少,查询速度更快一些:
# crontab -e -u policyd
0 * * * * /usr/sbin/policyd-cleanup -c /etc/policyd.conf如何添加黑名单
mysql> USE policyd;
# 单个主机
mysql> INSERT INTO blacklist (_blacklist) VALUES ('192.168.0.1');
# 整个网段。用 '%' 表示
mysql> INSERT INTO blacklist (_blacklist) VALUES ('192.168.0.%');
mysql> INSERT INTO blacklist (_blacklist) VALUES ('192.168.%.%');
# 将单个用户列入黑名单
mysql> INSERT INTO blacklist_sender (_blacklist,_description)
        VALUES ('camis@mweb.co.za','# blacklist single address');
# 将整个域列入黑名单。
# 注意: @domain.ltd 并不会将它的子域名也列入黑名单,例如: @sub.domain.ltd。
mysql> INSERT INTO blacklist_sender (_blacklist,_description)
        VALUES ('@mweb.co.za','# blacklist entire domain');Recipient Throttle
收件控制。
每次 Postfix 收到一封外部 MTA 发来的邮件,policyd 都会在 policyd.throttle_rcpt 表里生成或更新对应的记录,例如:
rcpt  count_max  count_cur  date  time_limit  count_tot  abuse_cur  abuse_tot  log_warn  log_panic
www@example.com  3  3  1216362410  3600  1  1  0  0  0
注意这里的 'count_max' 字段,它就是用于限制邮件的数量的,表示这个用户 在指定的时间段里,最多能接收多少封邮件。超过限制的邮件,将以 5xx 的 错误代码拒绝对方。
count_max:最多能接收的邮件数量;
count_cur:当前已经接收了多少封邮件;
time_limit:表示时间周期,以秒为单位。3600s => 1h。
RCPT ACL
针对单个用户的收件限制
iRedMail 中使用的 policyd-1.82 加了一个补丁:rcpt_acl.patch。 打了补丁之后,可以在 policyd 里针对收件的单个域,单个用户(Per-User)做限制。
例如,不允许所有 hotmail.com 的用户给本域的 'www@a.cn' 发邮件,但是允许 www@hotmail.com 这个用户。可以这样实现:
开启 RCPT ACL 功能,并重启 policyd 服务:
#
# Part of file: /etc/policyd.conf
#
RCPT_ACL=1在 SQL 表中加入这两个限制:
mysql> USE policyd;
# rcpt_acl 表结构
mysql> desc rcpt_acl;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| _sender   | char(60)         | NO   | PRI |         |       |
| _rcpt     | char(60)         | NO   | PRI |         |       |
| _wblist   | char(60)         | NO   |     |         |       |
| _priority | int(10) unsigned | NO   |     | 0       |       |
+-----------+------------------+------+-----+---------+-------+
# 限制整个域。
# 注意:表示整个域需要加 '@' 符号。如:'@domain.ltd'。
mysql> INSERT INTO rcpt_acl (_sender, _rcpt, _wblist, _priority) VALUES ('@hotmail.com', 'www@a.cn', 'b', 0);
# 允许单个用户
mysql> INSERT INTO rcpt_acl (_sender, _rcpt, _wblist, _priority) VALUES ('www@hotmail.com', 'www@a.cn', 'w', 10);这里的 wblist 字段表示是 whitelist 还是 blacklist,分别用 w, b 来表示。
这里的 priority 字段表示优先级。数字越高,表示优先级别越高。
Spamtrap
spamtrap,是 Policyd 里设计的钓鱼机制。它的设计是基于这样一个简单的原理:
如果您从未公布过某个邮件地址,例如,admin@domain.ltd,并且您和您的 同事从未告知客户发送邮件到这个地址,或者 admin@ 这个邮件地址根本就不 存在,但是对方还是尝试将邮件投递到 admin@,那么对方有 99.9999% 的 可能是垃圾邮件发送者。
目前有大量的垃圾邮件都是猜测和遍历的方式,将常用的用户名来作为收件人, 例如:admin@, postmaster@, administrator@, hr@, job@, zhaopin@, chengdu@, anhui@, guangzhou@ 等,然后尝试将广告、垃圾邮件发送到您的邮箱。
在 Policyd v1 中的 spamtrap 机制,会将这样的发送人的 IP 地址直接放入黑名单中, 默认要 7 天后这个黑名单才会过期。
实现方法:
在 policyd 数据库的 spamtrap 表中插入这个鱼饵的信息:
# mysql -uroot -p
mysql> USE policyd;
mysql> INSERT INTO spamtrap (_rcpt, _active) VALUES ('admin@example.com', 1);在 Policyd 的配置文件(/etc/policyd.conf)里再次确认是否开启了 Spamtrap 功能:
#
# Part of file: /etc/policyd.conf
#
SPAMTRAPPING=1如果没有启用,需要将 SPAMTRAPPING 的值设置为 ‘1’,然后重启 policyd 服务。如果已经启用,则不需要重启 policyd。
为了便于调试,可以在 /etc/policyd.conf 中将 spamtrap 的拒信信息修改一下:
#
# Part of file: /etc/policyd.conf
#
SPAMTRAP_REJECTION='Spamtrap, go away.'然后在 Postfix 的日志文件 /var/log/maillog 中跟踪是否出现类似的信息:
Jul  9 16:06:49 mailServer policyd: rcpt=4, spamtrap=new, host=209.85.142.184 (unknown),
    from=xxx@gmail.com, to=admin@example.com, size=0, expire=1216195609假如出现了这样的信息,再检查一下数据库 policyd 中的 blacklist 表是否多了一条记录。如果确实增加了,那说明这个功能已经正常工作了。