免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 29415 | 回复: 15
打印 上一主题 下一主题

[proxy] Socks 代理服务(ss5)设置指南 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-26 17:14 |只看该作者 |倒序浏览
Socks 服务(ss5)设置指南

最近陆续看到有同学在设置socks服务上有问题---设置连该选什么样的服务端软件都存在疑惑......毕竟现在网络上流传的有关于socks服务的中文文档都太老了,于是我就在这里好为人师,聊聊这个问题吧。

原来常用的socks服务端软件是nec的socks5,但是早就停止维护了,所以现在连官方网站就都不上去了,所以以后同学们就甭在找这玩意了。

目前常用的的socks服务端软件列表如下:

    * Dante Socks Server,http://www.inet.no/dante
    * Kingate,http://sourceforge.net/projects/kingate/
    * SS5 Socks Server,http://ss5.sourceforge.net

他们的基本功能都差不多,高级管理功能SS5实现的比较多、可是目前也不够完善。大家就着自己的口味挑吧,我自己是选择了SS5 Socks Server。下面我就把我以前写的有关于SS5的文档贴上来吧。

论坛徽章:
0
2 [报告]
发表于 2008-02-26 17:21 |只看该作者

ss5 socks server教程(一):安装---rpm安装包的制作

本文原出处:Coolzsb的杂货铺子
可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。

ss5 socks server是一个相当完善的SOCKS v4 以及 v5 服务软件,支持Linux、Freebsd、Solaris。性能上相当不错,据官方网站介绍,在一台跑在Linux kernel 2.6.x的IBM x360的服务器,有跑到每秒2500个并发连接的纪录。ss5还提供了用户带宽控制功能,这可好像是目前唯一能找到的提供此功能的开源Socks服务了。

安装版本:3.6.4-3

系统安装环境:trustix 3.0.5

因为ss5有提供编译rpm的spec文件,所以就自己编了个给trustix 3.0.5的rpm来用,这样软件管理会方便些。

ss5的作者Matteo Ricchetti为了这个rpm包的东西能加入fedora,跟fedora的人认认真真地沟通了半年,真是佩服他这种一板一眼的认真劲。

下了最新版的ss5的软件包之后,发现要直接作成给trustix 3.0.5用的rpm还是不成的,一部分是因为trustix调整了部分initscripts的路径,另外一部分就是作者的疏忽了。做了相应的调整之后,才总算折腾出了一个给trustix 3.0.5用的比较完善的rpm包。我作的修改大致如下:

    * 根据trustix的initscripts路径作了调整
    * 修正了ss5的服务启动脚本中的一些错误
    * 修正了ss5的spec文件中的一些文件目录的权限设置
    * 增加了ss5的logrotate设置
    * 增加了ss5的服务启动参数设置文件:/etc/sysconfig/ss5

然后直接用rpmbuild编译一个rpm安装包出来就可以直接安装使用了。

   1. rpmbuild -bb --target=i686 /usr/src/trustix/specs/ss5.spec
   2. rpm -ivh /usr/src/trustix/rpms/i686/ss5-3.6.4-3.i686.rpm

可惜尝试着编译出来带epoll支持的ss5没法工作,我只好放弃了ss5对epoll的支持。

具体的修改如下,对于使用其他系统的兄弟,大致可以参考一下

对ss5-3.6.4-3.spec所做的修改
下载: ss5-3.6.4-3.spec-for-trustix-3.0.5.patch

  1. --- /tmp/old/ss5-3.6.4-3.spec   2008-01-08 19:04:44.000000000 +0800
  2. +++ /tmp/new/ss5-3.6.4-3.spec   2008-01-10 11:36:34.753724380 +0800
  3. @@ -6,6 +6,7 @@
  4. Group: Applications/Internet
  5. URL: [url]http://sourceforge.net/projects/ss5[/url]
  6. Source: [url]http://prdownloads.sourceforge.net/ss5/ss5-3.6.4-3.tar.gz[/url]
  7. +Patch1: modify_for_trustix_3.0.5.patch
  8. BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
  9. BuildRequires: openldap-devel pam-devel

  10. @@ -15,6 +16,7 @@

  11. %prep
  12. %setup
  13. +%patch1 -p1

  14. %build

  15. @@ -43,7 +45,7 @@
  16. %files
  17. %defattr(755,root,root)
  18. %{_sbindir}/ss5
  19. -%{_initrddir}/ss5
  20. +%{_initdir}/ss5
  21. %{_libdir}/ss5/

  22. %defattr(644,root,root)
  23. @@ -67,8 +69,11 @@
  24. %defattr(755,root,root)
  25. %{_localstatedir}/log/ss5

  26. -%defattr(644,root,root)
  27. +%defattr(755,root,root)
  28. %dir %{_sysconfdir}/opt/ss5
  29. +%defattr(644,root,root)
  30. +%{_sysconfdir}/logrotate.d/ss5
  31. +%config(noreplace) %{_sysconfdir}/sysconfig/ss5
  32. %config(noreplace) %{_sysconfdir}/opt/ss5/ss5.conf
  33. %config(noreplace) %{_sysconfdir}/opt/ss5/ss5.passwd
  34. %config(noreplace) %{_sysconfdir}/pam.d/ss5
复制代码


对ss5-3.6.4-3的软件包的修改
下载: modify_for_trustix_3.0.5.patch

  1. --- ss5-3.6.4/Makefile.in        2007-05-24 23:59:53.000000000 +0800
  2. +++ ss5-3.6.4.new/Makefile.in        2008-01-10 11:06:59.052650112 +0800
  3. @@ -48,11 +48,15 @@
  4.         @( cp modules/mod_balance/SS5Logo.jpg $(dst_dir)$(lib_path_base)/ss5/ )

  5.         @( if [ $(OS) = "Linux" ]; then \
  6. -        if [ ! -d $(dst_dir)/etc/rc.d/init.d ]; then mkdir -p $(dst_dir)/etc/rc.d/init.d; fi ; \
  7. +        if [ ! -d $(dst_dir)/etc/init.d ]; then mkdir -p $(dst_dir)/etc/init.d; fi ; \
  8. +        if [ ! -d $(dst_dir)/etc/logrotate.d ]; then mkdir -p $(dst_dir)/etc/logrotate.d; fi ; \
  9. +        if [ ! -d $(dst_dir)/etc/sysconfig ]; then mkdir -p $(dst_dir)/etc/sysconfig; fi ; \
  10.          fi )
  11.         @( if [ $(OS) = "Linux" ]; then \
  12. -        if [ ! -f $(dst_dir)/etc/rc.d/init.d/ss5 ]; then cp conf/ss5.init $(dst_dir)/etc/rc.d/init.d/ss5; \
  13. -        else cp conf/ss5.init $(dst_dir)/etc/rc.d/init.d/ss5.rpmnew ; fi ; \
  14. +        if [ ! -f $(dst_dir)/etc/init.d/ss5 ]; then cp conf/ss5.init $(dst_dir)/etc/init.d/ss5; \
  15. +        else cp conf/ss5.init $(dst_dir)/etc/init.d/ss5.rpmnew ; fi ; \
  16. +        if [ ! -f $(dst_dir)/etc/logrotate.d/ss5 ]; then cp conf/ss5.logrotate $(dst_dir)/etc/logrotate.d/ss5; fi ;\
  17. +        if [ ! -f $(dst_dir)/etc/sysconfig/ss5 ]; then cp conf/ss5.sysconfig $(dst_dir)/etc/sysconfig/ss5; fi ;\
  18.          fi )
  19.         @( if [ $(OS) = "SunOS" ]; then \
  20.         if [ ! -d $(dst_dir)/etc/init.d ]; then mkdir -p $(dst_dir)/etc/init.d; fi ; \
  21. @@ -134,7 +138,7 @@
  22.          fi )

  23.         @( if [ $(OS) = "Linux" ]; then \
  24. -        if [ -f $(dst_dir)/etc/rc.d/init.d/ss5 ]; then rm -f $(dst_dir)/etc/rc.d/init.d/ss5; fi; \
  25. +        if [ -f $(dst_dir)/etc/init.d/ss5 ]; then rm -f $(dst_dir)/etc/init.d/ss5; fi; \
  26.          fi )
  27.         @( if [ $(OS) = "SunOS" ]; then \
  28.         if [ -f $(dst_dir)/etc/init.d/ss5 ]; then rm -f $(dst_dir)/etc/init.d/ss5; fi; \
  29. diff -Nur ss5-3.6.4/conf/ss5.init ss5-3.6.4.new/conf/ss5.init
  30. --- ss5-3.6.4/conf/ss5.init        2007-04-17 22:40:43.000000000 +0800
  31. +++ ss5-3.6.4.new/conf/ss5.init        2008-01-10 11:20:15.394071801 +0800
  32. @@ -4,12 +4,21 @@
  33. # description: This script takes care of starting \
  34. #              and stopping ss5
  35. #
  36. +# processname: ss5
  37. +# config: /etc/opt/ss5/ss5.conf

  38. OS=`uname -s`
  39. if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then
  40.   
  41. # Source function library.
  42. - . /etc/rc.d/init.d/functions
  43. +if [ -f /etc/init.d/functions ]; then
  44. +  . /etc/init.d/functions
  45. +elif [ /etc/rc.d/init.d/functions ]; then
  46. +  . /etc/rc.d/init.d/functions
  47. +else
  48. +  echo "Can't find functions file, exiting"
  49. +  exit 1
  50. +fi

  51. # Source networking configuration.
  52.   . /etc/sysconfig/network
  53. @@ -20,6 +29,9 @@
  54.   [ -f /usr/sbin/ss5 ] || exit 0
  55. fi

  56. +#set ulimit open file
  57. +ulimit -HSn 65535
  58. +
  59. # Test custom variables
  60. test -f /etc/sysconfig/ss5 && . /etc/sysconfig/ss5

  61. @@ -31,7 +43,7 @@
  62.         if [ $OS = "Linux" ]; then
  63.              daemon /usr/sbin/ss5 -t $SS5_OPTS
  64.              touch /var/lock/subsys/ss5
  65. -        if [ $OS = "SunOS" ]; then
  66. +        elif [ $OS = "SunOS" ]; then
  67.              /usr/sbin/ss5 -t
  68.              touch /var/lock/subsys/ss5
  69.         else
  70. diff -Nur ss5-3.6.4/conf/ss5.logrotate ss5-3.6.4.new/conf/ss5.logrotate
  71. --- ss5-3.6.4/conf/ss5.logrotate        1970-01-01 08:00:00.000000000 +0800
  72. +++ ss5-3.6.4.new/conf/ss5.logrotate        2008-01-10 11:02:31.232586242 +0800
  73. @@ -0,0 +1,7 @@
  74. +/var/log/ss5/ss5.log {
  75. +    sharedscripts
  76. +    notifempty
  77. +    postrotate
  78. +        /usr/bin/killall -HUP ss5
  79. +    endscript
  80. +}
  81. diff -Nur ss5-3.6.4/conf/ss5.sysconfig ss5-3.6.4.new/conf/ss5.sysconfig
  82. --- ss5-3.6.4/conf/ss5.sysconfig        1970-01-01 08:00:00.000000000 +0800
  83. +++ ss5-3.6.4.new/conf/ss5.sysconfig        2008-01-10 11:05:33.542858180 +0800
  84. @@ -0,0 +1,4 @@
  85. +## These variables are used by ss5 socks service
  86. +## You will want to fill in your own ss5 start options
  87. +#
  88. +SS5_OPTS=""
复制代码

论坛徽章:
0
3 [报告]
发表于 2008-02-26 17:25 |只看该作者

ss5 socks server教程(二):配置

本文原出处:Coolzsb的杂货铺子
可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。



如果你只是要搞个自己玩的socks服务器,ss5的配置还是相对简单的:简单到甚至完全不修改配置,直接一个service ss5 start,你就得到了一个可以用的socks服务器。

只是如果你敢把这样不经过配置的socks服务器挂到网络上的话,估计不出2个小时,就会有一票的人扫描到你的socks服务。考虑到socks服务可以直接代理外网的用户到内部网络的访问,这可不仅仅是被占用带宽的问题,直接的,你的网络就门洞大开了,安全有问题、后果很严重。

那么,先总结一下我的需求吧:

    * 所有登陆到Ss5服务的用户需要通过身份验证
    * 一部分用户允许其通过Ss5访问的资源不受限制
    * 另外一部分的合法用户用户限制每用户可使用的带宽

这个要求应该算是普遍的要求了,那么,根据这部分需求,我们来修改一下ss5的配置,按照之前文章编译出来的Ss5的rpm安装之后,Ss5的配置文件主要都放在/etc/opt/ss5目录底下,我们这个简单配置只需要修改这个目录之下的相关文件即可。

    * 所有登陆到Ss5服务的用户需要通过身份验证:
         1. 因为socks v4协议不支持用户认证,所以,首先我们得取消ss5的Socks v4协议支持。Ss5目前还不支持在配置文件内直接取消对Socks V4协议的支持,所以我们只好直接把Ss5的Socks V4模块干掉,这样,Ss5服务启动之后就只有支持Socks V5协议了:
               1. mv /usr/lib/ss5/mod_socks4.so /usr/lib/ss5/mod_socks4.so.bk
         2. 配置Ss5服务要求连接用户必须通过身份验证:
            修改/etc/opt/ss5/ss5.conf,把其中的

  1.               auth    0.0.0.0/0               -               -
复制代码

            修改为

  1.                auth    0.0.0.0/0               -               u
复制代码

         3. 创建用户(这里只讲解基本的用户管理):
            修改/etc/opt/ss5/ss5.passwd,增添用户及明文密码,每行一个用户,格式如下:

  1.                用户名 密码
复制代码

         4. 创建用户分组,以方便给不同的用户分配不同的访问权限:
            在/etc/opt/ss5目录中创建以用户分组名命名的文件,然后在相应的组用户文件中添加相应的用户。
            以我的需求来说,我需要创建两组用户:
                o 不受限制用户组:ulimit
                o 受限制用户组:limit

            那么我就在/etc/opt/ss5目录里面创建ulimit和limit这两个文件,然后在这两个文件中分别填入 /etc/opt/ss5/ss5.passwd中已添加的用户,格式依旧是每行一个用户(不需要填写用户密码)。请注意!/etc/opt/ss5目录下的这些文件必须能被Ss5服务的执行用户有读取权限(Ss5服务的默认执行用户是nobody)。
    * 设置不同用户组的访问控制:
      修改/etc/opt/ss5/ss5.conf,除掉这行:

  1.          permit -        0.0.0.0/0       -       0.0.0.0/0       -       -       -       -       -
复制代码


      添加:

  1.          permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       ulimit  -       -
  2.          permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       limit 64000 -
复制代码

论坛徽章:
0
4 [报告]
发表于 2008-02-27 23:58 |只看该作者
为什么按照这么做会出现
[ERRO]Error parsing configuration file. SS5 exiting...

论坛徽章:
0
5 [报告]
发表于 2008-02-28 10:57 |只看该作者
ss5的配置文件里面有错误的配置语句,你瞅一眼自己的配置文件:/etc/opt/ss5/目录下的那些文件,肯定有你写错的地方


原帖由 nwpulotus 于 2008-2-27 23:58 发表
为什么按照这么做会出现
[ERRO]Error parsing configuration file. SS5 exiting...



签名
---
有问题不怕,排错的时候也是自己提高的过程。

论坛徽章:
0
6 [报告]
发表于 2008-02-29 00:45 |只看该作者

回复 #5 coolzsb 的帖子

嗯,确实写错了,仔细阅读了下里面的注释才明白。
你那个
permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       ulimit  -       -
permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       limit 64000 -
最后面多个‘-’

论坛徽章:
0
7 [报告]
发表于 2008-02-29 09:46 |只看该作者
?????是吗?这是我从我的ss5.conf里面copy出来的~~~~

原帖由 nwpulotus 于 2008-2-29 00:45 发表
嗯,确实写错了,仔细阅读了下里面的注释才明白。
你那个
permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       ulimit  -       -
permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       limit 64000 -
最后面多个‘-’


然后你仔细看一下ss5.conf里面acl例子,也是总共10栏的:


  1. #      Auth     SHost           SPort   DHost           DPort   Fixup   Group   Band    ExpDate
  2. #      Http + fixup + user autentication required with expiration date to 31/12/2006
  3. permit u 0.0.0.0/0 - web.example.com 80 - - - 31-12-2006
复制代码



签名
---
怪事年年有,今天特别多?

签名
---
四年一次的今天果然不同凡响

论坛徽章:
0
8 [报告]
发表于 2008-03-01 23:29 |只看该作者

回复 #7 coolzsb 的帖子

[root@publiclab ~]# *** glibc detected *** /usr/sbin/ss5: double free or corruption (!prev): 0x09c23640 ***
======= Backtrace: =========
/lib/libc.so.6[0x1e4ac1]
/lib/libc.so.6(cfree+0x90)[0x1e80f0]
/lib/libc.so.6(fclose+0x136)[0x1d33b6]
/usr/lib/ss5/mod_authentication.so(S5PwdFileClose+0x26)[0x131276]
/usr/lib/ss5/mod_authentication.so(Authentication+0x3e5)[0x1311d5]
/usr/sbin/ss5(S5Core+0x132b)[0x804bffb]
/lib/libpthread.so.0[0x32a50b]
/lib/libc.so.6(clone+0x5e)[0x24eb2e]
======= Memory map: ========
*** glibc detected ***

请教个问题,为什么我的ss5代理老是死掉,提示
ss5 dead but subsys locked
然后重新start 出现上面一大串的提示就又死了。

论坛徽章:
0
9 [报告]
发表于 2008-03-02 10:01 |只看该作者
你的glibc版本的问题,很麻烦,最简单的办法就是换一个版本的Linux

原帖由 nwpulotus 于 2008-3-1 23:29 发表
[root@publiclab ~]# *** glibc detected *** /usr/sbin/ss5: double free or corruption (!prev): 0x09c23640 ***



签名
---
别问我有关glibc的问题,我也怕着它来着

论坛徽章:
0
10 [报告]
发表于 2008-03-02 17:43 |只看该作者
噢。不好意思,明白了,以前我是用yum install ss5 安装的,但源里面的ss5版本较低,所以跟你说的不一样,后来我从官网上下了个新版本安装后才发现新版本比老版本确实多一个参数的。
谢谢你噢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP