返回列表 发帖

平安夜礼物,让 qmail+vpopmail 禁止弱密码发送邮件的patch

近段时间,利用邮件系统用户弱密码发送垃圾邮件有点猖狂,除了可以在后台禁止用户 smtp 发送权限外,自动检查用户的密码强度,消除 smtp 客户端隐患很有必要了。为了,特推出 vpopmail 的 patch ,供大家参考。

安装方法如下:
下载  附件中的补丁,放在vpopmail源代码上一级目录,然后执行下面的步骤:
  1. cd vpopmail-5.4.17
  2. patch < ../weak_passwd.patch
  3. ./configure --prefix=/home/vpopmail  --enable-qmail-ext  --enable-clear-passwd  --disable-roaming-users --enable-auth-module=mysql --disable-passwd --enable-logging=v --enable-log-name=vpopmail --disable-mysql-limits --enable-valias
  4. make
  5. make install
复制代码
注意需要在 /home/vpopmail/etc/ 目录建配置文件,文件名 weakpasswd,格式如下:
  1. 123456
  2. 654321
  3. abc123
  4. qwerty
复制代码
  1. --- vpopmail-5.4.17/vchkpw.c        2006-05-08 01:07:13.000000000 +0800
  2. +++ vpopmail-5.4.17_new/vchkpw.c        2010-12-24 20:16:34.000000000 +0800
  3. @@ -89,6 +89,7 @@
  4. void login_virtual_user();
  5. void login_system_user();
  6. void read_user_pass();
  7. +void check_weak_passwd();
  8. void vlog(int verror, char *TheUser, char *TheDomain, char *ThePass, char *TheName, char *IpAddr, char *LogLine);
  9. void vchkpw_exit(int err);
  10. void run_command(char *prog);
  11. @@ -200,6 +201,7 @@
  12.     */
  13.    if ( (vpw = vauth_getpw(TheUser, TheDomain)) != NULL ) {
  14.      vget_assign(TheDomain,NULL,0,&pw_uid,&pw_gid);
  15. +    if (ConnType == SMTP_CONN) check_weak_passwd();
  16.      login_virtual_user();

  17. #ifdef ENABLE_PASSWD
  18. @@ -218,7 +220,6 @@
  19.      vchkpw_exit(3);
  20.    }
  21.    vclose();
  22. -
  23.    /* The user is authenticated, now setup the environment */

  24.    /* Set the programs effective group id */
  25. @@ -330,6 +331,46 @@

  26. }

  27. +void check_weak_passwd()
  28. +{
  29. +  char weak[MAX_PW_PASS+1];
  30. +  char path[MAX_BUFF];
  31. +  int dlen, eof, i, weak_flag;
  32. +  FILE *fs;
  33. +
  34. +  weak_flag = 0;
  35. +  dlen = strlen(ThePass);
  36. +  for (i = 1; i < dlen; i++) {
  37. +    if (ThePass[0] != ThePass[i]) {weak_flag++; };
  38. +  }
  39. +
  40. +  if (weak_flag == 0 || strcmp(ThePass, TheUser) == 0) {
  41. +    snprintf(LogLine, sizeof(LogLine), "%s: weak password (pass: '%s') %s@%s:%s",
  42. +      VchkpwLogName, ThePass, TheUser, TheDomain, IpAddr);
  43. +    vlog(VLOG_ERROR_PASSWD, TheUser, TheDomain, ThePass, TheName, IpAddr, LogLine);
  44. +    vchkpw_exit(20);
  45. +  }
  46. +
  47. +  weak[0] = '\0';
  48. +  snprintf (path, sizeof(path), "%s/etc/weakpasswd", VPOPMAILDIR);
  49. +
  50. +  fs = fopen (path, "r");
  51. +  if (fs == NULL) return 0;
  52. +  do {
  53. +    eof = (fgets (weak, sizeof(weak), fs) == NULL);
  54. +    dlen = strlen(weak) - 1;
  55. +    if (weak[dlen] == '\n') { weak[dlen] = '\0'; }
  56. +    if (strcmp(ThePass, weak) == 0) {
  57. +      fclose (fs);
  58. +      snprintf(LogLine, sizeof(LogLine), "%s: weak password (pass: '%s') %s@%s:%s",
  59. +        VchkpwLogName, ThePass, TheUser, TheDomain, IpAddr);
  60. +      vlog(VLOG_ERROR_PASSWD, TheUser, TheDomain, ThePass, TheName, IpAddr, LogLine);
  61. +      vchkpw_exit(20);
  62. +    }
  63. +  }while (!eof);
  64. +  fclose (fs);
  65. +}
  66. +
  67. void read_user_pass()
  68. {
  69.   int i,j,l;
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?登记新账户
网络 == 大麻 ;->
http://www.igenus.org
提供mail系统的技术咨询、安装、定制服务
QQ:1264421 邮件技术QQ群: 28575953
MSN:wuqiong953@hotmail.com

弱密码的判断条件,
1. 相同的字符,例如 111111 888888 等等;
2. 与用户名相同,例如,用户名是 mytest@mydomain.com ,密码 也是 mytest;
3. 其他简单的密码串,例如 123456 654321 qwerty zxcvbn 等等
网络 == 大麻 ;->
http://www.igenus.org
提供mail系统的技术咨询、安装、定制服务
QQ:1264421 邮件技术QQ群: 28575953
MSN:wuqiong953@hotmail.com

TOP

mail# cat /home/vpopmail/bin/weakpasswd
123456
654321
abc123
123abc
qwerty
asdfgh
zxcvbn
asd123
1234567
12345678
123456789
987654
网络 == 大麻 ;->
http://www.igenus.org
提供mail系统的技术咨询、安装、定制服务
QQ:1264421 邮件技术QQ群: 28575953
MSN:wuqiong953@hotmail.com

TOP

大麻:
不好意思,

TOP

谢谢大麻..

TOP

麻哥,这个打完这个patch我的vpopmail编译不过去。我用的是vpopmail-5.4.9,5.4.13的也不行。
我最后下载的vpopmail-5.4.33才能打完patch后编译过去

TOP

悲剧的是vpopmail-5.4.33的mysql数据结构似乎和vpopmail-5.4.9的不一样。

TOP

原因找到了,配置参数的问题,configure填上--disable-many-domains就一样了。

TOP

返回列表