1. 介绍
代理即网络代理)是一种特殊的网络服务, 允许一个网络终端客户端)通过这个服务与另一个终端服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器Proxy Server)
根据代理服务器的作用可分为如下类型
– HTTP代理: 主要是代理浏览器访问网页
– SOCKS代理: 是一种通用的代理类型, 支持多种协议,分SOCKS 4 和SOCKS 5两种
– FTP代理: 代理客户端的FTP软件访问FTP服务器
– VPN代理: 在共用网络上建立专用网络的技术
从功能上, 代理服务器又可分为如下类型
– 正向代理Forward Proxy): 访问原来无法访问的资源, Cache, 对客户端访问授权, 隐藏行踪
– 反向代理Reverse Proxy): 负载均衡, CDN
– 透明代理: NAT转发
Linux上代理服务器软件众多, 常用的有TinyProxy、Squid、CCProxy、Wireguard、SS5、Dante、Shadowsocks
2. TinyProxy
TinyProxy是一款轻量级HTTP代理软件, 提供正向代理功能, 与Squid支持HTTP, HTTPS, FTP)相似
2.1 安装
# Ubuntu apt-get update apt-get install tinyproxy -y # CentOS yum install tinyproxy -y
2.2 配置
TinyProxy的配置文件为/etc/tinyproxy/tinyproxy.conf
# 允许访问代理的IP地址, 默认仅允许本地, 注掉改行表示允许所有人访问 Allow 127.0.0.1 # 代理服务器的端口号, Port 8888 # 白名单文件配置 Filter "/etc/tinyproxy/filter" # 使用URL过滤而不是 domains FilterURLs On # 允许代理过滤文件里的地址. 若不允许, 此处设置为 No FilterDefaultDeny Yes
查看日志的命令如下
# tail -f /var/log/tinyproxy/tinyproxy.log
2.3 启动
TinyProxy启动相关命令如下
# systemctl start tinyproxy.service
# systemctl stop tinyproxy.service
# systemctl status tinyproxy.service
# systemctl enable tinyproxy.service
2.4 防火墙
笔者一般都是开启防火墙的, 所以需要进行防火墙配置
# systemctl start firewalld.service # systemctl enable firewalld.service # cp /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/tinyproxy.xml # vi /usr/lib/firewalld/services/tinyproxy.xml ... # cat /usr/lib/firewalld/services/tinyproxy.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>tinyproxy</short> <description>Tinyproxy is a light-weight HTTP/HTTPS proxy service.</description> <port protocol="tcp" port="8888"/> </service> # firewall-cmd --permanent --zone=public --add-service=tinyproxy # firewall-cmd --reload
2.5 使用
2.5.1 Windows
在Windows上大部分软件都是有代理设置的界面, 按照提示在HTTP代理处填写代理服务器的IP地址和端口即可
2.5.2 Linux
在Linux上, 通常在.bash_profile或者.bashrc中加入如下环境变量
export http_proxy="http://ip:port" export https_proxy="http://ip:port" export no_proxy="127.0.0.1, localhost, *.cnn.com, 192.168.1.10, domain.com:8080"
如果需要登陆, 应为
export http_proxy="http://username:password@ip:port" export https_proxy="http://username:password@ip:port"
但是不是所有应用会使用上面的环境变量, 不同应用可能会有自己的代理设置方法
比如git, 其代理配置方法如下
# git config -global http.proxy 'http://ip:port' # git config -global https.proxy 'http://ip:port'
2.6 验证
在客户端上运行如下命令可以验证代理服务器是否配置成功
# curl url --proxy ip:port
2.7 问题
在实际使用过程中, 发现了如下问题
– 在使用阿里云等云服务器部署时, 需要在安全组配置中开放代理服务器的端口
– 无法访问谷歌等网站, 一番查询之后了解, HTTP代理因为数据透明无法通过GWF的检查…
3. SS5
SS5是一款SOCK 5代理软件
3.1 安装
# yum install gcc openldap-devel pam-devel openssl-devel -y # wget https://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz # tar -xzvf ss5-3.8.9-8.tar.gz # cd ss5-3.8.9 # ./configure # make # make install
3.2 配置
修改主配置文件/etc/opt/ss5/ss5.conf, 设置为用户密码访问权限
# vim /etc/opt/ss5/ss5.conf ... # 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 /etc/opt/ss5/ss5.passwd root 123456
修改默认端口, SOCK 5默认端口为1080, 可通过如下方式修改
# vim /etc/sysconfig/ss5 SS5_OPTS=" -u root -b 0.0.0.0:9090"
3.3 启动
# 增加执行权限 # chmod a+x /etc/rc.d/init.d/ss5 # 启动 # /etc/rc.d/init.d/ss5 restart # service ss5 start # 关闭 # /etc/rc.d/init.d/ss5 stop # service ss5 stop # 开启启动 # chkconfig --add ss5 # chkconfig --level 345 ss5 on
3.4 其他
# 查看连接情况 # netstat -an | grep 1080 # 查看日志 # tail -f /var/log/ss5/ss5.log
3.5 问题
问题一: 客户端Firefox使用SimpleProxy设置SOCK 5代理后无法访问任何网站, 查看服务器日志发现一直在刷如下错误信息
"" "" ISERROR - - - -:- -- -:-) Socks method unknown or bad request)
最后发现是插件的问题导致没有用户名和密码信息
问题二未亲测): 重启系统后,/var/run/ss5/丢失导致/var/run/ss5/ss5.pid创建失败, 自动/手动启动失败, 需先创建目录
# vi /etc/rc.d/rc.local mkdir /var/run/ss5/ # chmod a+x /etc/rc.d/rc.local
TIPS: 注意前面我们配置了用户名密码, 所以在客户端设置代理同样需要设置用户名密码
4. Dante
Dante是另一款SOCK 5代理软件
4.1 安装
# wget http://www.inet.no/dante/files/dante-1.4.2.tar.gz # tar -xzvf dante-1.4.2.tar.gz # cd dante-1.4.2 # ./configure # make # make install
4.2 配置
# cat /etc/sockd.conf ## general configuration taken from FAQ; <URL:http://www.inet.no/dante/FAQ>) internal: eth0 port = 9090 external: eth0 socksmethod: none user.privileged: root user.notprivileged: nobody logoutput: /var/log/sockd.log ## client access rules client pass { from: 0/0 to: 0/0 } ## server operation access rules # block connections to localhost, or they will appear to come from the proxy. socks block { from: 0/0 to: lo log: connect } # block bind to ports lower than 1023 #socks block { # from: 0/0 to: 0/0 port le 1023 # command: bind # log: connect #} # allow the rest socks pass { from: 0/0 to: 0/0 protocol: tcp udp log: error connect disconnect }
更多配置选项, 参考<Dante configuration>
4.3 启动
# 启动程序 # /usr/local/sbin/sockd -D # 结束程序 # killall sockd # 查看日志 # tail -f /var/log/sockd.log
5. Shadowsocks
5.1 安装
# yum install python-pip # pip install shadowsocks
5.2 配置
# cat /etc/shadowsocks.json { "server":"0.0.0.0", "server_port":9090, "local_address": "127.0.0.1", "local_port":1080, "password":"mypassword", "timeout":300, "method":"aes-256-cfb", "fast_open": false }
5.3 启动
# 前台启动 # ssserver -c /etc/shadowsocks.json # 后台启动和停止 # ssserver -c /etc/shadowsocks.json -d start # ssserver -c /etc/shadowsocks.json -d stop # 查看日志 # tail -f /var/log/shadowsocks.log
5.4 问题
问题一: 代理访问失败, 查看日志如下
WARNING unsupported addrtype 104, maybe wrong password or encryption method ERROR can not parse header when handling connection from x.x.x.x:x
调查一番发现, 原来还需要在客户端上跑一个Shadowsocks client, 下载一个Windows版本即可
5.5 其他
由于前面较多都是SOCK代理, 而很多应用只支持HTTP代理, 所以通常还需要将SOCK5协议转换HTTP协议
这类软件包括Privoxy、Polipo等, 这里不做介绍
6. 总结
以上几款代理软件尝试下来结果如下:
– TinyProxy: 可以访问bing、baidu, 但是google、youtube、facebook无法访问
– SS5: 可以访问bing、youtube、baidu, 但是google、facebook无法访问
– Dante: 可以访问bing、baidu, 而youtube、google、facebook等均无法访问
– Shadowsocks: 可以访问bing、baidu、youtube, 而google、facebook等均无法访问
当然, 我使用的阿里云服务器虽然位于美国, 但是各项配置都毕竟差, 可能这个会很大程度上影响访问, 主要配置如下
CPU: 1核
内存: 1GiB
硬盘: 20GiB
带宽: 1Mbps
这里介绍一个测试带宽的工具speedtest-cli
# pip install speedtest-cli # 带宽为1Mbps # speedtest-cli Retrieving speedtest.net configuration... Testing from Alibaba x.x.x.x)... Retrieving speedtest.net server list... Selecting best server based on ping... Hosted by Unwired San Francisco, CA) [26.04 km]: 9.609 ms Testing download speed................................................................................ Download: 109.89 Mbit/s Testing upload speed................................................................................................ Upload: 1.60 Mbit/s # 带宽为10Mbps # speedtest-cli Retrieving speedtest.net configuration... Testing from Alibaba x.x.x.x)... Retrieving speedtest.net server list... Selecting best server based on ping... Hosted by Coastside Net Half Moon Bay, CA) [13.10 km]: 2.916 ms Testing download speed................................................................................ Download: 110.42 Mbit/s Testing upload speed................................................................................................ Upload: 12.00 Mbit/s
参考:
<Shadowsocks Wiki>
<浅析 正向代理 反向代理 透明代理>
<WireGuard介绍及客户端配置使用教程>