coolzsb 发表于 2008-02-26 17:14

Socks 代理服务(ss5)设置指南

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的文档贴上来吧。

coolzsb 发表于 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

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

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

%prep
%setup
+%patch1 -p1

%build

@@ -43,7 +45,7 @@
%files
%defattr(755,root,root)
%{_sbindir}/ss5
-%{_initrddir}/ss5
+%{_initdir}/ss5
%{_libdir}/ss5/

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

-%defattr(644,root,root)
+%defattr(755,root,root)
%dir %{_sysconfdir}/opt/ss5
+%defattr(644,root,root)
+%{_sysconfdir}/logrotate.d/ss5
+%config(noreplace) %{_sysconfdir}/sysconfig/ss5
%config(noreplace) %{_sysconfdir}/opt/ss5/ss5.conf
%config(noreplace) %{_sysconfdir}/opt/ss5/ss5.passwd
%config(noreplace) %{_sysconfdir}/pam.d/ss5


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

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

        @( if [ $(OS) = "Linux" ]; then \
-        if [ ! -d $(dst_dir)/etc/rc.d/init.d ]; then mkdir -p $(dst_dir)/etc/rc.d/init.d; fi ; \
+        if [ ! -d $(dst_dir)/etc/init.d ]; then mkdir -p $(dst_dir)/etc/init.d; fi ; \
+        if [ ! -d $(dst_dir)/etc/logrotate.d ]; then mkdir -p $(dst_dir)/etc/logrotate.d; fi ; \
+        if [ ! -d $(dst_dir)/etc/sysconfig ]; then mkdir -p $(dst_dir)/etc/sysconfig; fi ; \
         fi )
        @( if [ $(OS) = "Linux" ]; then \
-        if [ ! -f $(dst_dir)/etc/rc.d/init.d/ss5 ]; then cp conf/ss5.init $(dst_dir)/etc/rc.d/init.d/ss5; \
-        else cp conf/ss5.init $(dst_dir)/etc/rc.d/init.d/ss5.rpmnew ; fi ; \
+        if [ ! -f $(dst_dir)/etc/init.d/ss5 ]; then cp conf/ss5.init $(dst_dir)/etc/init.d/ss5; \
+        else cp conf/ss5.init $(dst_dir)/etc/init.d/ss5.rpmnew ; fi ; \
+        if [ ! -f $(dst_dir)/etc/logrotate.d/ss5 ]; then cp conf/ss5.logrotate $(dst_dir)/etc/logrotate.d/ss5; fi ;\
+        if [ ! -f $(dst_dir)/etc/sysconfig/ss5 ]; then cp conf/ss5.sysconfig $(dst_dir)/etc/sysconfig/ss5; fi ;\
         fi )
        @( if [ $(OS) = "SunOS" ]; then \
        if [ ! -d $(dst_dir)/etc/init.d ]; then mkdir -p $(dst_dir)/etc/init.d; fi ; \
@@ -134,7 +138,7 @@
         fi )

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

OS=`uname -s`
if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then

# Source function library.
- . /etc/rc.d/init.d/functions
+if [ -f /etc/init.d/functions ]; then
+. /etc/init.d/functions
+elif [ /etc/rc.d/init.d/functions ]; then
+. /etc/rc.d/init.d/functions
+else
+echo "Can't find functions file, exiting"
+exit 1
+fi

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

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

@@ -31,7 +43,7 @@
        if [ $OS = "Linux" ]; then
             daemon /usr/sbin/ss5 -t $SS5_OPTS
             touch /var/lock/subsys/ss5
-        if [ $OS = "SunOS" ]; then
+        elif [ $OS = "SunOS" ]; then
             /usr/sbin/ss5 -t
             touch /var/lock/subsys/ss5
        else
diff -Nur ss5-3.6.4/conf/ss5.logrotate ss5-3.6.4.new/conf/ss5.logrotate
--- ss5-3.6.4/conf/ss5.logrotate        1970-01-01 08:00:00.000000000 +0800
+++ ss5-3.6.4.new/conf/ss5.logrotate        2008-01-10 11:02:31.232586242 +0800
@@ -0,0 +1,7 @@
+/var/log/ss5/ss5.log {
+    sharedscripts
+    notifempty
+    postrotate
+      /usr/bin/killall -HUP ss5
+    endscript
+}
diff -Nur ss5-3.6.4/conf/ss5.sysconfig ss5-3.6.4.new/conf/ss5.sysconfig
--- ss5-3.6.4/conf/ss5.sysconfig        1970-01-01 08:00:00.000000000 +0800
+++ ss5-3.6.4.new/conf/ss5.sysconfig        2008-01-10 11:05:33.542858180 +0800
@@ -0,0 +1,4 @@
+## These variables are used by ss5 socks service
+## You will want to fill in your own ss5 start options
+#
+SS5_OPTS=""

coolzsb 发表于 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,把其中的

            auth    0.0.0.0/0               -               -

            修改为

               auth    0.0.0.0/0               -               u

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

               用户名 密码

         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,除掉这行:

         permit -      0.0.0.0/0       -       0.0.0.0/0       -       -       -       -       -


      添加:

         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 -

nwpulotus 发表于 2008-02-27 23:58

为什么按照这么做会出现
Error parsing configuration file. SS5 exiting...

coolzsb 发表于 2008-02-28 10:57

ss5的配置文件里面有错误的配置语句,你瞅一眼自己的配置文件:/etc/opt/ss5/目录下的那些文件,肯定有你写错的地方


原帖由 nwpulotus 于 2008-2-27 23:58 发表 http://bbs.chinaunix.net/images/common/back.gif
为什么按照这么做会出现
Error parsing configuration file. SS5 exiting...


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

nwpulotus 发表于 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 -
最后面多个‘-’

coolzsb 发表于 2008-02-29 09:46

?????是吗?这是我从我的ss5.conf里面copy出来的~~~~

原帖由 nwpulotus 于 2008-2-29 00:45 发表 http://bbs.chinaunix.net/images/common/back.gif
嗯,确实写错了,仔细阅读了下里面的注释才明白。
你那个
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栏的:


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



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

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

nwpulotus 发表于 2008-03-01 23:29

回复 #7 coolzsb 的帖子

# *** glibc detected *** /usr/sbin/ss5: double free or corruption (!prev): 0x09c23640 ***
======= Backtrace: =========
/lib/libc.so.6
/lib/libc.so.6(cfree+0x90)
/lib/libc.so.6(fclose+0x136)
/usr/lib/ss5/mod_authentication.so(S5PwdFileClose+0x26)
/usr/lib/ss5/mod_authentication.so(Authentication+0x3e5)
/usr/sbin/ss5(S5Core+0x132b)
/lib/libpthread.so.0
/lib/libc.so.6(clone+0x5e)
======= Memory map: ========
*** glibc detected ***

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

coolzsb 发表于 2008-03-02 10:01

你的glibc版本的问题,很麻烦,最简单的办法就是换一个版本的Linux

原帖由 nwpulotus 于 2008-3-1 23:29 发表 http://bbs.chinaunix.net/images/common/back.gif
# *** glibc detected *** /usr/sbin/ss5: double free or corruption (!prev): 0x09c23640 ***



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

nwpulotus 发表于 2008-03-02 17:43

噢。不好意思,明白了,以前我是用yum install ss5 安装的,但源里面的ss5版本较低,所以跟你说的不一样,后来我从官网上下了个新版本安装后才发现新版本比老版本确实多一个参数的。
谢谢你噢~
页: [1] 2
查看完整版本: Socks 代理服务(ss5)设置指南