我的家庭网络设置如下:
PCs -> Wired Network ---|
|--- Server --- Internet
PCs -> Wireless Network ---|
服务器在 Ubuntu 下运行 fetchmail、postfix 和 dovecot 守护程序,从 ISP 检索电子邮件并将其存储在服务器上。通过服务器上托管的 IMAP 接口,可以从有线或无线网络上的任何 PC 访问电子邮件。
这一切都很顺利。
我即将让我的孩子们自己使用电子邮件。但在让他们自由地使用电子邮件之前,我希望服务器为从 ISP 检索并发送到他们邮箱的电子邮件实施白名单。理想情况下,传入发件人的完整地址应列在白名单中,以便将其转发到邮箱。任何不在白名单中的内容都应转发到另一个邮箱,然后我可以查看并根据需要更新白名单。
我该如何设置各种守护进程来执行此操作?
答案1
我接受了 aatdark 的回答,但这里有我所做工作的更详细描述(我没有编辑 aatdark 帖子的权限)。
首先,我正在使用 Ubuntu 9.04。
此外,不需要安装额外的软件包。
我有一个这样的设置:
ISP -> fetchmail -> postfix -> dovecot (for imap access)
我需要 postfix 来使用 dovecot 的 deliver 程序,因为它能够运行 sieve 脚本。为此,请编辑 /etc/postfix 中的 main.cf 并更改或添加以下内容:
mailbox_deliver = /usr/lib/dovecot/deliver
这告诉 postfix 使用 dovecot 的 deliver 程序。要让 deliver 运行 sieve 脚本,请编辑 /etc/dovecot 中的 dovecot.conf,并找到以下行
protocol lda {
并添加以下条目:
postmaster_address = <some address>
hostname = <hostname>
mail_plugins = cmusieve
sendmail_path = /usr/lib/sendmail
最后,为了按照我最初的要求实现白名单,在 dovecot.conf 中搜索
plugin {
添加以下内容:
sieve = <location of sieve script> # I have /var/sieve-scripts/%n.sieve, this uses the user name as part of the script filename
脚本文件如下:
if address :is ["From"] "whitelisteduser@domain"
{
keep; # we know this user so let it through
}
else
{
redirect "myemail@domain"; # redirect everything else
}
我知道这是一个简单的脚本。但这是一个开始。我希望有一种方法可以使用外部数据源,而不是显式发件人的电子邮件地址
答案2
我认为sieve
可以实现你想要实现的目标。
http://en.wikipedia.org/wiki/Sieve_%28mail_filtering_language%29
为了获得完整设置的邮件系统 + sieve + webmail,我推荐iRedMail
(http://www.iredmail.org/)
Sieve 支持邮件的移动和过滤。