Socks 代理服務(ss5)設置指南

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

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的文檔貼上來吧。
《解決方案》

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=""
《解決方案》

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 -
《解決方案》

為什麼按照這麼做會出現
Error parsing configuration file. SS5 exiting...
《解決方案》

ss5的配置文件裡面有錯誤的配置語句,你瞅一眼自己的配置文件:/etc/opt/ss5/目錄下的那些文件,肯定有你寫錯的地方


原帖由 nwpulotus 於 2008-2-27 23:58 發表 http://bbs.chinaunix.net/images/common/back.gif
為什麼按照這麼做會出現
Error parsing configuration file. SS5 exiting...


簽名
---
有問題不怕,排錯的時候也是自己提高的過程。
《解決方案》

回復 #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 -
最後面多個『-』
《解決方案》

?????是嗎?這是我從我的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



簽名
---
怪事年年有,今天特別多?

簽名
---
四年一次的今天果然不同凡響
《解決方案》

回復 #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 出現上面一大串的提示就又死了。
《解決方案》

你的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的問題,我也怕著它來著
《解決方案》

噢。不好意思,明白了,以前我是用yum install ss5 安裝的,但源裡面的ss5版本較低,所以跟你說的不一樣,後來我從官網上下了個新版本安裝后才發現新版本比老版本確實多一個參數的。
謝謝你噢~




[火星人 ] Socks 代理服務(ss5)設置指南已經有710次圍觀

http://coctec.com/docs/service/show-post-14456.html