批量安装和搭建爬虫代理

  • A+
所属分类:网络安全文章

代理对于搞爬虫都不会陌生。CE安全网有几台阿里云服务器用于分布式增量抓取,但对于一些封ip只需进行一次抓取的数据源,或数据量级较小时,如果部署到爬虫集群上又太费事不值得。在网上找的免费代理可用性又太低,于是决定充分利用爬虫服务器的网络资源,批量安装搭建自己的爬虫代理服务。

 

squid搭建与配置过程
文中使用的服务器是centos系统。

安装squid
使用yum直接安装即可yum install squid -y,安装完成后配置文件在/etc/squid/目录下。

配置basic认证
不得不说现在网络上扫描器实在太多了。我在一台机器上使用默认端口3128开启了squid服务,没有配置访问认证,测试结束后忘记关闭squid服务,过了几个小时就发现服务器负载太高,查看日志(/var/log/squid/)发现是已经被人扫到并用上了。

批量安装和搭建爬虫代理

看来必需要配置访问认证了

1.生成passwords文件 在本机上执行

# 安装htpasswd工具 yum install httpd-tools -y # 生成passwords文件 htpasswd -c passwords authorized_user

2.输入两次密码后生成passwords文件

配置squid认证 将passwords文件上传到爬虫服务器/etc/squid/目录下,编辑/etc/squid/squid.conf文件,添加

 # test mypass
 auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
 auth_param basic realm proxy
 acl authenticated proxy_auth REQUIRED
 http_access allow authenticated

匿名配置
squid默认配置为透明代理,通过squid发送请求时squid会添加x-forwarded-for与via请求头,对方会发现你在使用代理,并根据这个得知你的真实ip,对于爬取数据必需要使用高匿代理,在配置文件中添加如下内容

# High Anonymity Configuration
via off
forwarded_for delete
request_header_access From deny all

批量安装
上面已经介绍了搭建与配置squid的步骤,下面介绍如何通过python批量安装。首先需要通过ssh连接到服务器,使用paramiko库可以通过ssh连接到远程服务器,建立连接后执行上面的命令就可以了,没什么可说的就直接贴代码了

ssh = SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
 # 1. 建立ssh连接
 ssh.connect(**server)
 logger.debug(">>> 1. 建立ssh连接")
 # 2. 安装squid
 stdin, stdout, stderr = ssh.exec_command('yum install squid -y')
 if stdout.channel.recv_exit_status() == 0:
 logger.debug(">>> 2. 安装squid完成")
 with ssh.open_sftp() as sess:
 # 3. 添加认证账号
 sess.put(AUTH_FILE, '/etc/squid/passwords')
 logger.debug(">>> 3. 上传auth文件完成")
 # 4. 更新squid.conf配置文件
 sess.put(SQUID_CONF, '/etc/squid/squid.conf')
 logger.debug(">>> 4. 上传squid.conf完成")
 # 5. systemctl start squid启动服务
 stdout = ssh.exec_command('systemctl start squid')[1]
 if stdout.channel.recv_exit_status() == 0:
 logger.debug('>>> 5. squid服务已启动')
 else:
 logger.error("squid服务启动失败: " + ''.join(stdout.readlines()))
 else:
 logger.error("安装squid失败, ip: %s" % server['hostname'])
except Exception as err:
 logger.error('处理%s失败', server['hostname'])
ssh.close()

完整代码详情:https://github.com/manwu91/inst_proxy

  • CE安全网微信群
  • weinxin
  • CE安全网QQ群
  • weinxin
CE安全网

网络安全宣传推广

发表评论

您必须登录才能发表评论!