Socks 是一种代理协议,分为socks4和socks5两种,前者socks4基于UDP,后者socks5基于TCP。

Socks 使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。

Socks 协议提供一个框架,为在 TCP 和 UDP 域中的客户机/服务器应用程序能更方便安全地使用网络防火墙所提供的服务。这个协议从概念上来讲是介于应用层和传输层之间的中介层(shim-layer),因而不提供如传递 ICMP 信息之类的网络层网关服务。

 

Squid

Scoks 和 Http 区别:

简单来说就是tcp/udp和http的区别,在7层网络模型中也是处于不同的分层中,因为 http请求是明文传输可以被拦截并过滤,所以当走socks代理后会对明文内容进行加密传输,对加密后的内容是没法或非常困难过滤的,所以可以安全传到服务端,同理,服务端响应的时候又是加密通过tcp/udp回复,这样就完成了访问。

 

CentOS 搭建 socks 代理有许多种方式,本文将尽所能的为大家带来精彩而全面的总结。

 

一、 ss5 搭建socks代理

1. 安装依赖库

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

 

2. 下载安装 ss5

wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz
tar -zxvf ss5-3.8.9-8.tar.gz
cd ss5-3.8.9/
./configure
make && make install
chmod a+x /etc/init.d/ss5
/etc/init.d/ss5 start

 

3. 修改配置文件 ss5.conf

vim /etc/opt/ss5/ss5.conf

去掉下面两行的注释后,结果如下:

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

保存,并重启代理

/etc/init.d/ss5 restart

在/etc/sysconfig/ss5 中,取消注释

vim /etc/sysconfig/ss5

SS5_OPTS=" -u root"

ss5代理查看日志:

tail -f /var/log/ss5/ss5.log

配置开机自启动:

chkconfig --add ss5
chkconfig  ss5 on

 

4. 验证代理

socks 支持通过设置 socks4 和 socks5 代理,访问 http 和 https 网站

curl -m 30 --retry 3 --socks5 58.87.90.149:1080 https://proxy.mimvp.com/exist.php | grep 'color="red"'
                             
  <font color="red">58.87.90.149</font>
curl -m 30 --retry 3 --socks4 58.87.90.149:1080 https://proxy.mimvp.com/exist.php | grep 'color="red"' 
                             
  <font color="red">58.87.90.149</font>

 

5. 添加代理认证

很多时候,代理需要用户和密码认证后,才可以使用,因此需要添加代理认证的配置

1)首先,auth 和 permit 的第一个横杠“-” 修改为 “u”

auth    0.0.0.0/0               u               -
permit
u       0.0.0.0/0       -       0.0.0.0/0       -       -       -       -       -  

2)其次,配置文件里添加用户和密码

vim /etc/opt/ss5/ss5.passwd

添加一行:

mimvp-guest     i-love-mimvp

3)重启服务 ss5,使配置生效

/etc/init.d/ss5 restart

4)验证用户密码认证是否生效

# curl -m 30 --retry 3 -u mimvp-guest:i-love-mimvp --socks5 58.87.90.149:1080 https://proxy.mimvp.com/exist.php | grep 'color="red"'
                                <font color="red">58.87.90.149</font>
#
curl -m 30 --retry 3 -u mimvp-guest:i-love-mimvp --socks4 58.87.90.149:1080 https://proxy.mimvp.com/exist.php | grep 'color="red"' 
                                <font color="red">58.87.90.149</font>

 

说明:

本文为了测试简单,使用了curl 命令行进行验证,也可以使用Chrome插件 SwitchyOmega 或  Proxifier 进行验证。

以上三种方法,都可以在米扑代理的博客或官网找到,米扑代理是老牌的代理服务商,对代理非常精通,BAT实力派

curl 和 Proxifier 请见米扑代理官网的代理使用示例:https://proxy.mimvp.com/demo2.php

Chrome 浏览器插件 SwitchyOmega 请见米扑博客:浏览器设置代理的插件

 

 

二、 Shadowsocks 搭建socks代理

shadowsocks-libev 官网:https://github.com/mimvp/shadowsocks-libev

Shadowsocks-libev is a lightweight secured SOCKS5 proxy for embedded devices and low-end boxes.

 

1. 安装依赖库

yum -y install epel-release gcc gettext autoconf libtool automake make openssl-devel pcre-devel asciidoc xmlto zlib-devel openssl-devel libsodium-devel udns-devel libev-devel

 

2. 下载更新 repo

wget https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo

查看其内容,如下:

cat librehat-shadowsocks-epel-7.repo

[librehat-shadowsocks]
name=Copr repo for shadowsocks owned by librehat
baseurl=https://copr-be.cloud.fedoraproject.org/results/librehat/shadowsocks/epel-7-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/librehat/shadowsocks/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1

 

3. 拷贝安装repo

拷贝repo文件到 /etc/yum.repos.d/目录下

cp librehat-shadowsocks-epel-7.repo /etc/yum.repos.d/

更新yum源,安装 repo

yum -y update
yum -y install shadowsocks-libev

 

4. 配置 Shadowsocks

vim /etc/shadowsocks-libev/config.json 

{
    "server":"127.0.0.1",
    "server_port":8388,
    "local_port":1080,
    "password":"i-love-mimvp",
    "timeout":60,
    "method":"chacha20-ietf-poly1305",
    "mode":"tcp_and_udp"
}

配置项字段含义:

字段 字段描述
server 服务器监听的地址 [^1]
server_port 服务端监听的端口,默认8388
local_address 本地监听端口
local_port 本地监听端口
password 用以加密的密匙,链接时使用
timeout 超时时间(秒)
method 加密方法,可以换做使用 aes-256-cfb
fast_open 是否启用TCP_Fast_Open,数值为 true - false
workers worker数量

 

5. 启动 Shadowsocks

配置完成之后,可以使用命令行启动 Shadowsocks

# /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json 
 2017-10-11 22:38:41 INFO: initializing ciphers... chacha20-ietf-poly1305
 2017-10-11 22:38:41 INFO: tcp server listening at 127.0.0.1:8388
 2017-10-11 22:38:41 INFO: running from root user

 

6. 验证代理

# curl -m 30 --retry 3 --socks5 58.87.90.149:1080 https://proxy.mimvp.com/exist.php | grep 'color="red"'
                             
  <font color="red">58.87.90.149</font>
# curl -m 30 --retry 3 --socks4 58.87.90.149:1080 http://proxy.mimvp.com/exist.php | grep 'color="red"' 
                             
  <font color="red">58.87.90.149</font>

 

7. 添加成系统服务

systemctl start shadowsocks-libev.service
systemctl status shadowsocks-libev.service
systemctl enable shadowsocks-libev.service

 

8. 查看日志

# journalctl | grep ss-server               
Oct 11 22:53:32 mimvp-bj ss-server[32564]: 2017-10-11 22:53:32 INFO: UDP relay enabled
Oct 11 22:53:32 mimvp-bj ss-server[32564]: 2017-10-11 22:53:32 INFO: initializing ciphers... chacha20-ietf-poly1305
Oct 11 22:53:32 mimvp-bj ss-server[32564]: 2017-10-11 22:53:32 INFO: tcp server listening at 127.0.0.1:8388
Oct 11 22:53:32 mimvp-bj ss-server[32564]: 2017-10-11 22:53:32 INFO: udp server listening at 127.0.0.1:8388
Oct 11 22:56:06 mimvp-bj ss-server[401]: 2017-10-11 22:56:06 INFO: UDP relay enabled
Oct 11 22:56:06 mimvp-bj ss-server[401]: 2017-10-11 22:56:06 INFO: initializing ciphers... chacha20-ietf-poly1305
Oct 11 22:56:06 mimvp-bj ss-server[401]: 2017-10-11 22:56:06 INFO: tcp server listening at 127.0.0.1:8388
Oct 11 22:56:06 mimvp-bj ss-server[401]: 2017-10-11 22:56:06 INFO: udp server listening at 127.0.0.1:8388

 

 

三、CentOS 搭建 Shadowsocks 客户端和服务器

1. 安装依赖库

Shadowsocks 有各种版本,如 CentOS、Ubuntu、Python等版本,此处用Python版本,使用pip安装shadowsocks

yum -y groupinstall "Development Tools"
yum -y install m2crypto python-setuptools
easy_install pip
pip install shadowsocks

Shadowsocks 软件包附带两个命令,ssserversslocal

ssserver用于服务端配置,sslocal用于客户端配置

 

2. 服务器配置文件

Shadowsocks 有两种配置方法,一种是命令行参数配置,一种是JSON配置文件。

1)命令行参数配置

参数名 参数意义
-s 服务器地址
-p 服务器端口号
-k 服务器密码
-m 服务器加密方式
-t 服务器超时时间
-c 配置文件路径
–fast-open 快速打开模式,仅Unix/Linux系统可用,数值为 true - false
–workers 工作者数量

每次运行Shadowsocks 命令行传参,将一大堆参数传进去是件很麻烦的事情。

所以,一般情况下都是采用配置文件的方式来配置,通过-c参数将配置文件路径传入。

 

2)JSON配置文件

Shadowsocks 的配置文件是一个json形式的文件,各参数的意义和命令行参数意义相同。

vim /etc/shadowsocks.json

{  
  "server" : "0.0.0.0",  
  "server_port" : 53281,  
  "password" : "i-love-mimvp",  
  "timeout" : 300,
  "method" : "aes-256-cfb",  
  "local_address" : "127.0.0.1",  
  "local_port" : 1080,
  "fast_open" : false
}

参数说明:

"server" : "0.0.0.0"   表示服务器端配置server ip地址,一般写 "0.0.0.0" ;客户端配置server时,则需要写服务器真实的ip地址

"server_port" : 53281  表示服务器配置的端口号,供客户端访问使用。此端口号可以随便写,如 3128、8118、53281等

"password" : "i-love-mimvp"  表示服务器与客户端交互认证的密钥,一般用复杂点的密码

"timeout" : 300   表示连接服务器超时时间,一般设置为 120 - 600秒

"method" : "aes-256-cfb"   表示加密算法,还可以为 "chacha20-ietf-poly1305"

"local_address" : "127.0.0.1"  表示客户端ip地址,可只在客户端配置,服务器端不用配置

"local_port" : 1080  表示客户端port端口,可只在客户端配置,服务器端不用配置

"fast_open" : false   表示是否启用TCP_Fast_Open快速打开模式,仅Unix/Linux系统可用,数值为 true - false

 

如上,配置完成保存后,在服务器上启动,如下:

# ssserver -c /etc/shadowsocks.json 
INFO: loading config from /etc/shadowsocks.json
2017-10-12 13:07:04 WARNING  warning: your timeout 60 seems too short
2017-10-12 13:07:04 INFO     loading libcrypto from libcrypto.so.10
2017-10-12 13:07:04 INFO     starting server at 0.0.0.0:53281

 

以上启动方式,在前台运行会占用shell终端,推荐从后台启动与关闭,如下:

ssserver -c /etc/shadowsocks.json -d start
ssserver -c /etc/shadowsocks.json -d stop

以上都是在root用户下运行的,一般使用普通用户运行:

ssserver -c /etc/shadowsocks.json --user nobody -d start

以上都需要自己手动启动shadowsocks,添加开机自启动:

echo "ssserver -c /etc/shadowsocks.json --user nobody -d start" >> /etc/rc.local

 

3. 客户端配置文件

vim /etc/shadowsocks.json

{  
  "server": "58.87.90.149",  
  "server_port" : 53281,  
  "password" : "i-love-mimvp",  
  "timeout" : 300,
  "method" : "aes-256-cfb",  
  "local_address" : "127.0.0.1",  
  "local_port" : 1080  
}

参数说明:

"server": "58.87.90.149"   表示服务器的真实ip地址,即步骤2 的服务器IP地址

"local_address" : "127.0.0.1"   表示客户端的ip地址,用于接口转发消息请求

"local_port" : 1080   表示客户端的port端口号,用于接口转发消息请求

其它参数,跟服务器配置保持一致即可,含义基本一致

如上,配置完成保存后,在客户端上启动,如下:

# sslocal -c /etc/shadowsocks.json &
INFO: loading config from /etc/shadowsocks.json
2017-10-12 13:08:46 WARNING  warning: your timeout 60 seems too short
2017-10-12 13:08:46 INFO     loading libcrypto from libcrypto.so.10
2017-10-12 13:08:46 INFO     starting local at 127.0.0.1:1080

 

以上启动方式,在前台运行会占用shell终端,推荐从后台启动与关闭,如下:

sslocal -c /etc/shadowsocks.json -d start
sslocal -c /etc/shadowsocks.json -d stop

以上都是在root用户下运行的,一般使用普通用户运行:

sslocal -c /etc/shadowsocks.json --user nobody -d start

以上都需要自己手动启动shadowsocks,添加开机自启动:

echo "sslocal -c /etc/shadowsocks.json --user nobody -d start" >> /etc/rc.local

 

4. 安装 privoxy

上述步骤1-3,安装配置好了shadowsocks,但是还不能使用,因为配置的socks5代理,使用http(s)网络请求现在还不支持socks5代理,只支持http/https代理。因此,还需要安装privoxy代理,它能把所有http请求转发给shadowsocks。

privoxy 官网http://www.privoxy.org/sf-download-mirror/

下载最新版本privoxy-3.0.26-stable-src.tar.gz

centos-7-3-an-zhuang-pei-zhi-socks-dai-li-fu-wu-qi-02

privoxy 有两种安装方式,可以下载编译源码自定义安装,也可以yum命令安装,本文采用命令安装

1)安装 privoxy

yum -y install epel-release  
yum -y install privoxy

 

2)配置文件

vim /etc/privoxy/config

搜索 “forward-socks5t”,添加一行转发代理IP

forward-socks5t   /               127.0.0.1:1080 .

搜索 “listen-address”,确认开启了如下监听

listen-address  127.0.0.1:8118

 

3)配置转发代理

配置 /etc/profile 或 ~/.bashrc 文件,这里配置 /etc/profile

vim /etc/profile

添加如下内容:

export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
export ftp_proxy=http://127.0.0.1:8118

保存,使之生效

source /etc/profile

 

4)启动服务 privoxy

systemctl restart privoxy.service
systemctl start privoxy.service 
systemctl stop privoxy.service 
systemctl status privoxy.service 
systemctl enable privoxy.service 

如果命令行手动启用,可以执行(不推荐):

privoxy --user privoxy /etc/privoxy/config

 

5)关闭防火墙或开放端口访问

方式1:关闭防火墙

/etc/init.d/iptables stop

方式2:开放端口访问

iptables -A INPUT -p tcp --dport 53281 -j ACCEPT
iptables -A INPUT -p udp --dport 53281 -j ACCEPT

重启防火墙

/etc/init.d/iptables restart

注意:若采用的阿里云、腾讯云、AWS等云服务器,记得要在安全策略里开放端口号

 

6)maven 配置代理

有时,我们想让maven下载编译的时候也使用代理,找到conf/settings.xml文件,取消注释稍作修改即可:

<proxy>    
  <id>optional</id>    
  <active>true</active>    
  <protocol>http</protocol>    
  <username></username>    
  <password></password>    
  <host>127.0.0.1</host>    
  <port>1080</port>    
  <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>    
</proxy>   

 

5. 验证代理

在客户端,验证设置的代理是否生效

# curl -m 30 --retry 3 http://proxy.mimvp.com/exist.php | grep 'color="red"'
                             
  <font color="red">58.87.90.149</font>
# curl -m 30 --retry 3 https://proxy.mimvp.com/exist.php | grep 'color="red"'
                             
  <font color="red">58.87.90.149</font>

经米扑代理测试,支持访问  http 和 https 网站!

 

问题与解答:

1. 如果不能访问,请重启机器,并依次打开shadowsocks 和 privoxy再测试

sslocal -c /etc/shadowsocks.json -d stop
sslocal -c /etc/shadowsocks.json -d start
systemctl restart privoxy.service

 

2. 如果不想使用代理了,注释掉 /etc/profile 文件里的代理设置

#export http_proxy=http://127.0.0.1:8118
#export https_proxy=http://127.0.0.1:8118
#export ftp_proxy=http://127.0.0.1:8118

source /etc/profile

关闭服务,并重复机器

sslocal -c /etc/shadowsocks.json -d stop
systemctl stop privoxy.service
reboot

 

6. 性能调优 Shadowsocks

1) 提高最大连接数

编辑系统配置文件,在文件最底部增加两行

vim /etc/security/limits.conf

* soft nofile 51200
* hard nofile 51200

然后,在启动shadowsocks服务器之前,先设置一下ulimit:

ulimit -n 51200

 

2)调整内和参数

调整内核参数的目标是:

  • 尽可能重用连接和端口号
  • 尽可能增大队列和缓冲区
  • 为高延迟和高流量选择合适的TCP拥塞算法

下面是一个生产服务器的配置(/etc/sysctl.conf),有些不能使用,可能需要自己编译内核模块。

fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla

修改之后需要运行sysctl -p来重载配置,使其生效

sysctl -p

 

 

本文是米扑代理授权米扑博客,精心整理总结,测试验证成功,谢绝转载!

米扑代理,是一家由百度、阿里、小米等技术工程师创业做的产品,非常好用

米扑代理https://proxy.mimvp.com   (国内第一家使用 HTTPS 加密网站的代理服务商)

米扑代理价格也很便宜https://proxy.mimvp.com/price.php

centos-7-install-squid-proxy-server-09

 

 

 

参考推荐

Optimizing Shadowsocks

Configuration via Config File

CentOS 7安装squid代理服务器推荐

CentOS 7.3 安装配置Squid代理服务器

浏览器设置代理的插件

Linux shell脚本通过expect实现自动输入密码