CentOS7 Squid 网络代理安装和配置

爬虫代理的作用

在我们的爬虫系统中,如果在一台服务器上不停的访问通一个目标站点,很有可能因为对方的发爬虫策略而将您的爬虫请求给阻止,导致您无法获取网站的信息。所以我们一般采用一个代理池的方式,不停的切换代理,将爬虫的请求伪装成为不同代理发起的,从而避开这种问题。这里以 centos7 和 squid 为例介绍如何建立一个 http 或者 https 的代理服务器。

软件安装

该软件需要使用 openssl 组件,所以如果没有安装请执行如下命令进行安装

yum install openssl

首先检查是否已经安装了 squid 软件。执行如下的命令

rpm -qa squid

如果显示 package squid is not installed 则表示没有安装,否则会显示具体的安装包信息。如果没有安装,则执行安装命令如下

yum install -y squid*

结束后,再执行检查命令,则显示结果如下

[root@localhost ~]# rpm -qa squid
squid-3.5.20-12.el7.x86_64

软件配置

squid 的配置文件默认是 /etc/squid/squid.conf 文件。默认情况下,squid 只允许有限几个内网地址段来访问。所以我们在的 acl localcal 部分加入如下的内容:

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src 0.0.0.0/20

上面一行是原来有的,下面一个行是我们先加入的。然后我们改一下默认的端口号

#http_port 3128
http_port 5872

最后修改一下访问日志配置

coredump_dir /var/spool/squid
access_log /var/log/squid/access.log

下面一行设置了访问日志的文件为 /var/log/squid/access.log

启动服务

首先需要在防火墙中开放刚才配置的端口 5872 。执行如下命令

firewall-cmd --zone=public --add-port=5872/tcp --permanent
firewall-cmd --reload

这个命将 5872 端口加入到防火墙的开发端口列表中持久化保存,并且重新载入防火墙策略,让其生效

然后执行命令启动

systemctl start squid

启动后,我们执行命令命令

[root@localhost ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1689/master         
tcp        0      0 0.0.0.0:15678           0.0.0.0:*               LISTEN      20050/sshd          
tcp6       0      0 :::5872                 :::*                    LISTEN      27903/(squid-1)    

可以看到,squid 服务已经在端口 5872 上开始监听了

使用和监控

已 chrome 为例。打开 chrome “设置菜单”,在底部展开“高级”,在底部找到“打开代理设置”菜单,在对话框中点击“局域网设置”按钮,在新出现的界面中输入代理服务器的设置。如下图所示

确定后,就可以在浏览器中使用代理服务器来访问网络了。为了看到效果,我们在浏览器上访问《不一样的 Java 日期格式化大全》 这篇文章,同时对代理服务器的访问日志进行监控,看到日志输出如下

[root@localhost ~]# tail -f /var/log/squid/access.log 
1543289079.273  16467 192.168.1.60 TCP_TUNNEL/200 3687 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289079.274  16715 192.168.1.60 TCP_TUNNEL/200 152 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.274  16667 192.168.1.60 TCP_TUNNEL/200 4159 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.524      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289081.664      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289082.433      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289097.966  35623 192.168.1.60 TCP_TUNNEL/200 55584 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289097.991  35259 192.168.1.60 TCP_TUNNEL/200 16029 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289099.311  60913 192.168.1.60 TAG_NONE/503 0 CONNECT clients4.google.com:443 - HIER_NONE/- -
1543289100.321  38894 192.168.1.60 TCP_TUNNEL/200 23165 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289109.312  47056 192.168.1.60 TCP_TUNNEL/200 10707 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -

可以看到,是通过代理服务器的转发来访问的目标网站。

代理服务器鉴权

上面的代理服务器如果是在公网上提供服务的,那么所有人都能使用这个代理服务。如果我们想加入鉴权机制对这个进行限制,则需要增加其他配置。这里我们采用用户名和密码的鉴权方式,具体方法如下。
首先用 apache 的密码工具生成用户密码,如果没有的话需要先安装 httpd 软件

yum install httpd

然后生成密码。

[root@localhost ~]# htpasswd -c /etc/squid/passwd youname
New password: 
Re-type new password: 
Adding password for user youname

如果没有 htpasswd 命令,则安装 apache

yum install -y httpd

在 http_access deny all 语句之前,加入如下的配置内容

cache_dir ufs /var/spool/squid 100 16 256
cache_mem 128 MB
maximum_object_size 128 MB
cache_dir ufs /var/spool/squid 100 16 256

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm your message
auth_param basic credentialsttl 5 hours
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

然后重启

标签:squidCentos 发布于:2019-10-18 13:27:53