WHMCS LDAP Modules

最近有人向我谈起一个与一账户信息在多个OpenSSH Server上同步的问题。

这两三天我抽时间测试了pam_mysql,pam_radius,以及OpenLDAP这三个东西。其中pam_mysql,pam_radius虽然可以用某个服务器验证登录信息,但是都需要在各个服务器上使用useradd添加该用户。

OpenLDAP最完美,仅需在LDAP上添加一个记录,就可使用已添加的用户的信息登录到各个服务器。

考虑到谈起这个问题的人是想使用WHMCS开通SSH账户的,于是我弄了个WHMCS的LDAP模块。

这模块需要PHP的LDAP扩展,你们可以通过phpinfo()函数查看是否有ldap扩展,如果没有,就到php.net下载你正在使用的版本的PHP源码,用phpize编译吧。

WHMCS LDAP模块下载地址:http://soft.yzs.me/ldapposixaccount.tar.bz2

使用方法:

首先得配置好你的LDAP Server与其他要使用LDAP验证的服务器,这些我就不多说啦,LDAP发展这么久,肯定不少人发过教程,发一个已经可以谷歌到答案的东西,那就没意义啦。

接下来要在WHMCS的服务器设置处添加服务器,模块当然是选择Ldapposixaccount了,你可以把各个服务器的IP填入到Assigned IP Addresses中,那样用户在服务信息处就可以看到各个服务器的IP了。用户名填写你的登陆DN(Login DN),例如cn=admin,dc=domain,dc=com,至于密码,你自己知道。接着创建服务器组。

进入产品设置页面,添加产品,Module Settings中选择Ldapposixaccount。

这里解释一下各项的设置。

Base Distinguished Name:最基础的dn,例如dc=domain,dc=com。

Initial uid&gid Number:填入一个数字,新添加的用户的uid和gid将会从这个数字开始递增,为了不要与/etc/passwd与/etc/group中的重复,建议设置到10000以上。

Users’s Home Directory Base:填入一个文件夹的路径,新建的用户的home目录将会以其用户名命名创建至此目录中,例如我设置为/home/,那么新建的用户的home目录将会是/home/用户名。

Login Shell:新建的用户的shell,例如/bin/bash,更多的shell可以查看/etc/shells。

Group Organisational Unit:在你LDAP Server中储存用户组的Organisational Unit。

User Organisational Unit:在你LDAP Server中储存用户的Organisational Unit。

Module Settings

 

如果你设置的信息无误的话,那么接下来就可以通过WHMCS创建用户了。

 

LDAP

DirectAdmin额外流量模块For WHMCS

如果没猜错,WHMCS自带的DirectAdmin模块是不带添加额外流量的功能的。

看了下DirectAdmin的API文档,利用CMD_API_MODIFY_USER即可实现添加额外流量的功能。

一开始打算用CURL的,不过DirectAdmin提供了一个httpsocket.php,创建数组调用里面的函数就行了。

下载地址:http://soft.yzs.me/additionalbandwidth.zip

使用方法:

1)  上传到WHMCS的modules/servers目录,然后解压。

2) 到后台添加服务器,选择Type为Additionalbandwidth,并填写好信息。

3) 添加并配置产品,在“Custom Fields”标签页添加一个编辑框,勾选“Required Field”和“Show on Order Form”,建议使用正则表达式限制纯英文字母:Custom Fields

不会写正则表达式就用这个:

完成上面一步后,到“Module Settings”标签页,设置好要添加的流量,以及刚刚添加的“Custom Fields”的“Fields Name”

Module Settings

 

4) 测试,下单时在那个编辑框中填入控制面板的用户名

NOTE:Suspend以及Unsuspend功能并没有实际效果,只是把WHMCS处的服务标记为暂停与激活状态。Create是添加额外流量,Terminate是把额外流量设置为0。

由于此API的操作不返回任何信息(不管错误亦或是正确),因此不管是否成功添加流量,WHMCS处都会提示“Module Command Success”。

WHMCS(PHP程序)防止IP欺骗(伪造X-Forwarded-For)

前面发布了一篇文章,讲述了多重代理时防止伪造X-Forwarded-For的方法。

那只是针对使用代理服务器的情况。虽然没使用代理服务器时,很少会出现这个问题,但是也不排除有些傻逼PHP程序,如果X-Forwarded-For的内容不为空,就会主动拿来当做访客真实IP。使用CDN的话,还能获取访客的正确IP,但是没使用CDN的话……

whmcs-ip

这岂不是让那些不法分子有机可乘了吗?

大名鼎鼎的WHMCS就是其中之一!

其实如果要解决这个问题,在该PHP程序中,把类似这样的代码删掉就行:

 

但是,上面所说到的WHMCS,并非开源PHP程序,使用过ioncube加密,除非decode了,否则要修改源程序删代码,是不太可能的。

不过幸运的是,WHMCS有唯一一个没有加密且全局都使用的文件:configuration.php

既然WHMCS要把变量$HTTP_X_FORWARDED_FOR的内容拿来做访客真实IP,那么我们只需在configuration.php里面把$remote_addr(前一篇文章已解释过$remote_addr)赋值给$HTTP_X_FORWARDED_FOR。在configuration.php的<?php    ?>之间加入以下代码:

最后顺便提一下:本文仅仅是针对未使用反向代理(CDN)的网站防止伪造IP。如果你使用的是虚拟主机,且有CDN,无法修改服务器配置文件,那么只能用那“高风险”的方法去获取访客真实IP了。

 

揭穿babytomas之”WHMCS从国外服务器获取域名IP”的谎言

几天前在Hostloc发了一贴:香港WHMCS演示站

一个名叫babytomas的小家伙说我是安装到使用DNSPOD的分线解析,从而使居于美国的WHMCS的服务器检测我的域名的IP是Hostgator的IP。

我当场反驳了他的观点,但是他并没有认识到自己的错误,仍然满怀信心地把自己的方法贴出来:

Hostloc

 

 

我实在是不忍心看到一个青少年继续错误下去,那么今天我就来个测试,让大家看看谁是谁非!

首先,我到DNSPOD处做好分线解析(cnwhmcs.yzs.me):

DNSPOD

 

并且到Chinaz Ping了一下,以确认DNS记录已生效:

Ping

 

http://www.whmcs.com/hostgator申请的授权:

License information

 

上传WHMCS5.2.5的程序到Hostgator的空间,并且开始安装:

安装检查

安装信息

 

安装结束后,我登录WHMCS官网,查看使用后的授权:

安装后的授权信息

并且进入WHMCS后台的Help – License Information页面查看授权的信息:

License Information Admin

 

OK,完全一致。按照他说的,.htaccess做好反代,然后搬回国内的服务器上,保持目录,域名一致:

服务器信息

 

一切准备就绪后,访问后台,出现以下提示:

授权错误

目录正确,域名正确,这样问题就非常明显了,IP不正确!

到这里,大家应该清楚,WHMCS并不会发指令叫WHMCS的服务器去检测你域名的IP。那么,更可能的就是:访问后台时,WHMCS把授权(或许还有服务器信息)等POST到WHMCS官网的某个页面(好像是http://www.whmcs.com/members/modules/servers/licensing/verify44.php),然后该页面返回激活授权的服务器信息,以及授权状态等给我们安装的WHMCS,我们的WHMCS先判断授权的状态(Active,Suspended还是其他),是Active,就把获得的信息与WHMCS所在的服务器信息进行对比,信息一致的话,就出现登录页面,否则,302到错误页面。

也许你会想,伪造那个页面返回的信息不就可以实现破解WHMCS的梦想?答案是否定的(别当老外像babytomas那么傻)……