Linux代理服务器使用
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 # 白名单文件配置
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=""/>
</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.-.tar.gz
# cd ss5-3.8.
# ./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/ - u
...
# Auth SHost SPort DHost DPort Fixup Group Band ExpDate
#
permit u 0.0.0.0/ - 0.0.0.0/ - - - - -
用户配置
# vim /etc/opt/ss5/ss5.passwd
root
修改默认端口, 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 ss5 on
3.4 其他
# 查看连接情况
# netstat -an | grep # 查看日志
# 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..tar.gz
# cd dante-1.4.
# ./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 =
external: eth0 socksmethod: none
user.privileged: root
user.notprivileged: nobody logoutput: /var/log/sockd.log ## client access rules
client pass {
from: / to: /
} ## server operation access rules
# block connections to localhost, or they will appear to come from the proxy.
socks block { from: / to: lo log: connect } # block bind to ports lower than
#socks block {
# from: / to: / port le
# command: bind
# log: connect
#} # allow the rest
socks pass {
from: / to: /
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":,
"local_address": "127.0.0.1",
"local_port":,
"password":"mypassword",
"timeout":,
"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 , 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介绍及客户端配置使用教程>
Linux代理服务器使用的更多相关文章
- Squid Linux 代理服务器
		
简介: Squid 是 Linux/Unix 平台下最为流行的高性能免费应用层代理服务器,它具有权限管理灵活.性能高和效率快的特点. 代理服务器可以提供文件缓存.复制和地址过滤等服务,充分利用有限的出 ...
 - 高效配置Linux代理服务器 Squid介绍
		
作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前Internet上运行的主机有相当一部分采用的就是Linux,而且中国已经把Linux作为政府上网的指定网络操作系统.种种迹象 ...
 - Linux代理服务器—squid正向代理实验
		
1.代理服务器squid简介 Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器.Squid有广泛的用途,从作为网页服务器的前置cac ...
 - Linux 驱动开发
		
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
 - iptables学习笔记
		
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3812510.html ...
 - iptables之centos6版本详解
		
1 Linux防火墙概述 Linux防火墙实际指的是Linux下的Netfilter/Iptables.Netfilter/Iptables是2.4.x/2.6.x版本Linux内核集成的IP信息包过 ...
 - linux下配置ssledge代理服务器
		
ssl edge 是一个非常好用的VPN/proxy, 比云梯 稳定快速的多. 在LINUX下开发 Titanium 需要用到各种FQ,所以它是必备工具. 1. 根据自己付费后的用户名和密码,下载 ...
 - 用 xampp 在 windows/Linux 下搭建代理服务器
		
背景:学校上网开始收费,但实验室免费,由于宿舍和实验室都有ipv6,所以在实验室搭建代理服务器,让宿舍通过之上网. Windows下 两步: 1.编辑httpd.comf,去掉关于proxy的注释 L ...
 - Linux下常用程序的代理服务器(proxy)配置
		
Linux下有很多程序都只有命令行接口,对于这类程序,它们通过代理服务器(proxy)访问网络的方式也不尽相同.在本文中Easwy总结了一些常用Linux程序配置代理服务器的方法. [ 通用代理服务器 ...
 
随机推荐
- solr的创建分片的方式
			
在Solr4.4之后,Solr提供了SolrCloud分布式集群的模式,它带来的主要好处是: (1)大数据量下更高的性能 (2)更好扩展性 (3)更高的可靠性 (4)更简单易用 什么时候应该使用Sol ...
 - Ajax跨域请求附带Cookie/Ajax跨域请求附带身份凭证
			
一.跨域请求中默认不带cookie等验证凭证 尤其对于post请求. 对于ajax请求,其中post,get都可以正常访问. withCredentials: false, // 允许携带cookie ...
 - 【windows】win10新增用户
			
1.打开[计算机管理]
 - PHP防止sql语句注入终极解决方案(包含pdo各种操作使用实例)
			
PHP防止sql语句注入终极解决方案完美解决方案就是使用拥有Prepared Statement机制(预处理sql)的PDO //先做个实验 先不用预处理sql写法<pre><?ph ...
 - Sqlserver  (转载)事物与锁
			
1 概述 本篇文章简要对事物与锁的分析比较详细,因此就转载了. 2 具体内容 并发可以定义为多个进程同时访问或修改共享数据的能力.处于活动状态而互不干涉的并发用户进程的数量越多,数据库系统的并 ...
 - day04——列表、元组、range
			
day04 列表 列表--list  有序,可变,支持索引 列表:存储数据,支持的数据类型很多:字符串,数字,布尔值,列表,集合,元组,字典,用逗号分割的是一个元素 id() :获取对象的内存地址 ...
 - 阿里云 轻量应用服务器   上传一个HTML文件或者jsp文件  通过外网IP访问
			
我选择的是 宝塔Linux,现在就说一下如何往服务器里面传文件然后通过外网IP访问 1.打开宝塔Linux面板登录,安装tomcat,安装好后如图 2.点击tomcat有个文件标识处 3.出现如图 4 ...
 - Golang转义字符
			
Golang常见的转义字符(escape char) \t 一个制表位,实现对齐的功能 \n 换行符 \\ 一个\ \" 一个" \r 一个回车 fm ...
 - 查询abap 程式应用到系统表table
			
*&---------------------------------------------------------------------* *& Report ZMM_TEXT ...
 - BZOJ3514 / Codechef GERALD07 Chef and Graph Queries LCT、主席树
			
传送门--BZOJ 传送门--VJ 考虑使用LCT维护时间最大生成树,那么对于第\(i\)条边,其加入时可能会删去一条边.记\(pre_i\)表示删去的边的编号,如果不存在则\(pre_i = 0\) ...