在 CentOS 7 下使用 ss5 安装 SOCKS5 代理服务器

关键字

CentOS, ss5, CentOS 7, ss5-3.8.9, SOCKS, SOCKS5 Proxy Server, SOCKET, ss5.passwd, ss5.conf

背景概述

ss5 是一个 适用于 Linux, Solaris 和 FreeBSD 的 SOCKS5 服务器,它实现了 SOCKS4 和 SOCKS5 协议。SOCKS5 是代理服务器的标准协议,如果你想完整理解协议每字节的意义和细节,请阅读:

注:SOCKS 不是 SOCKET。SOCKS 是代理协议,实现这个协议可以通过一个代理将数据包中转出去,例如 Fiddler 调试软件即启动了一个本地代理,用来拦截网络数据包;SOCKET 翻译为“套接字 ”,用于描述 IP 和 端口,是一个句柄,可用来实现计算机间通信。它本质是 TCP/IP 协议的封装,是一套编程接口,源于 Unix,现代操作系统都带有自家的实现。

本文末尾还包含了几条 CentOS 7 安装软件并排查验证的总结。

本文旨在帮助读者在 CentOS 7 下顺利安装 ss5 最新版,配置实现 SOCKS 代理服务器,本安装过程应已经过笔者反复测试,以确保成功。

如果按此文安装时遇到任何问题,请留言或通过【桃花岛】官方联系我们。

软件依赖

  • CentOS 7
  • ss5-3.8.9 源码
  • Development Tools Group
  • gcc
  • automake
  • autoconf
  • libtool
  • make
  • yum-utils
  • pam-devel
  • openldap-devel
  • openssl-devel

具体步骤

升级 EPEL

运行下面的命令安装 CentOS 7 的最新版本 EPEL 仓库,然后更新系统

yum install epel-release
yum update -y

安装编译工具

yum groupinstall 'Development Tools' -y
yum install gcc automake autoconf libtool make yum-utils wget -y

安装依赖包

yum install pam-devel openldap-devel openssl-devel -y

下载源码,编译安装

cd /usr/local/src/
wget https://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
tar xzf ss5-3.8.9-8.tar.gz
cd ss5-3.8.9
./configure
./make
./make install

如果不需要用户和密码来授权代理服务,此时可以运行 ss5 启动代理服务器。

配置 ss5 使用用户和密码授权来提供 SOCKS5 代理服务

用 vim 修改 ss5.conf 文件,去掉 #auth 和 #permit 开头的两行的 # ,将授权由 – 改为 u ,改后如下:

#     SHost      SPort           Authentication
auth  0.0.0.0/0  -               u

#      Auth  SHost      SPort  DHost      DPort  Fixup  Group  Band  ExpDate
permit u     0.0.0.0/0  -      0.0.0.0/0  -      -      -      -     -

用 vim 修改 ss5.passwd 文件,按 “user password ” 单独一行的格式加入用户和密码对列表,保存退出

user    password
admin   TOPSECRET

以上配置,即加入了两个用户和对应的密码。

关于 ss5 更详细的配置,请见官方文档

安装验证

运行代理服务

[root@carbon ~]# ss5 -u root -b 0.0.0.0:1080

检查服务状态

[root@carbon ~]# tail -f /var/log/ss5/ss5.log
[13/Aug/2019:00:08:01 CST] [INFO] Setting dynamic configuration.
[13/Aug/2019:00:08:01 CST] [INFO] Cleaning old configuration.
[13/Aug/2019:00:08:01 CST] [INFO] Loading and validating new configuration.
[13/Aug/2019:00:08:01 CST] [INFO] Loading configuration completed
[13/Aug/2019:00:08:01 CST] [INFO] Loading HA configuration completed
[13/Aug/2019:00:08:01 CST] [INFO] Switching to new configuration.
[13/Aug/2019:00:08:01 CST] [VERB] Role is ALONE.
[13/Aug/2019:00:08:01 CST] [INFO] Loading network interfaces.
[13/Aug/2019:00:08:04 CST] [7190] 192.168.0.5 admin "CONNECT" STARTED 0 0 0 (192.168.0.5:30258 -> 114.55.101.194:443)
[13/Aug/2019:00:08:05 CST] [7190] 192.168.0.5 admin "CONNECT" TERMINATED 108467 776 1 (192.168.0.5:30258 -> 114.55.101.194:443)
[root@carbon ~]# ps -ef | grep ss5                 
root      7189     1  0 01:08 ?        00:00:00 ss5 -u root -b 0.0.0.0:1080
root      7371  7001  0 01:31 pts/1    00:00:00 grep --color=auto ss5
[root@carbon ~]# netstat -anp | grep ss5           
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      7189/ss5  

客户端连接验证

运行

curl --socks5 127.0.0.1:1080 --proxy-user user:password https://imglab.cn

返回网页源码即为成功。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
        <link rel="profile" href="http://gmpg.org/xfn/11">
                <title>IT桃花岛 – 终极技术内参</title>
...略

问题汇总

问题:[0] [ERRO] $S5ServerMake$: (Address already in use).

[root@carbon ~]# tail -f /var/log/ss5/ss5.log
[13/Aug/2019:01:03:50 CST] [INFO] Copyright (C) 2002-2013 by Matteo Ricchetti - <matteo.ricchetti@libero.it>
[13/Aug/2019:01:03:50 CST] [INFO] Setting dynamic configuration.
[13/Aug/2019:01:03:50 CST] [INFO] Cleaning old configuration.
[13/Aug/2019:01:03:50 CST] [INFO] Loading and validating new configuration.
[13/Aug/2019:01:03:50 CST] [INFO] Loading configuration completed
[13/Aug/2019:01:03:50 CST] [INFO] Loading HA configuration completed
[13/Aug/2019:01:03:50 CST] [INFO] Switching to new configuration.
[13/Aug/2019:01:03:50 CST] [VERB] Role is ALONE.
[13/Aug/2019:01:03:50 CST] [INFO] Loading network interfaces.
[13/Aug/2019:01:03:50 CST] [0] [ERRO] $S5ServerMake$: (Address already in use).

解决: 查看日志,修改配置并重启服务

提示端口被占用,原因是未配置用户时启动了服务。可以确认端口监听,查看进程 id,并 kill 已运行进程,再次启动。

[root@carbon ~]# netstat -anp | grep ss5
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      6764/ss5    
[root@carbon ~]# ps -ef | grep ss5
nobody    6764     1  0 00:31 ?        00:00:00 ss5
root      7088  7001  0 01:04 pts/1    00:00:00 grep --color=auto ss5
[root@carbon ~]# kill 6764
[root@carbon ~]# ss5 -u root -b 0.0.0.0:1080

问题:curl: (7) No authentication method was acceptable.

客户端提示,未授权方法被拒绝。

解决: 检查修改配置并重启服务

kill 已运行进程,编辑配置文件 ss5.passwd,并检查 ss5.conf 文件后重启。

[root@carbon ~]# netstat -anp | grep ss5
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      6764/ss5    
[root@carbon ~]# ps -ef | grep ss5
nobody    6764     1  0 00:31 ?        00:00:00 ss5
root      7088  7001  0 01:04 pts/1    00:00:00 grep --color=auto ss5
[root@carbon ~]# kill 6764
[root@carbon ~]# ss5 -u root -b 0.0.0.0:1080

总结

  • 本文在讲解 ss5 软件的安装配置和服务启动的过程中,其实包含了 CentOS 7 乃至 Linux 下安装非仓库软件的通用方法:
    1. 升级系统
    2. 安装编译软件和仓库配置软件
    3. 安装软件依赖包
    4. 下载软件源代码,配置,编译
    5. 验证安装
    6. 修改配置文件
    7. 启动服务
    8. 验证服务
    9. 还有一步是可选的:将服务加入 systemd 自启动,笔者将另撰文讲解
  • 排查 CentOS Linux 进程的三板斧:
    1. 进程、端口、日志
    2. 检查防火墙:firewalld,iptables
    3. 检查 SELinux

以 ss5 为例,命令如下:

ps -ef | grep ss5
netstat -anp | grep ss5
tail -f /var/log/ss5/ss5.log
systemctl status firewalld
sestatus -v

相关文章

暂无

发表评论

电子邮件地址不会被公开。 必填项已用*标注