ubuntu16+squid+stunnel搭建代理服务器
前言
http代理可以使用很多功能,一般情况下如果你的代理在国外就很简单啦,”没有太坎坷的经历“,基本安装好就好啦,如果代理服务器在国外因为要过GFW,可能就要出一点问题,网络申查可能要误伤一大片网站,特别是我们开发人员经常用到的google.一般都会被墙。
代理搭建好后访问网站会出现立即显示网络被重置的情况,这种情况一般都是因为被检测到直接被拦截啦,虽然没有访问什么违法的网站但是没有解释,就是给你拦截。
显示网页已经被重置的提示,说明你的请求根本就没有到达代理服务器,数据在传送过程中就被拦截啦,因为你的数据到代理之间传的是明文很容易被GFW识别出来,解决方法就是在你的客户端到代理服务器这一段使用加密通道传送数据,方法就是配置squid的https或使用stunnel.
squid可以实现ssl但是我试啦啦过程太麻烦,因为直接安装的squid里面是没有openssl功能的,需要自己编译安装,编译真是个苦力活,滚动啦5到10分钟,最终安装的时候又出现啦莫名奇妙的问题。最终放弃。选择使用stunnel,它可以在两个点之间创建一个加密的连接来传数据,原理就是在你们的客户端和代理服务器之间创建加密传输,数据到代理服务器后再出squid去取数据,再由加密连接传到客户端显示
安装代理
安装认证工具
安装代理服务器前要安装下面工具来生成谁文件
apt-get install apache2-utils -y
安装squid
apt-get install squid
安装stunnel
apt-get install stunnel4
配置代理
生成认证文件
cd /etc/squid htpasswd -c squid.passwd youproxy(用户名)
修改代理配置
打开/etc/squid/squid.conf 配置文件,注意里央的几个添加用户认证的地方
#添加用户认证 auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid.passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off # acl localnet src 10.0.0.0/8 # RFC1918 possible internal network # acl localnet src 172.16.0.0/12 # RFC1918 possible internal network # acl localnet src 192.168.0.0/16 # RFC1918 possible internal network # acl localnet src fc00::/7 # RFC 4193 local private network range # acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines #添加用户认证 acl ncsa_users proxy_auth REQUIRED acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT #添加允许访问的条件 http_access deny !Safe_ports http_access deny CONNECT !SSL_ports #用户认证 http_access deny !ncsa_users http_access allow ncsa_users http_access allow localhost manager http_access deny manager http_access allow localhost http_port 8899 dns_nameservers 1.1.1.1 114.114.114.114
重启squid
systemctl restart squid
配置stunnel
生成公钥和私钥
生成私钥
openssl genrsa -out privatekey.pem 2048
生成公钥
openssl req -new -x509 -key privatekey.pem -out publickey.pem -days 1095
合并
cat privatekey.pem publickey.pem >> /etc/stunnel/stunnel.pem
修改stunnel配置
创建(如果没有的话) /etc/stunnel/stunnel.conf 输入下面内容
client = no [squid] accept = 4130 connect = 127.0.0.1:8899 cert = /etc/stunnel/stunnel.pem
8899是squid的代理端口,4130是stunnel接受请求的端口
修改 /etc/default/stunnel4 配置文件,enabled=1
ENABLED=1
重启stunnel
service stunnel4 restart
客户端下载stunnel
https://www.stunnel.org/downloads.html
打开stunnel.conf(在安装目录的config文件夹)修改为下面代码,也可以打开stunnel的gui客户端选择edit configuration,修改完后再加载配置,这个界面不能退出,但可以关掉。
[https] client = yes accept = 127.0.0.1:8880 connect = 47.*.*.51:4130
浏览器使用方法
把生成的publickey.pem下载到本地电脑,生命名为publickey.crt,然后打开谷歌浏览器,高级->http/ssl->管理证书,导入此证书到"受信任的根证书颁发机构",最后浏览器访问的时候把代理设置为 127.0.0.1:8880就可以访问啦