不久前在办公室抓取某网站S被对方发现,导致对方自动屏蔽了来自办公室网络的所有HTTP请求,连正儿八经地用浏览器打开也不行。为了可以摸索出“改头换面”(改HTTP头部)访问的方法,必须先成功访问至少一次,看看发出的HTTP头部是怎样的才行。恰好想起自己有一台腾讯云服务器,登上去用curl
访问网站S,发现是成功的(也就是尚未被屏蔽)。既然如此,干脆在服务器上部署一套Squid作为正向代理,帮助办公网络的请求成功抵达网站S并拿到响应页面。
用apt-get
安装了squid
软件包后启动并监听端口8321,在办公网络下将公网地址和8321端口作为代理配置传递给curl
的-x
选项,访问网站S。不料Squid拒绝了我的请求,返回了如下内容(节选自curl -v
命令的输出)
1 | < HTTP/1.1 403 Forbidden |
经过一番Google,才知道原来是Squid的配置导致的。在Squid配置文件(/etc/squid/squid.conf)中,默认的acl和http_access指令的设置如下
1 | acl SSL_ports port 443 |
1 | http_access deny !Safe_ports |
由于Squid是按照第一条匹配的http_access指令来决定允许还是拒绝的,因为来自我办公网络的请求实际上命中的是
1 | http_access deny all |
因此被拒绝是必然的。为了可以接受来自办公网络发起的请求,首先需要新增一行acl指令。通过Squid的日志(/var/log/squid/access.log)可以查看到被拒绝的请求的IP地址是多少,此处假设IP地址为8.7.198.45,那么相应的acl指令如下
1 | acl myclients src 8.7.198.45 |
此处的myclients为自定义的名称,顾名思义,它表示“我的客户端”;src是一种acl类型,表示客户端的IP地址;8.7.198.45是src类型下的参数,也就是我所使用的客户端发出的请求的来源IP地址。配置了acl后,还需要配置http_access指令。这个就简单多了,只要允许上面创建的这个acl的访问即可,内容如下
1 | http_access allow myclients |
之后再重启Squid服务即可
1 | sudo service squid restart |
这时候再从办公网络中以腾讯云服务器上的Squid为正向代理发出请求,就不会再被Squid拒绝了。
全文完