1 最后由 liuzhiqing518 (2013-10-24 17:21:01) 编辑

主题: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:iRedMail-0.8.5
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):mysql
- 使用的 Linux/BSD 发行版名称及版本号:centos 6.4
- 与您的问题相关的日志信息:
====
现在iredmail已经部署好,但公司要求,只能收发本域的邮件,不能让邮件系统和外域通信,也就是说,不能让我们公司的邮箱给126,129,163,QQ等邮箱发送邮件。但是可以收他们给我们发的邮件!!!我要如何修改postfix呢?在网上找了很多资料,但是都没法实现...例如:http://blog.chinaunix.net/uid-10449864-id-2956888.html

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

在英文论坛里有过详细的解释(需翻墙):
http://www.iredmail.org/forum/topic5325 … users.html

如果无法翻墙,这里说明一下:

iRedAPD 带有插件 sql_user_restrictions 可以实现你要的功能。你要做的就是启用这个插件,再为这些要限制的用户添加适当的限制条件。

*) 在 /opt/iredapd/settings.py 里启用 sql_user_restrictions 插件,然后重启 iRedAPD 服务。
*) 如果你要为用户 user@example.com (example.com 是你自己的域名)做这样的限制,可以通过以下的 SQL 命令实现你要的效果:

mysql> USE vmail;
mysql> UPDATE mailbox SET allowedsenders='@example.com', rejectedsenders='@.', allowedrecipients='@example.com', rejectedrecipients='@.' WHERE username='user@example.com';

上面这个 SQL 命令的意思是:

- 拒收所有发件人发给 user@example.com 的邮件(rejectedsenders='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedsenders='@example.com')
- 禁止 user@example.com 发邮件给任何人(rejectedrecipients='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedrecipients='@example.com')

注意:

- 这里表示“所有人”的用 '@.' (一个 @ 符号加一个英文句点)表示。
- iRedAPD 会优先处理 allowedsenders 和 allowedrecipients,再处理 rejectedsenders 和 rejectedrecipients。

另外要注意的是,iRedMail-0.8.5 里带的 iRedAPD 版本有一个 bug,需要你自行下载修正后的 sql_user_restrictions 插件覆盖原文件(/opt/iredapd/plugins/sql_user_restrictions.py),再重启 iRedAPD 服务。

# cd /tmp/
# wget https://bitbucket.org/zhb/iredapd/raw/312521c215c3d3bb057fdd5adcaa475a267461ad/plugins/sql_user_restrictions.py
# cp /tmp/sql_user_restrictions.py /opt/iredapd/plugins/
# /etc/init.d/iredapd restart

3 最后由 james_tu (2013-10-25 09:37:02) 编辑

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

ZhangHuangbin 写道:

在英文论坛里有过详细的解释(需翻墙):
http://www.iredmail.org/forum/topic5325 … users.html

如果无法翻墙,这里说明一下:

iRedAPD 带有插件 sql_user_restrictions 可以实现你要的功能。你要做的就是启用这个插件,再为这些要限制的用户添加适当的限制条件。

*) 在 /opt/iredapd/settings.py 里启用 sql_user_restrictions 插件,然后重启 iRedAPD 服务。

张工,如何在 /opt/iredapd/settings.py 里启用 sql_user_restrictions 插件???

*) 如果你要为用户 user@example.com (example.com 是你自己的域名)做这样的限制,可以通过以下的 SQL 命令实现你要的效果:

mysql> USE vmail;
mysql> UPDATE mailbox SET allowedsenders='@example.com', rejectedsenders='@.', allowedrecipients='@example.com', rejectedrecipients='@.' WHERE username='user@example.com';

上面这个 SQL 命令的意思是:

- 拒收所有发件人发给 user@example.com 的邮件(rejectedsenders='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedsenders='@example.com')
- 禁止 user@example.com 发邮件给任何人(rejectedrecipients='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedrecipients='@example.com')

注意:

- 这里表示“所有人”的用 '@.' (一个 @ 符号加一个英文句点)表示。
- iRedAPD 会优先处理 allowedsenders 和 allowedrecipients,再处理 rejectedsenders 和 rejectedrecipients。

另外要注意的是,iRedMail-0.8.5 里带的 iRedAPD 版本有一个 bug,需要你自行下载修正后的 sql_user_restrictions 插件覆盖原文件(/opt/iredapd/plugins/sql_user_restrictions.py),再重启 iRedAPD 服务。

# cd /tmp/
# wget https://bitbucket.org/zhb/iredapd/raw/312521c215c3d3bb057fdd5adcaa475a267461ad/plugins/sql_user_restrictions.py
# cp /tmp/sql_user_restrictions.py /opt/iredapd/plugins/
# /etc/init.d/iredapd restart

4 最后由 liuzhiqing518 (2013-10-25 10:13:17) 编辑

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

同问.... 如何在/opt/iredapd/settings.py 里启用 sql_user_restrictions ???

[root@mail ~]# cat /opt/iredapd/settings.py |grep  sql_user_restrictions

plugins = ["sql_alias_access_policy", "sql_user_restrictions"]

sad

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

liuzhiqing518 写道:

同问.... 如何在/opt/iredapd/settings.py 里启用 sql_user_restrictions ???

[root@mail ~]# cat /opt/iredapd/settings.py |grep  sql_user_restrictions

plugins = ["sql_alias_access_policy", "sql_user_restrictions"]

sad


默认已经启用了

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

上面这个 SQL 命令的意思是:
- 拒收所有发件人发给 user@example.com 的邮件(rejectedsenders='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedsenders='@example.com')
- 禁止 user@example.com 发邮件给任何人(rejectedrecipients='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedrecipients='@example.com')

红色的两条描述是不是.......???

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

hackerzyh 写道:

上面这个 SQL 命令的意思是:
- 拒收所有发件人发给 user@example.com 的邮件(rejectedsenders='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedsenders='@example.com')
- 禁止 user@example.com 发邮件给任何人(rejectedrecipients='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedrecipients='@example.com')

红色的两条描述是不是.......???


mysql> UPDATE mailbox SET allowedsenders='@example.com', rejectedsenders='@.', allowedrecipients='@example.com', rejectedrecipients='@.' WHERE username='user@example.com';

这条语句给sql插入了四个参数,allowedsenders,rejectedsenders,allowedrecipients,rejectedrecipients,意思是:
- 拒收所有发件人发给 user@example.com 的邮件(rejectedsenders='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedsenders='@example.com')
- 禁止 user@example.com 发邮件给任何人(rejectedrecipients='@.')
- 允许 user@example.com 接收来自 example.com 的邮件(allowedrecipients='@example.com')
不是你说的红色两条的含义,而是上面四条的含义...
感谢你的提示,默认是启动sql_user_restrictions的,我按照张工的说明操作了(iRedMail-0.8.5 里带的 iRedAPD 版本有一个 bug,需要你自行下载修正后的 sql_user_restrictions 插件覆盖原文件(/opt/iredapd/plugins/sql_user_restrictions.py),再重启 iRedAPD 服务...这个操作必须要做!!!),已经实现了我的提问...感谢各位...

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

我按照上面的意思,如果我理解没错的话,使  allowedrecipients='@163.com'( 其他留空) 就是限制用户user@example.com 只能给163.com域发送邮件,但是,我测试的结果给任何域都可以发邮件。

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

hackerzyh 写道:

我按照上面的意思,如果我理解没错的话,使  allowedrecipients='@163.com'( 其他留空) 就是限制用户user@example.com 只能给163.com域发送邮件,但是,我测试的结果给任何域都可以发邮件。


先都拒绝了·· 然后再逐一放行策略...我已经可以实现了,可以和我交流QQ:874781040

回复: 如何设置iredmail,让他不能向外域发邮件,只能本域收发

虽然,我暂时用不到这个功能,提前预备,测试成功, 欧耶

UPDATE mailbox SET allowedsenders='@A.com,@B.com', rejectedsenders='@.', allowedrecipients='@A.com,@B.com', rejectedrecipients='@.' WHERE username='test@B.com';