Squid As A Secure Proxy

摘要: 这篇文章讲述了一种使用squid“科学上网”的方法。

安装Squid:

Squid是一个大名鼎鼎老牌软件,用于做HTTP缓存代理。它非常完善的支持HTTP/1.1 proxy协议,所以我的方法就是:让squid以https的方式提供forward proxy service,然后在客户端使用chrome直接访问。

首先,我在amazon的ec2上有一个虚拟主机,我要在它上面安装squid。有两种方式

通过yum安装二进制包

这是最简单直接的方式

yum install squid  

从源代码安装

如果你想从源代码自己编译,那么

yum -y install gcc-c++ openssl-devel  
curl -O -L 'http://www.squid-cache.org/Versions/v3/3.4/squid-3.5.4.tar.bz2'  
tar -jxvf squid-3.5.4.tar.bz2  
cd squid-3.5.4  
./configure --prefix=/usr --sysconfdir=/etc/squid --libdir=/usr/lib64 --with-openssl --enable-auth-basic=DB --enable-auth-ntlm=none --enable-auth-negotiate=none --enable-auth-digest=none --disable-auto-locale --disable-ipv6 --disable-translation --with-logdir=/var/log --with-pidfile=/var/run/squid.pid --with-swapdir=/var/spool/squid --with-default-user=squid --libexecdir=/usr/lib64/squid --enable-http-violations
make  
make install  

证书认证:

./configure --prefix=/usr --sysconfdir=/etc/squid --libdir=/usr/lib64 --with-openssl --enable-auth-basic=DB --enable-auth-ntlm=none --enable-auth-negotiate=none --enable-auth-digest=none --disable-auto-locale --disable-ipv6 --disable-translation --with-logdir=/var/log --with-pidfile=/var/run/squid.pid --with-swapdir=/var/spool/squid --with-default-user=squid --libexecdir=/usr/lib64/squid --enable-http-violations

配置squid

然后修改Squid的配置文件。先是修改监听的端口号,把http_port变成https_port

https_port 4433 cert=/etc/mycert/server.crt key=/etc/mycert/server.key cafile=/etc/mycert/allca.pem

其中cert和key分别是网站的HTTPS证书和私钥。注意证书的common name一定要和服务器的域名相匹配。cafile是用于签署cert的CA链。

配置身份认证

squid默认是按照IP进行权限控制,但是这个对我不适用,因为我是要从公网访问它,client没有一个固定的IP。所以最简单的办法就是通过http basic身份认证。

auth_param basic program /usr/lib64/squid/basic_db_auth  
auth_param basic children 5 startup=5 idle=1  
auth_param basic realm Squid myRealm  
auth_param basic credentialsttl 2 hours  
acl pauth proxy_auth REQUIRED  
http_access allow pauth  
http_access allow localhost  
http_access deny all  

basic_db_auth这个程序是用perl写的,从数据库中读取用户名密码。更简单的方式是用basic_ncsa_auth,搭配apache的htpasswd程序使用。

chrome

chrome支持https类型的代理。启动chrome的时候在末尾加上--proxy-server=https://xxxxxx.com:4433即可。注意,把这里的域名和端口号换成你的服务器域名和端口号。

全配置好之后,用浏览器打开 http://httpbin.org/get 看一下。主要看看IP是否对。

用Stunnel做本地中转:

假如浏览器(比如IE)不支持https的proxy怎么办呢?这时可以请stunnel这个程序来帮忙。

装完stunnel后给它写一个简单的配置文件:

client=yes  
fips=no  
[proxy]
accept = 127.0.0.1:50000  
connect = myproxyserver:4433  
CAfile = /etc/allca.pem  

如果是Linux或Mac OS X,把上述内容以文本文件方式保存为/etc/stunnel/stunnel.conf

然后启动 stunnel 程序。直接在命令行上执行 stunnel 回车。

然后测试一下:

curl -L -v  --proxy-digest -Usnnn:xxxxx -x http://localhost:50000 http://twitter.com/  

其中-U后面是proxy的用户名密码,以冒号分割。

配置其它第三方程序:

git

git config --global http.proxy http://snnn:xxxxxxx@localhost:50000

然后访问github就爽快多了!

maven

请参见 https://maven.apache.org/guides/mini/guide-proxies.html

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥