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

然后重启

Squid传统代理与透明代理构建

一、缓存代理概述

1.缓存代理概述

作为应用层的代理服务软件,Squid主要提供缓存加速和应用层过滤控制的功能。

2.代理的工作机制

当客户机通过代理来请求Web页面时,指定的代理服务器会检查自己的缓存,如果缓存中已经存在客户机需要访问的页面,则之间将缓存中的页面内容反馈给客户机;若代理服务器中的缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,再将获得的页面数据保存到缓存中,并发送给客户机.

二、手工编译安装squid

1.解压缩squid安装文件到/opt

tar zxvf squid-3.5.28.tar.gz -C /opt

2.配置squid的编译选项

cd /opt/squid-3.5.28/
[root@promote squid-3.5.28]# ./configure --prefix=/usr/local/squid      //指定安装目录
> --sysconfdir=/etc      //单独将配置文件修改到其他目录
> --enable-arp-acl     
> --enable-linux-netfilter     //使用内核过滤
> --enable-linux-tproxy        //支持透明模式
> --enable-async-io=100        //异步I/O
> --enable-err-language="Simplify_Chinese"   //错误提示信息的语言
> --enable-underscore     //允许url中有下划线
> --enable-poll          //使用poll()模式,提升性能
> --enable-gnuregex    //使用gun正则表达式
make && make install

3.将squid程序命令创建软链接到系统命令下

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

4.添加用户

useradd -M -s /sbin/nologin squid

5.更改所属主与所属组

chown -R squid.squid /usr/local/squid/var/

6.编辑squid配置文件,

vim /etc/squid.conf

cache_effective_user squid        #添加   指定程序用户
cache_effective_group squid       #添加   指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid
squid -k parse   //检查配置文件语法

squid -z   //初始化缓存目录

squid    //启动服务

查看服务是否开启

netstat -natp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      84346/(squid-1)

7.创建squid脚本文件,更好的管理squid服务

cd /etc/init.d/
vim squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
   start)
     netstat -natp | grep squid &> /dev/null
     if [ $? -eq 0 ]
     then
       echo "squid is running"
       else
       echo "正在启动 squid..."
       $CMD
     fi
   ;;
   stop)
     $CMD -k kill &> /dev/null
     rm -rf $PID &> /dev/null
   ;;
   status)
     [ -f $PID ] &> /dev/null
        if [ $? -eq 0 ]
          then
            netstat -natp | grep squid
          else
            echo "squid is not running"
        fi
   ;;
   restart)
      $0 stop &> /dev/null
      echo "正在关闭 squid..."
         $0 start &> /dev/null
      echo "正在启动 squid..."
   ;;
   reload)
      $CMD -k reconfigure
   ;;
   check)
      $CMD -k parse
   ;;
   *)
      echo "用法:$0{start|stop|status|reload|check|restart}"
   ;;
esac

chmod +x squid //给脚本添加可执行权限

8.添加为系统服务并设置开机自启动

chkconfig --add squid
chkconfig --level 35 squid on

此时我们可以使用squid脚本来启动、停止、重启和重载suqid服务器了。

三、传统代理构建

传统代理案例环境

未分类

1.squid代理服务器的配置

(1)编辑suqid.conf 配置文件

cache_mem 64 MB   #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB    #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB    #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

重启squid服务

service squid restart
正在关闭 squid...
正在启动 squid...

(2)添加防火墙策略

[root@promote init.d]# iptables -F
[root@promote init.d]# setenforce 0
[root@promote init.d]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

重载suqid服务

[root@promote init.d]# service squid reload

2.在http的服务器上安装httpd服务

(1)关闭防火墙

[root@promote ~]# systemctl stop firewalld.service 
[root@promote ~]# setenforce 0

(2)安装httpd

[root@promote ~]# yum install httpd -y

(3)开启httpd服务

[root@promote ~]# systemctl start httpd.service
[root@promote ~]# netstat -natp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      7975/httpd

3.win7客户机上进行代理配置

(1)在Ie浏览器中,选择“工具”一>“Internet 选项”,弹出“Internet选项”对话框,

在“连接”选项卡中的“局域网(LAN)设置”选项组中单击“局域网设置”按钮,弹出“局域网(LAN)设置”对话框,
勾选”为LAN使用代理服务器”,在地址栏框中输入squid代理服务器的地址,端口为3128

未分类

(2)访问httpd服务器的网站

未分类

4.查看httpd服务器访问日志的新增记录

cd /etc/httpd/logs
vim access_log

未分类

四、构建透明代理

未分类

1.squid服务器配置

(1)编辑squid.conf配置文件

http_port 192.168.100.1:3128 transparent

重载服务

service squid reload

(2)添加防火墙策略

[root@localhost ~]# iptables -t nat -I PREROUTING -i ens32 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens32 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

2.win7测试机浏览器配置

未分类

3.查看htpt服务器的日志访问

未分类

squid代理服务的ACL访问控制、日志分析及反向代理(4.1版本)

squid的ACL访问控制列表

squid提供了强大的代理控制机制,通过合理的设置ACL(Access Control List,访问控制列表)并进行限制,可针对源地址、目标地址、访问的URL路径、访问的时间等各种控制条件进行过滤。

ACL访问控制通过以下两个步骤来实现:

①、使用acl配置项定义需要控制的条件;

②、通过http_access配置项对已定义的列表做“允许”或者“拒绝”访问的控制。

1. 定义访问控制列表

格式:acl 列表名称 列表类型 列表内容 ···

常见的访问控制列表类型

未分类

2. 设置访问权限

定义好各种访问控制列表以后,使用http_access配置项来进行控制。

格式:http_access allow或deny 列表名···

在设置访问权限时,需要注意两点:

  1. 没有设置任何规则时:squid服务将拒绝客户端的请求
  2. 有规则但找不到相匹配的项:squid将采用与最后一条规则相反的权限。

演示实验

因为之前我们做了squid的透明代理的实验,所以这里就接着那个实验继续做,配置好透明代理后,我们可以使用IP为192.168.100.50的client(客户端)访问IP为12.0.0.12的web服务器,那么下面我们就通过设置acl访问控制列表使client不能访问web服务器

vim /etc/squid.conf

acl localhost src 192.168.100.0/24     #定义访问控制列表

http_access deny localhost   #对列表做拒绝处理

service squid stop
service squid start      #重启服务

未分类

未分类

未分类

未分类

squid日志分析

squid的日志分析功能需要借助sarg(Squid Analysis Report Generator),首先先部署安装sarg工具

  • 安装相关的软件环境包
yum -y install gcc gcc-c++ gd gd-devel httpd #这里的dg库是支持图像处理的软件

sarg下载地址https://sourceforge.net/projects/sarg/

  • 安装sarg
mkdir /usr/local/sarg       #为sarg创建安装目录

tar zxvf sarg-2.3.11.tar.gz -C /opt/  #将sarg解压到指定目录
cd /opt/sarg-2.3.11/    #到sarg目录中进行编译安装

./configure --prefix=/usr/local/sarg     #这里指定安装目录
--sysconfdir=/etc/sarg     #指定配置文件目录
--enable-extraprotection    #开启额外保护功能

配置完后,进行编译和安装
make && make install
  • 修改sarg配置文件

vim /etc/sarg/sarg.conf

access_log /usr/local/squid/var/logs/access.log    #指定访问日志文件(开启)
title "Squid User Access Reports"      #网页标题(开启)
output_dir /var/www/html/squid-reports    #报告输出目录(开启)
user_ip no          #使用用户名显示(开启)
exclude_hosts /usr/local/sarg/noreport   #不计入排序的站点列表文件(开启,删除none,添加路径)
topuser_sort_field connect reverse   #top排序中有连接次数、访问字节、降序排列升序是normal (开启,修改BYTES)
user_sort_field connect reverse    #用户访问记录  连接次数、访问字节按降序排序  (开启,修改BYTES)
overwrite_report no   #同名日志是否覆盖(开启)
mail_utility mailq.postfix   #发送邮件报告命令(开启,修改mail)
charset UTF-8   #使用字符集 (开启)
weekdays 0-6   #top排行的星期周期 (开启)
hours 0-23   #top排行的时间周期(开启)
www_document_root /var/www/html  #网页根目录(开启)
touch /usr/local/sarg/noreport 创建上述不计入站点文件,添加的域名将不被显示在排序中
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#建立软链接,方便使用命令
systemctl start httpd.service
#因为我们要在网页里访问日志,需要我们开启httpd服务
  • 运行sarg

未分类

然后使用client登录网页管理界面

未分类

反向代理

squid反向代理可以加速网站的访问速度,可将不同的URL请求分发到后台不同的web服务器上,同时互联网用户只能看到反向代理服务器的地址,加强网站的访问安全。

squid反向代理加速的原理描述如下:

  • Squid反向代理服务器位于本地Web服务器和Internet之间,客户端请求访问Web服务器时,DNS将访问的域名解析为Squid反向代理服务器的IP地址,客户端将访问Squid代理服务器。
  • 如果Squid反向代理服务器缓存了该请求的资源,则将该请求的资源返回给客户端,否则反向代理服务器将向后台的Web服务器请求资源,然后将应答资源返回给客户端,同时也将该资源在本地缓存一份,供下一个请求使用。

未分类

实验环境

未分类

  • 修改squid代理服务的配置文件

vim /etc/squid.conf

acl web1 dstdomain www.yun.com
acl web2 dstdomain www.yun.com
#定义两个个基于域名的控制列表,分别命名为web1,web2
http_access allow web1 web2
#允许以web1,web2为目标域名的访问
http_port 172.16.10.137:80 accel vhost vport
#将端口监听在 172.16.10.137的80端口上,accel 指启用加速模式,vhost,vport用于转发请求
cache_peer 172.16.10.29 parent 80 0 no-query originserver round-robin weight=1 name=web1
#cache_peer 指定后端服务器地址,80 为后端服务端口,0 为 ICP 端口号(多个 Squid 时用),originserver 指定资源服务器,round-robin指使用轮询方式,weight指的是权重,自由分配,name 指定一个别名
cache_peer 172.16.10.134 parent 80 0 no-query originserver round-robin weight=1 name=web2
#和上面的一样

未分类

这里记得重新启动squid服务

  • 修改两个http服务的首页内容,方便后面实验的验证

未分类

未分类

  • 修改客户端win7的地址解析使之识别www.yun.com

未分类

未分类

未分类

这样就实验成功了,访问www.yun.com,真实服务器会使用轮询的方式,分别轮流访问两台web服务器。

stunnel+squid搭建代理服务器

一、网络环境

  • 主机A :192.168.0.11

  • 主机B:66.0.0.6

  • 主机C:4.2.2.2

主机A和B互通,B和C互通,A访问C网络较慢或不通,可以通过stunnel+squid代理跳转访问。

二、squid 安装配置

squid和stunnel可以在主机B上配置,也可在不同主机配置实现网络跳转。这里squid和stunnel server在主机B配置,stunnel client 在客户端主机A配置

  • 安装 yum install squid

  • 配置 vim /etc/squid/squid.conf,主要配置如下两处

acl localnet src 66.0.0.6/32  # 根据实际情况修改,添加允许 stunnel-client 的ip地址
http_port 3128  # squid监听端口

启动服务 service squid start

三、stunnel 配置

  • 安装yum -y install stunnel openssl openssl-devel

1、stunnel server 配置

  • 生成证书认证文件
openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem
openssl gendh 512>> stunnel.pem   #不是必须的
  • 配置

vim /etc/stunnel/stunnel_ser.conf (;;; 注释形式)

cert = /etc/stunnel/stunnel.pem   ;;;# 认证文件
CAfile = /etc/stunnel/stunnel.pem  ;;;# 认证文件
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
;;;chroot = /var/run/stunnel
pid = /tmp/stunnel_server.pid
verify = 3
;;; CApath = certs
;;; CRLpath = crls
;;; CRLfile = crls.pem
setuid = web
setgid = web
;;; client=yes
compression = zlib
;;; taskbar = no
delay = no
;;; failover = rr
;;; failover = prio
;;; sslVersion = TLSv1
;;; fips=no
sslVersion = all
;;; options = NO_SSLv2
;;; options = NO_SSLv3
debug = 7
syslog = no
output = /var/logs/stunnel_server.log
client = no  ;;;# 服务端
[sproxy]
accept = 44550  ;;;# 监听端口
connect = 66.0.0.6:3128  ;;;# squid服务连接端口
  • 启动服务 stunnel /etc/stunnel/stunnel_ser.conf

2、squid client 安装配置

yum -y install stunnel openssl openssl-devel
vim  /etc/stunnel/stunnel_cli.conf 

cert = /usr/local/etc/stunnel/stunnel_cli.pem  ;;;#步骤1中生成的stunnel.pem,改了名字而已
CAfile = /usr/local/etc/stunnel/stunnel_cli.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

;;;chroot = /var/run/stunnel
pid = /tmp/stunnel.pid
verify = 3

;;; CApath = certs
;;; CRLpath = crls
;;; CRLfile = crls.pem

setuid = web
setgid = web

;;; client=yes
compression = zlib
;;; taskbar = no
delay = no
;;; failover = rr
;;; failover = prio
;;; fips=no
sslVersion = all
;;; options = NO_SSLv2
;;; options = NO_SSLv3

debug = 7
syslog = no
output = /data/logs/stunnel.log
client = yes   ;;;# 客户端

[sproxy]
accept = 0.0.0.0:44550  ;;;# 监听地址
connect = 66.0.0.6:44550  ;;;# stunnel 服务端地址

四、测试及错误解决

  • 测试:配置代理服务器地址:192.168.0.11,端口44550后,可以访问主机C
  • 错误解决:
stunnel 报错:CERT: Verification error: certificate has expired

stunnel客户端连不上服务端,连上几秒就断开了,具体报错信息如下

# stunnel 客户端:
2017.09.25 10:16:19 LOG7[13955:140155381970688]: Starting certificate verification: depth=0, /C=CN/L=Default City/O=Default Company Ltd
2017.09.25 10:16:19 LOG4[13955:140155381970688]: CERT: Verification error: certificate has expired
2017.09.25 10:16:19 LOG4[13955:140155381970688]: Certificate check failed: depth=0, /C=CN/L=Default City/O=Default Company Ltd
2017.09.25 10:16:19 LOG7[13955:140155381970688]: SSL alert (write): fatal: certificate expired
2017.09.25 10:16:19 LOG3[13955:140155381970688]: SSL_connect: 14090086: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
2017.09.25 10:16:19 LOG5[13955:140155381970688]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2017.09.25 10:16:19 LOG7[13955:140155381970688]: Remote socket (FD=13) closed
2017.09.25 10:16:19 LOG7[13955:140155381970688]: Local socket (FD=3) closed
2017.09.25 10:16:19 LOG7[13955:140155381970688]: Service [sproxy] finished (0 left)

# stunnel 服务端:
2017.09.25 10:13:24 LOG7[15546:140344803059456]: SSL state (accept): SSLv3 flush data
2017.09.25 10:13:24 LOG7[15546:140344803059456]: SSL alert (read): fatal: certificate expired
2017.09.25 10:13:24 LOG3[15546:140344803059456]: SSL_accept: 14094415: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired
2017.09.25 10:13:24 LOG5[15546:140344803059456]: Connection reset: 0 bytes sent to SSL, 0 bytes sent to socket
2017.09.25 10:13:24 LOG7[15546:140344803059456]: sproxy finished (0 left)

需要安装上面的证书生成命令,重新生成证书后手动更新

openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem

squid代理服务器

squid缓存代理概述

——–搭建代理服务器可以提高上网打开网页的速度,可以对非法网站进行屏蔽,限制文件下载,以及查看员工访问internet的情况,包括上网的地址,用户,时间等,是企业网络管理的常用手段。
———–代理服务器分为传统代理和透明代理,传统代理适用于浏览internet,需要在浏览器上手工指定服务器地址和端口,不是很方便,但是可以隐藏本机真实的ip地址,而且为下载工具使用多个代理可以规避服务器的并发连接显示。透明代理适用于共享上网网关,不需要指定服务器地址和端口,无需额外的设置即可上网,在实际工作中透明代理较多。

未分类

未分类

squid安装及运行控制

(一)传统代理

未分类

——配置并启用squid服务(主机B)

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

——–在web服务器打开网站(第一台)

未分类

——–设置代理客户端(主机C)
——– 测试代理Web访问(主机C)

未分类

未分类

—–关闭代理服务的时候

未分类

未分类

—-验证代理服务器
在客户机访问网站,然后查看web服务器的访问日志,发现客户机172.16.16.110访问网站172.16.16.172的记录,但是在web服务器中,查看网站日志文件,显示的访问者是代理服务器的地址172.16.16.22,不是客户端的地址。

未分类

未分类

(二)透明代理,常用。

未分类

未分类

未分类

未分类

未分类

—-或者vim /sysctl.conf sysctl -p —

未分类

未分类

未分类

未分类

—–验证透明代理—

未分类

未分类

设置ACL访问控制

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

squid日志分析

未分类

未分类

未分类

未分类

未分类

未分类

未分类

构建Squid代理服务器

Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org

Squid代理的工作机制

Squid是一个缓存Internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,减少了向Internet提交重复的Web请求的过程,提高了用户下载网页的速度,隐藏了客户机的真实IP,如下图所示:

未分类

安装Squid软件

下面以Squid 3.4.6版为例,介绍其安装和运行控制

1. 编译安装Squid

[root@localhost ~]# tar zxf squid-3.4.6.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/squid-3.4.6/      //配置前可参考"./configure --help"给出的说明
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid     //安装目录
--sysconfdir=/etc/                              //单独将配置文件修改到/etc目录下
--enable-arp-acl                                //可在ACL中设置通过MAC地址进行管理,防止IP欺骗
--enable-linux-netfilter                        //使用内核过滤
--enable-linux-tproxy                           //支持透明模式
--enable-async-io=100                           //异步I/O,提升储存性能,值可修改
--enable-err-language="Simplify_Chinese"        //错误信息的显示语言
--enable-underscore                             //允许URL中有下划线
--enable-poll                                   //使用Poll()模式,提升性能
--enable-gnuregex                               //使用GNU正则表达式

[root@localhost squid-3.4.6]# make && make install     //编译安装
[root@localhost squid-3.4.6]# cd ~                      
[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/  //创建链接文件,优化路径
[root@localhost ~]# useradd -M -s /sbin/nologin squid               //创建程序用户、组
[root@localhost ~]# chown -R squid:squid /usr/local/squid/var/

2. 修改Squid的配置文件

[root@localhost ~]# vim /etc/squid.conf
http_port 3128                     //指定监听地址和端口,默认端口3128
cache_effective_user squid         //用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid        //默认为指定账号的基本组
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256  //此行去掉注释,最大缓存100MB文件,16个一级文件目录,256个二级文件目录

[root@localhost ~]# squid -k parse                    //检查语法是否正确
[root@localhost ~]# squid -z                          //初始化缓存目录
[root@localhost ~]# squid                             //启动squid服务
[root@localhost ~]# netstat -anpt | grep squid        //确认squid服务处于正常监听状态
tcp        0      0 :::3128            :::*               LISTEN      40936/(squid-1)

3. 编写Squid服务脚本

为了使Squid服务的启动、停止、重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig和service工具来进行管理

[root@localhost ~]# vim /etc/init.d/squid 
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - internet object cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
  netstat -anpt | grep squid &> /dev/null
  if [ $? -eq 0 ]
  then
    echo "squid is running"
  else
    echo "正在启动squid..."
    $CMD
  fi
;;
stop)
 $CMD -k kill &> /dev/null
  rm -fr $PID &> /dev/null
;;
status)
  [ -f $PID ] &> /dev/null
  if [ $? -eq 0 ]
  then
    netstat -anpt | grep squid
  else
    echo "squid is not running."
  fi
;;
restart)
  $0 stop &> /dev/null
  echo "正在关闭squid..."
  $0 start &> /dev/null
  echo "正在启动squid..."
;;
reload)
  $CMD -k reconfigure
;;
check)
  $CMD -k parse
;;
*)
  echo "用法:$0 {start | stop | restart | reload | check | status}"
;;
esac

[root@localhost ~]# chmod +x /etc/init.d/squid   
[root@localhost ~]# chkconfig --add squid       //添加为系统服务
[root@localhost ~]# chkconfig squid on

构建代理服务器

根据实现方式的不同,代理服务可分为传统代理和透明代理

传统代理:适用于Internet,必需在客户机手动设置代理服务器的地址和端口

透明代理:适用于局域网环境,客户端不需要指定代理服务器的地址和端口

1. 传统代理

使用传统代理的特定在于,客户机的相关程序(如IE浏览器、QQ)必须指定代理服务器的地址、端口等信息,下面通过一个案例来配置和使用传统代理

未分类

案例:如上图所示,在服务器B上构建Squid代理服务器,允许客户机C指定服务器B作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存

(1)配置服务器A(Web服务器)

[root@localhost ~]# yum -y install httpd              //安装httpd服务
[root@localhost ~]# echo www.yangshufan.com > /var/www/html/index.html  //制作测试网页
[root@localhost ~]# /etc/init.d/httpd start                             //开启httpd服务
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT       //允许Web流量访问

(2)配置服务器B(Squid服务器)

[root@localhost ~]# vim /etc/squid.conf     //修改squid配置文件
reply_body_max_size 10 MB                   //禁止下载的超过10MB的文件
maximum_object_size 4096 KB                 //超过4MB的文件不进行缓存
http_access deny all                        //前面两行需要放在这行之上才生效

[root@localhost ~]# iptables -I INPUT  -p tcp --dport 3128 -j ACCEPT  
[root@localhost ~]# service iptables save                     //允许squid流量通过
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]
[root@localhost ~]# service squid reload                      //重载squid服务

(3)配置客户机C(代理配置)

打开IE浏览器,依次选择“工具”、“Internet选项”、“连接”“局域网设置”,如下图所示:

未分类

未分类

(4)验证代理服务是否发挥作用

1)查看Squid访问日志的新增记录

[root@localhost ~]# tail /usr/local/squid/var/logs/access.log  //可以看到客户机C访问Web服务器的记录
1515630849.964     10 192.168.1.30 TCP_MISS/200 380 GET http://192.168.1.1/ - HIER_DIRECT/192.168.1.1 text/html
1515630850.113      1 192.168.1.30 TCP_MISS/404 561 GET http://192.168.1.1/favicon.ico - HIER_DIRECT/192.168.1.1 text/html

2)查看Web访问日志的新增记录

[root@localhost ~]# tail /var/log/httpd/access_log //可以看到来自Squid服务器的访问记录,Squid服务器代替客户机C访问Web服务器      
192.168.1.10 - - [11/Jan/2018:08:34:18 +0800] "GET /favicon.ico HTTP/1.1" 404 287 "-" "Mozilla/4.0 (compatible; MSIE 8.0;
Windows NT 6.1;WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"

当客户机再次访问同一页面时,Squid访问日志会增加新的记录,而Web访问日志的记录不会变化(除非页面变更或强制刷新等操作)。这说明当客户机访问同一静态页面时,实际上是由代理服务器通过缓存提供的

2. 透明代理

透明代理的提供的功能和传统代理是一致的,但其依赖于默认路由和防火墙的重定向策略,因此更适用于局域网,而不适用于Internet中的客户机,下面也通过一个案例来配置和使用透明代理

未分类

案例:在Linux网关上构建Squid为客户机访问Internet提供代理服务,在客户机上设置IP地址、默认网关,不需要指定代理服务器的地址、端口等信息

(1)配置网站服务器

前面的案例配置一样,就不在赘述了

(2)配置Squid服务器

[root@localhost ~]# vim /etc/squid.conf          //启用透明代理,后面加一个transparent,但3.x版本后改为intercept
http_port 192.168.1.1:3128 transparent           //修改此项,只在这个IP地址提供代理服务
[root@localhost ~]# service squid reload         //重载服务

[root@localhost ~]# vim /etc/sysctl.conf         //启用路由转发功能
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p                    //立即生效
[root@localhost ~]# iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@localhost ~]# service iptables save                          //将80端口转到3128端口,有透明代理访问网站服务器     
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]

(3)在客户机上验证

在IE浏览器设置中,不要勾选使用代理服务器,直接访问访问http://172.16.16.172,然后观察Squid服务器、Web服务器的访问日志,验证透明代理是否发生作用,和前面案例的方法一样,就不在赘述了

由于FTP协议涉及多个端口,多个连接,使用透明代理不便实现,因此最佳做法是采用传统代理的方式实现

ACL访问控制

Squid提供了强大的代理控制机制,通过合理设置ACL并进行控制,可以针对源地址、目标地址、URL路径、访问时间等各种条件进行设置

ACL访问控制通过以下两个步骤来实现:

(1)使用acl配置项定义需要控制的条件
(2)通过http_access配置项对已定义的条件做限制,如“允许”或“拒绝”

1. 定义acl配置项

每一行acl配置可以定义一条访问控制列表,格式如下:

acl  列表名称   列表类型   列表内容

其中,
列表名称:由管理员自行指定,用来识别控制条件
列表类型:必须使用Squid预定义的值,对应不同类别的控制条件
列表内容:具体控制的对象,不同的类型对应的内容也不一样,可以有多个值,用空格分隔

下面是一些常用的访问控制列表类型:

未分类

例如:针对不同的客户机地址、时间段等,分别定义列表

[root@localhost ~]# vi /etc/squid.conf
……
acl mylan src 192.168.1.0/24 192.168.4.0/24     //客户机网段
acl worktime time MTWHF 08:30-17:30             //周一至周五的工作时间段
acl to_host dst 127.0.0.0/8                     //目标地址
acl mc20  maxconn  20                           //最大并发连接20
acl blackURL  url_regex -i ^rtsp://  ^ emo://    //以rtsp://等开头的URL
acl fileURL  urlpath_regex -i .mp3$ .mp4$      //以.mp3、.mp4结尾的URL路径

#当需要限制的同一类型较多时,可以用独立的文件来存放

[root@localhost ~]# mkdir /etc/squid        //建立目标地址名单
[root@localhost ~]# cd /etc/squid
[root@localhost squid]# vim ipblock.list    //建立目标IP地址名单
89.23.12.34
191.12.37.112
171.23.65.0/24
[root@localhost squid]# vim dmblock.list    //建立目标域地址名单
.qq.com
.ysf.com
.yang.com
[root@localhost squid]# vim /etc/squid.conf            
acl ipblock dst "/etc/squid/ipblock.list"       //调用指定文件的列表内容
acl dmblock dstdomain "/etc/squid/dmblock.list"

2. 设置访问权限

定义好acl后,需要设置访问权限,并必须防止对应的acl配置项之后,格式如下:

http_access   deny或allow   列表名

例如:对应上面的acl配置设置相应的访问权限

[root@localhost ~]# vi /etc/squid.conf
……
http_access allow mylan !fileURL      //!取反值,表示禁止客户机下载MP3、MP4文件
http_access allow mylan worktime safeport !ipblock !dmblock
              //允许客户机在工作时间访问80、443端口,拒绝访问黑名单的IP地址、域
http_access deny all                 //默认禁止所有客户机使用代理

[root@localhost squid]# service squid reload     //重载服务,使配置生效

3. 验证访问控制效果

(1)在网站服务器上添加一个以.MP3结尾的文件

[root@localhost squid]# echo yangshufan > /var/www/html/ysf.mp3 
[root@localhost squid]# cat /var/www/html/ysf.mp3 
yangshufan

(2)在客户机上验证是否可以访问这个文件

未分类

Squid日志分析

Sarg全名是Squid Analysis Report Generator,是一款Squid日志分析工具,采用HTML格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等

1. 配置过程如下

[root@localhost ~]# yum -y install gd gd-devel
[root@localhost ~]# tar zxf sarg-2.3.7.tar.gz
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg//安装目录
--sysconfdir=/etc/sarg                                       //配置文件目录
--enable-extraprotection && make && make install       //添加额外的安全保护

[root@localhost sarg-2.3.7]# cd /etc/sarg/
[root@localhost sarg]# vim sarg.conf                    //修改配置文件,去掉#
access_log /usr/local/squid/var/logs/access.log   //指定Squid的访问日志文件        
title "Squid User Access Reports"                 //网页标题
output_dir /var/www/html/sarg                     //sarg报告的输出目录
user_ip no                                        //使用用户名显示
topuser_sort_field BYTES reverse //降序排列指定连接次数、访问字节数,升序换成normal
user_sort_field BYTES reverse    //降序排列用户访问记录、连接次数
overwrite_report no                      //当那么日期时间报告已存在,是否覆盖报告
mail_utility mailq.postfix               //发送邮件报告的命令
exclude_hosts /usr/local/sarg/noreport   //指定不计入排列的站点目录
charset UTF-8                            //使用字符集
weekdays 0-6                             //指定top排列的星期,0为周日
hours 7-12,14,16,18-20                   //指定top排列的时间周期
www_document_root /var/www/html          //网页根目录

[root@localhost sarg]# touch /usr/local/sarg/noreport  //把不计入站点的文件添加到文件
[root@localhost sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/      //优化路径
[root@localhost sarg]# sarg                       //启动一次记录
SARG: 纪录在文件: 171, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2018Jan11-2018Jan11

2. 验证

未分类

3. 设置计划任务,定期执行

[root@localhost ~]# vim /usr/local/sarg/ysf.sh         //编写脚本,每天的报告
#/bin/bash                                  
today=$(date +%d/%M/%Y)
terday=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $terday-$today &> /dev/null
exit 0

[root@localhost ~]# chmod +x /usr/local/sarg/ysf.sh 
[root@localhost ~]# crontab -e              //每天00:00执行
00 00 * * * /usr/local/sarg/ysf.com
[root@localhost ~]# chkconfig crond on

编译安装squid

概述

什么是squid,简单的说squid是一款代理缓存软件就是加速网站访问的,国内部分cdn服务用的就是squid,cdn大家应该清楚吧,内容分发网络,cdn的作用也就是为了加速网站在全国各地的访问

工作流程

squid的工作流程是怎么样的呢,我举一个例子,我要请求一个网页,我不是直接向网站的服务器请求的,而是向网站的代理服务器,简单来说就是安装了squid的这台服务器请求数据,这台装着squid的服务器如果有你需要的网站页面的话它会直接发送给你,如果没有,它就会代你去向网站的服务器去请求,当squid服务器请求到数据了之后,它会复制一份道自己这里,然后发一份给你,当你第二次要这些网页的时候,squid会直接把它存的页面发送给你。因为网站的服务器我不可能每一个省都部署一个,但是squid服务器却可以,所以部署squid缓存服务器有降低网站服务器压力和带宽的作用,同时也可以让用户更快得得到自己所需要的网页。

问题

每个东西有利也有弊,当你的网页更新了,但是缓存服务器里的数据还没有更新的时候,问题就出现了,用户请求的网页总是旧的网页。导致不能即使更新网站,所以什么东西适合缓存呢,当然是更新少的东西适合缓存了,比如js,css,图片等,而那些更新快的数据就尽量减少缓存了

编译squid

官网:http://www.squid-cache.org/
首先下载源码包,我下载的是3.5.27版本的

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.27.tar.gz

解压

tar -zxvf squid-3.5.27.tar.gz

接着我的编译参数是

./configure 
--prefix=/usr/local/squid 
--localstatedir=/usr/local/squid/var 
--sysconfdir=/usr/local/squid/etc 
--with-openssl=/root/software/squid/openssl-1.0.2n 
--enable-dlmalloc 
--enable-gnuregex 
--enable-carp 
--enable-async-io 
--enable-storeio=aufs,diskd,ufs 
--enable-icmp 
--enable-delay-pools 
--enable-removal-policies=heap,lru 
--enable-useragent-log 
--enable-referer-log 
--enable-snmp 
--enable-arp-acl 
--enable-htcp 
--enable-ssl 
--enable-cache-digests 
--with-coss-membuf-size=2097152 
--enable-poll 
--enable-linux-netfilter 
--enable-x-accelerator-vary 
--enable-stacktrace 
--enable-truncate 
--enable-underscores 
--enable-auth

它们的意思是

安装目录/usr/local/squid
缓存日志目录/usr/local/squid/var
配置文件目录/usr/local/squid/etc
指定openssl路径
使用dlmalloc内存分配器
使用gnu正则表达式
使用carp
使用异步io
使用aufs,diskd,ufs存储模块
启用icmp
启用延时池
启用排除策略
激活来自客户的useragent日志
激活来自客户的referer日志
启用snmp
启动arp-acl
启用htcp
启用ssl
启用cache-digests
指定coss内存缓冲大小为2M
启用poll
使用netfilter
启用x-accelerator-vary
启用stacktrace
启用truncate
使主机名可以带下划线
使squid支持所有的验证机制

所以首先我要安装openssl库

下载

wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz

记住解压之后不需要安装,之后在指定openssl路径的编译参数那里加上它的路径就好,还有就是openssl1.1版本是不能使用的,要使用1.0的

接着编译

make -j4

安装

make install

安装完成

CentOS上用Squid搭建HTTP代理小结

1、安装Squid

yum install squid -y

# -y 代表自动选择y,全自动安装

2、安装后,可以自定义http代理端口,设置来源IP白名单等

vi /etc/squid/squid.conf

# ------ 自定义http端口:

# Squid normally listens to port 3128
http_port 8088

# ------ 设置来源IP白名单,增加的这两行要在 http_access deny all 前面

acl client src 122.55.87.125
http_access allow client

# And finally deny all other access to this proxy
http_access deny all

3、默认squid的access日志里的时间为unix时间戳,不方便阅读,可以通过在 /etc/squid/squid.conf 增加一行logformat配置:

#此行加在配置文件末尾即可
#access log time human-readable
logformat squid %tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt

4、修改完配置文件后,reload即可生效:

/etc/init.d/squid reload

#另外启动和重启命令
/etc/init.d/squid start
/etc/init.d/squid restart

5、如果想在防火墙级别就限定只允许白名单IP访问代理端口:

vi /etc/sysconfig/iptables

-A INPUT -s 122.55.87.125 -p tcp -m tcp --dport 8088 -j ACCEPT

service iptables restart

Centos 7搭建、配置和使用Http代理(Squid服务器)

一、前言

最近搞了一台腾讯云内网服务器(把公网带宽调到了0Mbps),为了使内网服务器也能连上外网,稍微折腾了一下下Http代理。

本文以Squid代理服务器为栗子,简单介绍一下基本用法

二、安装Squid服务器

首先,在一台能同时连接公网和内网服务器的服务器上安装Squid代理服务器

yum install squid -y

然后就安装完了,是不是很简单呢(鬼才懒得编译呢)

三、配置Squid服务器

主要需要配置的是三个部分:

1、配置允许使用代理的IP地址

#此处使用10.0.0.0/16代表的是,整个10.0.x.x IP段都能使用(x代表任意255内的数字)
acl localnet src 10.0.0.0/16

#如果是限定单个IP使用,则是10.0.0.1/32
acl localnet src 10.0.0.1/32

2、配置允许访问的IP列表

第一个步骤是将10.0.0.0/16整个IP段命名标记为localnet,现在要将localnet添加进允许使用的列表中

#此处代表允许访问的列表包括localhost、manager、localnet三个IP段
http_access allow localhost manager localnet

3、配置Squid监听地址

这个步骤是为了进一步加强安全措施,防止代理服务器被滥用(盗用)

#最简便的规则,监听所有IP的3128端口,不安全,不建议使用
http_port 0.0.0.0:3128

#仅监听内网IP的3128端口,相对安全,建议使用
http_port 10.0.0.1:3128

四、使用代理

1、yum代理

#编辑/etc/yum.conf文件
vim /etc/yum.conf

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

proxy=http://10.0.0.1:3128/ 

2、wget代理

#编辑/etc/wgetrc文件
vim /etc/wgetrc

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

http_proxy=http://10.0.0.1:3128/
ftp_proxy=http://10.0.0.1:3128/

3、环境变量

#编辑/etc/profile文件
vim /etc/profile

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

http_proxy=http://10.0.0.1:3128/
ftp_proxy=http://10.0.0.1:3128/

export http_proxy
export ftp_proxy

squid+stunnel为docker配置代理服务器

目地

为k8s的docker服务提供http/https代理,解决docker无法pull gcr.io/google_containers 谷歌镜像问题

环境

  • GCE ubuntu 16.04
  • k8s集群机器 ubuntu16.04

简要步骤

一、GCE 搭建squid正向http/https代理服务器

1. 直接使用apt-get install 安装

apt-get install squid3 -y

注意:配置文件在/etc/squid或/etc/squid3下,根据系统不同可能会有一点差异,由于这里进行快速安装,不需要暴露端口给外部使用,也不需要密码,所以配置文件我这里保持默认

二、GCE 安装stunnel代理服务器

1. stunnel主要用来在GCE和k8s机器上代理的数据传输进行加密,否则明文传输很快会被GFW拦截.注意stunnel分为服务端和客户端,GCE上安装服务端,在k8s集群上安装客户端

2. 直接使用apt-get install 安装服务端

apt-get install stunnel4 -y

如果遇到

  • 正试图覆盖 /etc/ppp/ip-down.d,它同时被包含于软件包 resolvconf 1.78ubuntu2
  • dpkg-deb:错误:子进程 粘贴 被信号(断开的管道) 终止了

使用dpkg强制覆盖安装:

cd /var/cache/apt/archives
dpkg -i --force-overwrite xxx.deb

编辑配置文件 vim /etc/stunnel/stunnel.conf

client = no #是否为客户端 这里是服务端填写no
[squid]
accept = 65501
connect = 127.0.0.1:3128 #本地squid服务地址
cert = /etc/stunnel/stunnel.pem #下一步生成的证书地址

openssl生成证书,用户stunnel加密解密

openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem

注意:创建证书时,系统会要求您提供一些国家/地区信息,可随便输入,但是当被要求输入“Common Name”时,您必须输入正确的hostname或IP地址(VPS),我这里输入的ip地址。

通过配置/etc/default/stunnel4文件启用自动启动,vim /etc/default/stunnel4

#将ENABLED更改为1:

ENABLED=1

重新启动Stunnel使配置生效,使用以下命令:

/etc/init.d/stunnel4 restart

三、K8S 集群机器分别搭建stunnel

1. 安装步骤几乎和上面相同

2. scp或其他方法把证书拷贝到k8s集群中

3. 配置文件不同(注意不要#号,systemctl status stunnel4.service)

cert = /etc/stunnel/stunnel.pem #和服务端完全相同的证书
client = yes #声明为客户端
[squid]
accept = 127.0.0.1:65502 #本地代理的端口,即为http/https代理地址
connect = {GCE_IP}:65501 #GCE 服务端ip和端口

四、浏览器SwitchyOmega代理穿透GFW

1. 配置添加http代理127.0.0.1:65502 即可

五、docker添加http/https代理请参考官方文档

https://docs.docker.com/engine/admin/systemd/#start-manually