squid实现web代理
一、背景
当存在一个网站W,电脑A可以访问,但你现在使用的电脑B不可访问时,可以在A上搭建一个web代理,这样B就能访问W了
为什么选择squid ?
安装相对简单
支持访问控制,身份认证,限制能访问的域名,限制发起请求的IP等等
如果只是web需求,相比之下,搭建那V个P什N么、v2[emm]ray之类的就太麻烦了
五大开源 Web 代理服务器横评:Squid、Privoxy、Varnish、Polipo、Tinyproxy
二、安装
2.1 yum安装
优点:方便快捷,安装后就是服务,可以用systemctl管理
缺点:不安全,版本较低,centos7是3.5,这是很老的版本了。squid老版本存在缓冲区溢出命令执行、整数溢出等,具体可以去查CVE。开放公网的话还是编译安装最新版吧,这玩意你浏览器直接访问代理IP+端口,就能拿到版本...http头部也有
yum install squid
如后续需设置通过用户密码认证来连接代理,那么需要检查是否有 htpasswd
htpasswd
没有的话需要安装
yum install httpd-tools
2.2 编译安装
优点:可以安装最新版本,相对安全
缺点:编译慢,安装使用繁琐
# 官网下载 http://www.squid-cache.org/Versions/ wget http://www.squid-cache.org/Versions/v4/squid-4.15.tar.gz tar -zxvf squid-4.15.tar.gz cd squid-4.15 ./configure make -j4 # 根据CPU线程数而定,提高编译速度 make install
三、配置
编译安装的默认允许所有IP连接,yum安装似乎默认不开放公网,修改配置文件
vi /etc/squid/squid.conf
找到http_access deny all,改为 allow all 即可允许所有IP使用代理
找到 port 可以更改服务监听代理的端口
3.1 密码认证
首先生成密码文件
yum安装:
htpasswd -cb /etc/squid/passwd [用户名] [密码],一定要放在 /etc/squid/ ,博主最开始放在 /root/ 下,结果后来连接时怎么输用户名都不对,浏览器中反复要我输入账号密码
编译安装:
htpasswd -cb/usr/local/squid/etc/passwd
[用户名] [密码]
然后配置 squid ,修改配置文件,还是 http_access 那行,改为
# yum安装:auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd auth_param basic program /usr/local/squid/libexec/basic_ncsa_auth /usr/local/squid/etc/passwd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 20 minute acl auth_users proxy_auth REQUIRED http_access allow auth_users
配置前需检查 basic_ncsa_auth 路径是否正确,也有可能在 /usr/lib/squid、lib64/squid3 之类的目录下,否则启动时报错:
/usr/lib/squid/basic_ncsa_auth: (2) No such file or directory
官方参数说明 鉴于centos默认安装是3.5
四、使用
4.1 服务端启动
yum安装:
# start stop restart status -l systemctl start squid # 开机自启 systemctl enable squid # 日志 vi /var/log/squid/access.log
start失败就status -l,上面排了两个坑,再说我遇到过的其它情况
起因是我不小心直接执行了 squid 命令,然后就运行起来了但我不知道,当我再start时最开始是报:Could not send signal 15 to process 6527: (13) Permission denied
我发现后台有在跑一个 squid,stop没用就直接kill了,然后再start报:FATAL: IpcMemSegment::create failed to shm_open(/squid-cf__metadata.shm): (17) File exists
遇事不决就重启,我直接reboot,解决了,听说删除 dev/shm/ 下的文件也能成功
编译安装:
首先你需要新建这两个文件才能启动
touch /usr/local/squid/var/logs/cache.log # squid总以nobody用户运行,不更改文件权限无法写入 chown nobody && chgrp nobody /usr/local/squid/var/logs/cache.log touch /usr/local/squid/var/logs/access.log chown nobody && chgrp nobody /usr/local/squid/var/logs/access.log
使用方法:
# 后台启动 /usr/local/squid/sbin/squid -s # 查看是否运行 ps -ef|grep squid|grep -v grep # 关闭 ps -ef|grep squid|grep -v grep|cut -c 9-15|xargs kill -9
几个没用的命令:
-k check听说能检查是否运行,实测无反应
-k parse听说能检查配置文件是否正确,实测好像不是这个作用
-k shutdown字面意思是停止服务,实测无用
-k kill能杀掉进程,但是杀得不干净
最后给出我写的脚本,可以设置开机自启
#!/bin/sh #chkconfig: 2345 61 31 #description: squid DIR="/usr/local/squid" case "$1" in start) # 启动脚本内容 $DIR/sbin/squid -s > $DIR/var/logs/service.log ;; stop) # 停止脚本内容 ps -ef|grep squid|grep -v grep|grep -v $0|grep -v 'service.*squid'|cut -c 9-15|xargs kill -9 ;; status) # 查看状态脚本内容 PS1=`ps -ef|grep squid|grep -v grep|grep -v $0|grep -v 'service.*squid'` if [ -z "$PS1" ] then echo "squid is stopped!" else ps -ef|grep squid|grep -v grep|grep -v $0|grep -v 'service.*squid' fi ;; restart|force-reload) # 重启脚本内容 $0 stop sleep 0.3 $0 start ;; *) # 其它参数脚本内容 echo $"Usage: $0 {start|stop|status|restart|force-reload}" # 结束case语句 esac exit 0
4.2客户端使用
浏览器直接设置,推荐一个代理管理插件 SwitchyOmega
curl 验证代理情况可以使用
curl --proxy x.x.x.x:3128 --proxy-user admin:123456 http://mi.com
用了一万年的baidu.com测网通没通......现在再也不用了
五、传输安全
使用浏览器F12查看网络,我们可以看到使用代理后,我们的账号密码是base64编码后传输的
base64属于编码,不能称之为加密,解码就能出明文,这很不安全。如果你还访问加密做得不好的网站,那更不安全,容易被嗅探
一般的搭配是使用 stunnel+squid ,stunnel负责加密传输中的数据,避免网络报文被嗅探,发生信息泄露等问题
更好的解决办法是使用 nginx+squid 转发,nginx不仅可以做https加密,还能自定义页面和http头部,这样别人甚至不知道你开放的是squid服务端口
- squid实现简单web代理服务器
- 使用Squid实现appstore应用离线分发下载(支持ios9)
- 用C#实现Web代理服务器2
- 利用Squid代理实现WEB测试修改hosts
- Squid:实现高速的Web访问
- Squid做反向加速,配合DNS轮询实现简单负载均衡典型配置
- iptables NAT+squid实现透明代理
- Squid+MRTG实现完善的缓存代理和http服务加速代理 -----squid真是个老技术了。。。。
- 使用Web代理实现Ajax跨域
- squid+apache实现缓存加速
- 用C#实现Web代理服务器3
- squid 实现代理功能
- 利用squid实现局域网内主机的上网功能
- squid实现透明网关若干经验总结
- Squid+MRTG实现完善的缓存代理和http服务加速代理
- 利用NTLM 验证整合Squid及Samba3实现Win2k3域用户认证
- ROS 软路由配合squid WEB缓存服务器中实现行为管理
- Squid 反向代理的实现原理
- Squid2.6 for win2003反向代理实现多个Web缓存加速--[配置文档]
- squid实现反向代理的原理 ZT