Implementación del servicio proxy del rastreador basado en Squid

Agente

Cómo funciona el servidor proxy

Cómo funciona el servidor proxy:

1. El cliente A envía una solicitud al servidor proxy para acceder a Internet.
2. Después de aceptar la solicitud, el servidor proxy primero coincide con las reglas de acceso en la lista de control de acceso. Si se cumplen las reglas, se busca en la memoria caché la información de recursos requerida.
3. Si la información de solicitud del cliente A existe en el caché, devuelva esta información al cliente A, si no hay un servidor proxy, reemplazará al cliente y solicitará la información especificada de Internet.
4. El host en Internet envía la información solicitada al servidor proxy, y el servidor proxy almacenará la información en la memoria caché.
5. El servidor proxy transmite la información de retorno del host en Internet al cliente A.
6. Cuando el cliente B también solicita la misma información.
7. El servidor proxy también aceptará la solicitud y coincidirá con las reglas en la lista de control de acceso.
8. Si se cumplen las reglas, el servidor proxy pasará la información en el caché directamente al cliente B.

Clasificación de agente

  • Agente de reenvío (control de acceso de intranet a Internet)

  • Proxy inverso (control de acceso de red externa a red interna)

  • Proxy transparente (proxy directo sin cifrado)

Agente delantero

Acceso proxy interno a Internet del host, acceso compartido a Internet, almacenamiento en caché, control del comportamiento de acceso a Internet de los usuarios de Internet y otras funciones (los clientes deben configurar la IP del servidor proxy y el puerto proxy)

正向代理分析图:
		外网
		 |
		modem
		 |
		路由器(dhcp,snat共享上网,上网行为控制,限速等)
		 |
		 |
	 squid正向代理(共享上网,静态页面缓存加速,内网用户四七层上网行为控制,限速等)
		 |
		 |	
	|----------------------|
 上网用户一		    上网用户二
            公网
			br0	172.16.13.250
			squid 服务器 
			virbr1	192.168.100.1		   
			 |
			 |
			 |	
			内网用户VM1          	   	
			eth0(virbr1)			
			192.168.100.128

Proxy inverso

Acceda a servidores internos desde una red externa, en contra de la dirección positiva, utilizada principalmente para la aceleración de caché o CDN de la arquitectura del sitio web

            client
			  |
			  |
			反向代理 (缓存加速,七层切分,负载均衡,会话保持等)
			  web

Proxy transparente

La función del proxy directo es completamente coherente (el cliente no necesita configurar la IP del servidor proxy y el puerto proxy, que es transparente para el usuario)

Referencias

https://www.cnblogs.com/yanjieli/p/7507456.html

Calamar

El concepto

Squid es un software de servidor proxy de caché, que se usa ampliamente en la arquitectura de equilibrio de carga de los sitios web. Los servidores de caché comunes incluyen barniz y ATS.

El servidor proxy directo puede cumplir el requisito de que solo un servidor en la intranet pueda acceder a Internet, y la necesidad de proporcionar acceso a Internet a todas las máquinas en la intranet también se puede usar para el acceso proxy del rastreador. En la práctica me Calamar servidor proxy como un rastreador, para lograr un multi- IPselector de función.

Instalar

yum install -y squid

Instrucciones de configuración

Configurar autenticación

yum install httpd

# 然后执行如下命令进行生成 用户名和密码,这里的示例为生成一个账号:hello
# 执行该命令之后,根据提示输入设置密码
htpasswd -c /etc/squid/passwd hello

Archivo de configuración

Et /etd/squid/squid.conf)

acl all src 0.0.0.0/0.0.0.0     #允许所有IP访问
acl manager proto http        #manager url协议为http
acl localhost src 127.0.0.1/255.255.255.255 #允午本机IP
acl to_localhost dst 127.0.0.1         #允午目的地址为本机IP
acl CONNECT method CONNECT     #请求方法以CONNECT

#http_access allow all         #允许所有人使用该代理.

#http_reply_access allow all         #允许所有客户端使用该代理

acl Safe_ports port 80     # 允许安全更新的端口为80
acl Safe_ports port 443    #允许安全更新的端口为443
acl localnet src 10.195.249.225   #
acl localnet src 10.195.236.141   #


http_access allow localnet      #
http_access deny !Safe_ports      #

acl OverConnLimit maxconn 16    #限制每个IP最大允许16个连接,防止攻击

http_access deny OverConnLimit

 
icp_access deny all             #禁止从邻居服务器缓冲内发送和接收ICP请求.
miss_access allow all         #允许直接更新请求
ident_lookup_access deny all                 #禁止lookup检查DNS
http_port 8080 transparent                 #指定Squid监听浏览器客户请求的端口号。

hierarchy_stoplist cgi-bin ?         #用来强制某些特定的对象不被缓存,主要是处于安全的目的。

acl QUERY urlpath_regex cgi-bin \?

cache deny QUERY

cache_mem 1 GB     #这是一个优化选项,增加该内存值有利于缓存。应该注意的是:

​           \#一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1G

fqdncache_size 1024    #FQDN 高速缓存大小

maximum_object_size_in_memory 2 MB     #允许最大的文件载入内存


memory_replacement_policy heap LFUDA  #动态使用最小的,移出内存cache

cache_replacement_policy heap LFUDA     #动态使用最小的,移出硬盘cache


cache_dir ufs /home/cache 5000 32 512 #高速缓存目录 ufs 类型 使用的缓冲值最大允午1000MB空间,

\#32个一级目录,512个二级目录


max_open_disk_fds 0                 #允许最大打开文件数量,0 无限制

minimum_object_size 1 KB             #允午最小文件请求体大小

maximum_object_size 20 MB         #允午最大文件请求体大小

cache_swap_low 90              #最小允许使用swap 90%

cache_swap_high 95              #最多允许使用swap 95%

 
ipcache_size 2048                # IP 地址高速缓存大小 2M
ipcache_low 90                #最小允许ipcache使用swap 90%
ipcache_high 95                 #最大允许ipcache使用swap 90%


access_log /var/log/squid/access.log squid     #定义日志存放记录
cache_log /var/log/squid/cache.log squid
cache_store_log none             #禁止store日志


emulate_httpd_log on     #将使Squid仿照Web服务器的格式创建访问记录。如果希望使用

​                \#Web访问记录分析程序,就需要设置这个参数。


refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload  #更新cache规则


acl buggy_server url_regex ^http://.... http://      #只允许http的请求broken_posts allow buggy_server

acl apache rep_header Server ^Apache         #允许apache的编码

broken_vary_encoding allow apache


request_entities off                     #禁止非http的标分准请求,防止攻击
header_access header allow all             #允许所有的http报头
relaxed_header_parser on                 #不严格分析http报头.
client_lifetime 120 minute                 #最大客户连接时间 120分钟
cache_mgr [email protected]             #指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。
cache_effective_user squid             #这里以用户squid的身份Squid服务器
cache_effective_group squid

icp_port 0            #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
​           \#这里设置为0是因为这里配置Squid为内部Web服务器的加速器,
​           \#所以不需要使用邻居服务器的缓冲。0是禁用

\# cache_peer 设置允许更新缓存的主机,因是本机所以127.0.0.1

cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange
cache_peer_domain 127.0.0.1                 
hostname_aliases 127.0.0.1

error_directory /usr/share/squid/errors/Simplify_Chinese     #定义错误路径

always_direct allow all         # cache丢失或不存在是允许所有请求直接转发到原始服务器
ignore_unknown_nameservers on     #开反DNS查询,当域名地址不相同时候,禁止访问
coredump_dir  /var/log/squid         #定义dump的目录
max_filedesc 2048        #最大打开的文件描述

half_closed_clients off     #使Squid在当read不再返回数据时立即关闭客户端的连接。

​                \#有时read不再返回数据是由于某些客户关闭TCP的发送数据
​                \#而仍然保持接收数据。而Squid分辨不出TCP半关闭和完全关闭。

Cuando Squid es un proxy de rastreador, solo necesitamos ser un proxy de Squid, y luego enviar las encuestas a otros agentes, cómo usar Squid como proxy y

Sondeo de reenvío automático?

Agregue esta línea de código:

cache_peer 120.xx.xx.32 parent 80 0 no-query weighted-round-robin weight=2 connect-fail-limit=2 allow-miss max-conn=5 name=proxy-90

Tenga en cuenta que cuando 120.xx.xx.32son iguales pero los puertos son diferentes, debe establecer un nombre diferente, de lo contrario obtendrá un error. En cache_peer 120.xx.xx.32 specified twiceeste caso, debe establecer un nombre diferente.

Significado de las palabras clave de configuración

La sintaxis es tal caché_peer dirección del servidor web tipo de servidor http port icp port [opcional] , las opciones incluyen:

  • solo proxy: indica que los datos obtenidos del par no se almacenan en caché localmente. De manera predeterminada, Squid almacena en caché esta parte de los datos;
  • peso = n: se utiliza cuando tiene múltiples pares. Si más de un par tiene los datos que solicitó, Squid determina el valor del peso calculando el tiempo de respuesta de ICP de cada par, y luego Entre ellos, el compañero con el mayor peso emite una solicitud de ICP. Es decir, cuanto mayor es el valor del peso, mayor es su prioridad. Por supuesto, también puede especificar manualmente su valor de peso;
  • sin consulta: no envíe una solicitud ICP a este par. Si el par no está disponible, puede usar esta opción;
  • Predeterminado: un poco como la ruta predeterminada en la tabla de enrutamiento, este par se utilizará como último recurso. Cuando solo tiene un servidor proxy principal y no admite el protocolo ICP, puede usar las opciones predeterminadas y sin consulta para que todas las solicitudes se envíen al servidor proxy principal;
  • login = user: password: esta opción se puede usar para la autenticación cuando el servidor proxy principal requiere autenticación de usuario.
    Una vez completada la actualización, guarde y reinicie Squid, verá que Squid ya está disponible.

Control de acceso

squid的acl(access control list)访问控制(下面列举一些常见的控制)

acl denyip src  192.168.100.128/32 	--拒绝内网的192.168.100.128/32上网
http_access deny denyip

acl denyip src 192.168.100.128-192.168.100.132/255.255.255.255
http_access deny denyip

acl vip  arp  00:0C:29:79:0C:1A 
http_access allow  vip 

acl  baddsturl2  dst   220.11.22.33  --不能访问这个外网IP的网站
http_access deny baddsturl2

acl  baddsturl  dstdomain -i  www.163.com  --不能访问www.163.com和WWW.163.COM;-i参数定义大小写都匹配;  但是可以访问war.163.com或sports.163.com
http_access deny baddsturl

acl  baddsturl  dstdom_regex -i  163	--这是把163以下的所有域名都禁止  ,但直接使用IP仍然是可以访问的
http_access deny   baddsturl

acl  baddsturl  dstdom_regex "/etc/squid/baddsturl"  --如果网址太多,可以写成一个文件,然后在这个文件里一行一个网站写上你要禁止的
http_access deny baddsturl

acl baddsturl3  url_regex  -i  baidu   --拒绝访问url里有baidu这个关键字的网站
http_access deny baddsturl3

acl badfile  urlpath_regex -i \.mp3$ \.rmvb$ \.exe$ \.zip$ \.mp4$ \.avi$  \.rar$
http_access deny badfile	--禁止下载带有定义后缀名的文件

acl badipclient2  src 192.168.100.0/255.255.255.0
acl worktime time  MTWHF 9:00-17:00
http_access deny badipclient2 worktime  --拒绝192.168.100.0网段工作时间不能上网

acl badipclient3  src 192.168.100.128
acl conn5  maxconn  5
http_access deny badipclient3 conn5	--最大连接数为5

https://www.cnblogs.com/wangxiaoqiangs/p/5796597.html

Inicializar

修改完配置文件之后保存,然后输入以下命令进行初始化 squid

squid -z

El problema

TCP_MISS / 503

Encontré el siguiente contenido en el registro

1587003941.248      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003942.505      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003943.779    301 172.25.0.1 TCP_MISS/200 388 GET http://httpbin.org/ip - HIER_DIRECT/34.230.193.231 application/json
1587003943.899      0 172.25.0.1 TCP_MISS/503 4357 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003945.333      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html

Ver una palabra clave TCP_MISS / 503

Google, encuentre este artículo: https://forums.freebsd.org/threads/34184/

Resolver:

Resulta que IPv6 no es compatible. Siga las indicaciones dentro y configure un dns_v4_first en /etc/squid/squid.conf

¡Es hora de volver a intentarlo!

Si aún no funciona, modifique la configuración del sistema directamente

Modifique / etc / sysconfig / network:
establezca NETWORKING_IPV6 = no

(Preferiblemente reiniciar una vez)

Referencias

http://cn.linux.vbird.org/linux_server/0420squid.php#server_default

Pool proxy

https://github.com/AaronJny/open_proxy_pool

Actualizador de perfil

https://github.com/xNathan/squid_proxy_pool

La documentación de los artículos anteriores.

https://xnathan.com/2017/03/01/squid-anony-proxy/

https://xnathan.com/2017/02/28/squid-proxy/

https://xnathan.com/2017/03/02/squid-proxy-pool/

Manual Oficial de Calamar

img

Http://zyan.cc/book/squid/index.html

Ejemplo de referencia

https://rookiefly.cn/detail/192

134 artículos originales publicados · Me gustaron 119 · Visite 310,000+

Supongo que te gusta

Origin blog.csdn.net/jobbofhe/article/details/105561452
Recomendado
Clasificación