Linux下socks5搭建和应用

socks介绍

  • SOCKS:防火墙安全会话转换协议 (Socks: Protocol for sessions traversal across firewall securely)
  • SOCKS 协议提供一个框架,为在 TCP 和 UDP 域中的客户机/服务器应用程序能更方便安全地使用网络防火墙所提供的服务。
  • 这个协议从概念上来讲是介于应用层和传输层之间的 “中介层(shim-layer)”,因而不提供如传递 ICMP 信息之类的网络层网关服务。
  • SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。
  • SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。

安装socks5

  • 解决依赖关系
1
yum -y install pam-devel openldap-devel openssl-devel
  • 编译安装
1
2
3
4
5
wget https://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
tar xf ss5-3.8.9-8.tar.gz
cd ss5-3.8.9/
./configure
make && make install

配置

  • 配置备份
1
mv /etc/opt/ss5/ss5.conf{,.bak}
  • 修改认证方式/etc/opt/ss5/ss5.conf
    默认是无用户认证,需要使用-u
1
2
auth 0.0.0.0/0 - u
permit - 0.0.0.0/0 - 0.0.0.0/0 - - - - -
  • 添加用户名密码/etc/opt/ss5/ss5.passwd
    每行一个 用户 密码,使用空格分隔
1
2
test1 12345
test2 56789
  • 修改ss5启动的参数,自定义代理端口 /etc/sysconfig/ss5(如果不设置,默认是1080)
    此文件ss5启动时会主动加载
1
2
# Add startup option here
SS5_OPTS=" -u root -b 0.0.0.0:10080"
  • 创建服务控制脚本/usr/sbin/ss5_ctl.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash
#
# chkconfig: 345 20 80
# description: This script takes care of starting \
# and stopping ss5
#

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

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0

[ -f /usr/sbin/ss5 ] || exit 0
fi

# Test custom variables
test -f /etc/sysconfig/ss5 && . /etc/sysconfig/ss5

# See how we were called.
case "$1" in
start)
# Start daemon.
echo -n "Starting ss5... "
if [ $OS = "Linux" ]; then
daemon /usr/sbin/ss5 -t $SS5_OPTS
touch /var/lock/subsys/ss5
else
if [ $OS = "SunOS" ]; then
/usr/sbin/ss5 -t
touch /var/lock/subsys/ss5
else
/usr/local/sbin/ss5 -t
fi
fi
echo "done"
;;
stop)
# Stop daemon.
echo "Shutting down ss5... "
if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then
killproc ss5
rm -f /var/lock/subsys/ss5
else
killall ss5
fi
rm -f /var/run/ss5/ss5.pid
echo "done"
;;
reload)
# Reload configuration
if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then
echo -n "Reloading ss5... "
killproc ss5 -1
else
pkill -HUP ss5
fi
echo "done reload"
;;
restart)
# Restart daemon
echo -n "Restarting ss5... "
$0 stop
$0 start
;;
status)
if [ $OS = "Linux" ] || [ $OS = "SunOS" ]; then
status ss5
fi
;;
*)
echo "Usage: ss5 { start | stop | status | restart | reload }"
exit 1
;;
esac

exit 0
  • 服务控制
1
2
ss5_ctl.sh start 
netstat -tunlp | grep ss5

应用

应用场景:办公室使用的是电信网络,运维工程师需要在办公室使用SecureCRT来远程一台配置了移动IP的服务器。由于电信到移动跨运营商导致无法使用SecureCRT直接ssh远程。因此可以使用一台配置了ss5的服务器来做代理。前面已经说明了怎么配置,接下来补充一下SecureCRT如何使用ss5。

  • 添加firewall
    打开SecureCRT,打开 Options => Global Options...

  • 对应的session使用firewall,选择要ssh远程的的session,右键单击属性,选择防火墙

有钱任性,请我吃包辣条
0%