sailer.shen 写道:==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.8.1(dovecot 2.0.18-1)
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):mysql
- 使用的 Linux/BSD 发行版名称及版本号:CentOS 6.0 x64
- 与您的问题相关的日志信息:
====
突然想到能否禁止某些用户通过浏览器登录邮件服务器的web界面,只允许他们在outlook/foxmail之类的客户端上收发邮件?
这样做是不是可以减少webmail上出现“连接到邮件服务器失败”的次数?
sailer.shen ,如你的问题,我这边也有考虑过,并且现在已经实现:1公司内网可以允许任何人登入webmail;2.在公网时,只有授权的账户才可以登入webmail。
具体如下:(roundcube 0.9.2)
1.在roundcube/program/include/rcmail.php 文件的登入验证时添加多一个查询Mysql条件:先搜索到
if ($cookiecheck && empty($_COOKIE)) {
在这行之前(注意是这行之前!)添加如下:
//以下是自己添加的=====================================================
include "login_check.php";
include "remote_ip.php";
$remote_ip = get_remote_ip();
//$remote_ip = "127.0.0.1"; //测试时手动指定的remort_ip,正式用时要去掉
if ("Unknown" == $remote_ip)
{
echo "Cannot get remote ip...";
return false;
}
else
{
if (!check_user_login($username, $remote_ip))
{
echo "login reject...";
return false;
}
}
//以上是自己添加的=====================================================
2.将附件中两个解压的文件:login_check.php、remote_ip.php 一同复制到roundcube/program/include 中。
3.在Mysql数据库 vmail 的mailbox表增加一个字段 auth_flag ,默认值为 0
4.在Mysql数据库vmail 增加一张表 special_ips ,可以使用如下sql:
create table special_ips(
id int(10) not null primary key auto_increment,
interval_start_ip int unsigned ,
interval_end_ip int unsigned
)
5.在vmail数据库 special_ips 表中插入自己内网(或者允许的IP地址)IP地址,使用如下sql:
insert into special_ips(interval_start_ip,interval_end_ip) value(inet_aton('192.168.1.0'),inet_aton('192.168.1.255'));
昨晚如上后重启httpd服务即可。
说明:
即在roundcube登入条件时增加一个验证客户端IP地址和是否授权webmail登入的条件,
当获取的客户端IP地址属于内部地址或者授权的公网地址时返回true,即可允许登入webmail;
当获取的客户端IP地址不属于内部地址或授权的公网IP地址时,检查vmail 上的mailbox表 auth_flag 是否授权登入(值为 1 表示授权登入用户, 0 表示非授权)。
如此即可限制用户是否可以登入webmail。
当把自己内部IP段放入special_ips时,用户在内部网络使用时,可以不检查是否是授权用户而可以直接登入。
如不把任何IP地址放入special_ips时,都会检查用户的auth_flag 值,判断是否为授权登入用户。
注意:remote_ip.php文件为获取访问webmail时的客户端IP地址(出口IP地址)。
login_check.php文件为判断是否授权IP和授权用户,请检查次文件的30行和70行中所注释你的数据库账户密码。