安全搭建squid代理集群

本文介绍如何安全地搭建需要验证的squid代理集群

背景

  之前由于长期有一些抓取相关的需求,博主购买了一些云平台的低配机器,在上面配置了squid,开放了代理端口,然后自己在本地也维护了一个squid服务,专门用来连接云服务器的代理。但是就是最近发现连接的代理总是发现大量超时,登录上服务器查看,连ls/cd等命令都会卡,nload了一下,发现带宽全部被打满了,之后就查看了下squid的日志,发现已经好几个G了,才发现原来是这个东西在搞鬼。检查了squid的日志,里面的ip有各个地区的,目标也是各种各样,想应该是被哪个代理商扫描到了,直接被用来使用了,开始修改吧

具体操作

基本架构

示例图1
  我们只需要维护的本地的squid.conf文件即可

(代理)云服务器设定认证账号

  由于所使用的云服务器都是centos的,所以这里只用到了yum相关包

1
2
3
4
5
#这是apache的一个验证工具
yum install httpd-tools

#输入登录账号密码
htpasswd -c /etc/squid/passwd username

配置squid

  注意 和通常配置不一样的是,我们这回配置的是需要账号密码验证的

1
2
3
#首先要将如下两句都注释掉
#http_access deny all
#http_access allow all

  不注释掉这两行的话任何配置都无法生效

  然后在末尾添加如下部分

1
2
3
4
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd     #验证密码的程序,和使用的密码字典
auth_param basic children 5 #认证程序的进程数,根据机器配置和请求量设定
acl auth_user proxy_auth REQUIRED #认证用户需要密码
http_access allow auth_user #允许上面acl设定的用户进行访

  配置完之后重启squid

1
2
3
4
5
squid -k reconfig

#or

squid restart

  这时候如果一切顺利,你再次使用这台机器的squid代理就需要账号密码验证了

检测端口是否打开

  如果你发现没法使用配置好的squid代理,我们需要检测是不是机器的防火墙是否拦截住了这个端口

1
telnet ip port

  如果返回以下结果

1
2
3
Trying ip...
Connected to ip.
Escape character is '^]'.

  那就说明端口是开放的
  如果连接不上,那么我们关闭防火墙

1
service firewalld stop

验证验证是否生效

1
2
3
4
5
6
7
8
wget
wget -e "http_proxy=http://username:pass@ip:port/" "http://www.baidu.com"

curl
curl -x"http://username:pass@ip:port/" "http://www.baidu.com"

requests
print requests.get("http://www.baidu.com",proxies={'http': 'http://username:pass@ip:port/'}).content

本地搭建squid,使用需要认证的squid代理

  直接安装配置即可,在配置squid.conf的时候需要注意修改如下部分

1
2
#其中的ip port 即是按照如上配置的公网机器的ip和端口
cache_peer ip parent port 0 login=user:pass no-query weighted-round-robin weight=1 connect-fail-limit=2 allow-miss max-conn=5 name=001

  写入多个ip port即可
  即是在常规的配置之上加上了以下一项,且这一项最好放在前面,不要放在末尾

1
login=user:pass

  之后我们重启本地的squid,即可直接使用,不需要加上账号密码了

1
curl "http://www.baidu.com" -x 127.0.0.1:8888

End

  由于之前半年有些重要的事情停滞了写博客这件事,后续会慢慢补上的~~