如何建立代理-Squid(HTTP)和SOCKS

代理一般有两种:http代理、socks代理。

http代理的原理是:客户端发出http请求,首先发送到代理服务器,再由代理服务器请求目标网站。客户端自始至终与代理服务器通信。

socks代理与http代理类似,但有些不同。客户端与代理服务器先建立隧道比如SSH,之后客户端发送的http请求封装在隧道里到达代理服务器,再由代理服务器访问目标网站,返回的http响应也由代理服务器封装在隧道里返回给客户端。

代理主要有以下好处:

  • 增加匿名性
  • 客户端访问被防火墙阻止的内容
  • 分析网络流量
  • 控制阻制某些流量

本文将在Ubuntu20.04系统上,使用开源免费的squid进行http代理。对于socks代理,则使用自带ssh或ssh工具(windows)。


HTTP代理配置

我们有台Ubuntu服务器192.168.10.1,能访问互联网;客户机192.168.20.1 不能访问互联网;现准备在192.168.10.1上安装Squid,作为客户端的代理连接互联网。

  1. 登录Ubuntu服务器 192.168.10.1
  2. 安装squidsudo apt install squid
  3. 作为一个好习惯,复制一份配置文件。sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.default
  4. 编辑配置文件。sudo vim /etc/squid/squid.conf找到 “ http_access allow localnet” 这一行并将注释去掉,保存文件
  5. 重启 Squidsudo systemctl restart squid
  6. 检查Squid服务器是否开启。sudo systemctl status squid应能看到 “running” 和 “active” 字样
  7. 在客户端192.168.20.1的浏览器配置代理以及测试连接。http代理服务器地址 192.168.10.1,端口设为3128,这是squid的默认端口测试访问https://ifconfig.me ,能看到对外公网地址等相关配置信息,说明已成功代理上网。
  8. 检查访问日志记录sudo vim /var/log/squid/access.log
  9. 目前任何客户端设定代理服务器IP和端口就可代理上网,这显然是不安全的,我们来添加用户/密码的基本认证,其中客户端IP要填入实际的IP,这里是192.168.20.1。sudo vim /etc/squid/squid.conf
    添加:auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/htpasswdauth_param basic realm Squid Proxy Caching Web Serveracl authenticated proxy_auth REQUIREDacl authenticated_ips src {{客户端IP}}/32
    修改http_access allow localnet 这一行内容为:http_access allow authenticated authenticated_ips
  10. 生成用户密码。运行以下命令并用实际用户密码代替:sudo printf “USERNAME:$(openssl passwd -crypt PASSWORD)\n” | sudo tee -a /etc/squid/htpasswd
  11. 重启squid。sudo systemctl restart squid
  12. 再在客户端设置代理时加上用户名和密码的配置信息即可。有些浏览器会弹出用户密码要求输入,输入即可。

SOCKS代理

SOCKS代理设置非常简单, 我们先断开之前与服务器 192.168.10.1的SSH连接, 因为要重新连接.

ssh kelemi@192.168.10.1 -D 40392

这里增加一个 -D 选项, 表示动态端口转发, 我们设置了端口 40392 . 本地与服务器的SSH应用建立起隧道, 本地打开40392 端口并监听传入的请求, 通过隧道传至服务器, 由服务器转发请求.

SSH登录之后, 我们可以看到跟之前登录服务器的界面没什么区别, 但实际已开辟了一个隧道了.

然后, 我们在客户端192.168.20.1设置SOCK5 代理, 地址为本地127.0.0.1, 端口为前面设置的40392, 用户密码保持为空, 就可以 由 服务器192.168.10.1代理任何上网流量了. 以火狐浏览器为例如下.

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注