网络代理服务器(外网代理服务器)

一个致力于技术道路的终身学习者、实践者、分享者,一个忙碌偶尔偷懒的原创博主,一个偶尔无聊偶尔幽默的少年。1.鱿鱼是什么?Squid:是一个高性能的代理缓存服务器

一个致力于技术道路的终身学习者、实践者、分享者,一个忙碌偶尔偷懒的原创博主,一个偶尔无聊偶尔幽默的少年。

网络代理服务器(外网代理服务器)插图

1.鱿鱼是什么?

Squid:是一个高性能的代理缓存服务器。Squid支持FTP、gopher、HTTPS和HTTP协议。与一般的代理缓存软件不同,Squid使用单一的、非模块化的、I/O驱动的进程来处理所有客户端请求。Squid作为应用层的代理服务软件,主要提供缓存加速和应用层过滤控制的功能。

二、为什么要用鱿鱼?

Squid是在最初的内容分发和缓存工作之后产生的项目之一。它已经发展到包括附加功能,例如强大的访问控制、授权、日志记录、内容分发/复制、流量管理和整形等。有许多新的和旧的解决方案来处理不完整和不正确的HTTP实现。

主要分为以下三点:1)对于ISP:节省带宽,提升用户体验。

Squid允许互联网提供商通过内容缓存节省带宽。缓存内容是指数据在本地提供,用户可以通过经常使用的内容以更快的下载速度看到。即使没有缓存,经过良好调整的代理服务器也可以通过优化TCP流来提高用户速度。调整服务器处理网络上的各种延迟很容易,但是桌面环境根本不适合这种延迟。

Squid使ISP不必花费大量资金来升级核心设备和传输链路,以应对日益增长的内容需求。它还允许互联网服务提供商根据技术或经济原因决定优先级并控制某些类型的网络内容。

2)对于网站来说:无需花费大量的硬件和开发时间就可以扩展应用。

很多网站使用Squid来降低服务器负载。通用内容由Squid缓存并提供给客户机,但通常只需要应用服务器负载的一小部分。在现有网站前设置加速器几乎总是一项快速而简单的任务,并且会带来直接的好处。

3)对于内容交付提供商:在全球范围内分发您的内容

Squid使得内容发布者和开发者可以很容易地在世界范围内发布内容。CDN提供商可以购买运行Squid的廉价PC硬件,然后部署在互联网上的战略位置,廉价高效地提供大量数据。

三。Squid剂的作用机理

当客户端通过代理请求网页时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户端需要的页面,则直接将缓存中的页面内容反馈给客户端;

如果缓存中没有可供客户端访问的页面,代理服务器会向互联网发送访问请求。获取返回的网页后,网页数据保存在缓存中并发送给客户端。

简要描述流程图如下:

HTTP代理中的缓存加速对象主要是文本、图片等静态Web元素。使用缓存机制后,当客户端在不同时间访问同一网页时,或者不同客户端访问同一网页时,可以直接从代理服务器的缓存中获取结果。同时大大减少了向互联网提交重复网页请求的过程,提高了客户端网页访问的响应速度。

客户端的网页访问请求由代理服务器完成,可以隐藏用户的真实IP地址,起到一定的保护作用。同时会对要访问的目标、客户端的地址、访问时间段等进行过滤控制。

四。Squid代理的基本类型传统代理:也可以理解为:普通代理服务,需在客户端的浏览器等程序中手动设置代理服务器的地址和端口,才可以使用代理来进行访问网络,对于浏览器访问网站时的域名解析请求会发给指定的代理服务器。透明代理:提供与传统代理相同的功能和服务,区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将网页访问重定向,实际上来说,还是交给代理服务器来进行处理。5.Squid源代码包

在Linux操作系统下,Squid rpm是打包成包的。这也是让Squid快速启动并运行的最简单的方法,也是让受支持的Squid版本保持最新的好方法。特殊情况下,还可以下载Squid的二进制软件包,可以在多种平台上使用,包括Windows等。

地址:

wiki.squid-cache.org/SquidFaq/Bi…

源代码,下载后可以在编译时自定义Squid安装。最新发布:鱿鱼-4.10。

Squid-4.10下载地址:

www.squid-cache.org/Versions/v4…

你也可以参考编译Squid来帮助编译源代码。

地址:

wiki.squid-cache.org/SquidFaq/Co…

更多软件包版本可以通过官网查看。

地址:www.squid-cache.org/Versions/

不及物动词设置Squid代理服务器

首先,设置环境和设备,配置IP地址。

1)客户端(Windows Server/Windows)2)Web服务器(需要启动HTTPD服务)3)Squid代理服务器(需要配置两块网卡:一块是内网IP地址,一块是公网IP地址)

客户端配置

首先将客户端的IP地址配置为:192.168.3.1(内网IP地址),选择VMnet8作为网卡。配置完成后,检查IP是否配置正确,并正确关闭防火墙。

服务器配置# ip a // 查看 IP 地址# service iptables stop // 关闭防火墙 和 SElinux# setenforce 0# rpm -q httpd // 查看系统中是否有 HTTPD rpm 包httpd-2.2.15-29.el6.centos.x86_64# service httpd start // 启动 HTTPD 服务# echo "Welcome jack to this website." > /var/www/html/index.html //将 Welcome jack to this website.写入网站目录下的 html 文件下# curl http://202.100.0.100 // 测试访问本机 IP 地址是否能够正常输出Welcome jack to this website.复制代码Squid代理服务器端配置

解压Squid源码包,配置Squid编译选项,将安装目录设置为/usr/local/squid。其他具体选项可根据实际需要进行配置,或参考的说明。/configure-help。

# tar xf squid-3.4.6.tar.gz# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linxu-tproxy --enable-async-io=100 --enable-poll --enable-err-language="Simplify_Chinese" --enable-undersxcore --enable-poll --enable-gnuregex# make && make install复制代码

上述编译选项的含义:

--prefix=/usr/local/squid:安装目录--sysconfdir=/etc:单独给配置文件修改到其他目录--enable-arp-acl:可在规则中设置直接通过客户端 MAC 进行管理,防止客户端使用 IP 欺骗--enable-linux-netfilter:使用内核过滤--enable-linxu-tproxy:支持透明模式--enable-async-io=100:异步 I/O,提升存储性能--enable-poll:使用 poll() 模式,提升性能--enable-err-language="Simplify_Chinese":错误信息的显示语言--enable-undersxcore:允许 URL 中有下划线--enable-gnuregex:使用 GNU 正则表达式创建链接的文件、用户、组# ln -s /usr/local/squid/sbin/* /usr/local/sbin/# useradd -M -s /sbin/nologin squid# chown -R squid:squid /usr/local/squid/var复制代码修改Squid配置文件

Squid服务的配置文件位于:/etc/squid.conf,了解配置行有助于管理员根据实际情况灵活配置代理服务。

# vim /etc/squid.conf59 http_port 3128 // 用于指定代理服务监听的地址和端口,默认端口号为:312860 cache_effective_user squid // 指定 Squid 的程序用户,用于设置初始化、运行时缓存的账号,否则启动不成功。61 cache_effective_group squid // 默认为 cache_effective_user 指定账号的基本组76 visible_hostname squid.packet-pushers.net // 在配置文件文末最后一行添加 visible_hostname 配置,否则无法启动 Squid 服务。复制代码Squid操作控制,检查配置文件语法是否正确;# squid -k parse复制代码启动和停止Squid

第一次启动Squid服务时,缓存目录会自动初始化。当没有可用的Squid服务脚本时,可以调用Squid程序来启动服务,这需要先进行初始化。

# squid -z // -z 选项用来初始化缓存目录# squid // 启动 Squid 服务复制代码检查Squid服务监听状态是否监听了端口号3128;# netstat -anpt | grep "squid"tcp 0 0 :::3128 :::* LISTEN 19068/(squid-1)复制代码

除了以上,可以使用源码包进行安装,也可以编写Squid服务脚本进行操作,使用chkconfig和服务工具进行管理,这样我们就可以通过Squid服务脚本来启动、停止和重启Squid服务。执行时,只需添加相应的参数即可。

#!/bin/bash# chkconfig: 2345 90 25# config: /etc/squid.conf# pidfile: /usr/local/squid/var/run/squid.pid# Description: Squid 脚本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 -rf $PID &> /dev/null ;; restart) $0 stop &> /dev/null echo "正在关闭 Squid..." $0 start &> /dev/null echo "正在启动 Squid..." ;; reload) $CMD -k reconfigure ;; check) $CMD -k parse ;; status) [ -f $PID ] &> /dev/null if [ $? -eq 0 ] then netstat -anpt | grep squid else echo "Squid 没有运行" fi ;; *) echo "用法 $0 {start|stop|restart|check|status}" ;; esac# chmod +x /etc/init.d/squid // 授权该脚本文件# chkconfig --add squid // 添加为系统服务# chkconfig squid on复制代码七、搭建代理服务器。传统代理:主要在于客户端的相关程序,必须指定代理服务器的地址、端口等信息。

描述:

1)在Squid代理服务器上为客户端访问各类网站提供代理服务,但禁止通过代理下载大小超过10MB的文件;

2)应该在客户端上指定Squid代理服务器作为Web访问代理,并隐藏客户端的真实IP地址。

Squid作为代理服务器,必须建立Squid服务并允许客户端使用代理。当客户端通过代理以IP地址的形式访问时。客户端需要指定代理服务器地址、端口号等。用于浏览器等程序,并且Web服务器需要启用HTTPD服务。

Squid代理服务器配置

当Squid被配置为实现传统的代理服务时,需要添加http_access allow all访问策略,这样任何客户端都可以使用代理服务并限制下载文件的大小。应配置reply_body_max_size选项。

修改Squid.conf配置文件

# vim /etc/squid.conf59 http_port 3128 60 reply_body_max_size 10 MB // 允许下载的最大文件大小61 http_access allow all // 放在 http_access allow all 之前复制代码

防火墙需要添加一个允许的策略并保存它。

# iptables -I -INPUT -p tcp --dport 3128 -j ACCEPT# service iptables save复制代码

重新启动Squid服务

# service squid reload复制代码

客户端的代理配置

在浏览器中,选择工具-Internet选项,打开Internet选项对话框。在“连接”选项卡的“局域网设置”选项中,单击“局域网设置”按钮,以配置代理服务器的IP地址和端口。

代理的认证方法

在客户端192.168.3.100,通过浏览器访问目标网站http://202.100.0.100/,,使用Squid代理服务器和网站服务器的访问日志来验证代理服务是否工作。

检查Squid访问日志的记录。

在Squid代理服务器上,通过跟踪Squid服务的日志文件,可以看到客户端192.168.3.1访问网站服务器的202.100.0.100记录。

# tail /usr/local/squid/var/logs/access.log1582563190.161 9372 192.168.3.1 TCP_MISS/200 366 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 text/html1582634544.842 2584 192.168.3.1 TCP_CLIENT_REFRESH_MISS/304 218 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 - 1582634545.836 340 192.168.3.1 TCP_MISS/404 537 GET http://202.100.0.100/favicon.ico - HIER_DIRECT/202.100.0.100 text/html1582635089.249 344 192.168.3.1 TCP_CLIENT_REFRESH_MISS/304 218 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 - 复制代码

查看Web访问日志的记录

在网站服务器上,通过跟踪HTTPD服务的访问日志文件,可以找到代理服务器的IP地址:202.100.0.1的访问记录。实际上并没有Squid的客户端IP地址访问日志的记录:192.168.3.1。事实上,代理服务器为它访问网站服务器。

当客户端再次访问网站时,一条新的记录将被添加到Squid的访问日志中,并且Web访问日志中的记录不会改变。事实上,它是由代理服务器通过缓存提供的。除非对网站页面进行调整或强制刷新。

# tail /var/log/httpd/access_log 202.100.0.100 - - [23/Feb/2020:21:19:37 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"202.100.0.100 - - [24/Feb/2020:00:35:09 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"202.100.0.1 - - [25/Feb/2020:00:53:09 +0800] "GET / HTTP/1.1" 200 30 "-" "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)"202.100.0.100 - - [25/Feb/2020:01:21:09 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"202.100.0.1 - - [25/Feb/2020:20:42:22 +0800] "GET / HTTP/1.1" 304 - "-" "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)"202.100.0.1 - - [25/Feb/2020:20:42:25 +0800] "GET /favicon.ico HTTP/1.1" 404 288 "-" "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)"202.100.0.1 - - [25/Feb/2020:20:51:29 +0800] "GET / HTTP/1.1" 304 - "-" "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)"复制代码透明代理:取决于默认路由和防火墙的重定向策略,适用于局域网主机服务。

描述:

1)Squid为客户端访问互联网提供代理服务;

2)对于局域网设备,要正确设置IP地址和默认网关,不能手动指定代理服务器的地址和端口。

配置Squid以支持透明代理。

Squid服务的默认配置不支持透明代理,因此需要调整相关设置。对于2.6版或更高版本,只有在http_port配置行中添加透明选项,才能支持透明代理。

# vi /etc/squid.confhttp_port 192.168.3.100:3128 transparent // 在其中一个 IP 地址上提供服务# service squid reload // 重启 squid 服务复制代码

设置防火墙的重定向策略。

透明代理中的Squid服务建立在Linux网关主机上。如果防火墙策略配置正确,局域网主机访问互联网的数据包可以交给Squid处理。需要IPTABLES的REDIRECT重定向策略,主要实现本地端口的重定向,被访问网站协议HTTP(80)和HTTPS(443)的出包交给Squid代理服务器(端口3128)。

重定向策略也是一种包控制,用于nat表的路由或输出链及其调用的链,映射的目的端口以to-ports端口号的形式指定。

# iptables -t nat -A PREROUTING -i eth0 -s 192.168.3.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128# iptables -t nat -A PREROUTING -i eth0 -s 192.168.3.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128# service iptables save复制代码

验证透明代理的使用。

验证透明代理的效果。如果有手动指定的代理设置,则应该从客户端中删除它们。如果是在Windows操作系统上,就不要在浏览器的连接设置里勾选使用代理服务器。如果是在Linux操作系统上,需要通过Unset命令清除HTTP_PROXY、HTTPS_PROXY等变量。

# unset HTTP_PROXY HTTPS_PROXY复制代码

然后客户端通过浏览器访问目标网站,观察Squid代理服务器和Web服务器的访问日志,验证透明代理是否发挥作用。

八、ACL访问控制

Squid可以通过访问控制确保其管理的资源不会被非法使用或访问。同时会按照特定时间间隔缓存限制的指定网站,按照源地址、目的地址、URL路径、访问时间等多种条件进行过滤。

Squid访问控制有两种配置选项:一是ACL(Squid访问控制的基础,用来命名一些网络资源或网络对象,用ACL配置项定义要控制的条件);第二:http_access(控制ACL命名的对象的权限,控制允许还是拒绝访问);

定义访问控制列表

ACL配置的每一行都可以定义一个访问控制列表。语法格式为:

1acl 列表名称 列表类型 列表内容 ···复制代码

名称:对象的名称,可以自己指定来标识控制条件;

Type:是网络对象的类型,可以是IP地址、域名、用户名、网络端口号、协议、请求方法、正则表达式等。它必须使用Squid预定义的值,对应于不同类型的控制条件;

列表内容(值):指某类网络对象的值。不同类型的列表内容不同,可以有多个值(用空格隔开,是or);

常见的访问控制列表类型

类型

意义

科学研究委员会

IP地址,可以是单个IP、地址范围或子网地址。

夏令时

目标IP地址可以是单个IP、地址范围或子网地址。

myip

本地网络接口的IP地址

源域

客户所属的域,Squid会根据客户的IP地址进行定向DNS查询。

目标域

服务器所属的域与客户请求的URL相匹配。

时间

表示一个时间段。

港口

指向其他计算机的网络端口

我的港口

指向squid服务器自己的网络端口。

样机

客户端请求使用的协议

方法

HTTP请求方法

代理身份验证

由squid本身验证的用户名。

url_regex

关于URL的正则表达式

定义和使用acl对象时,您应该注意:

1.acl类型的值可以是相同类型的acl对象;

2.不同类型对象的名称不能重复;

3.acl对象的值可以是多个,但是在使用中,当匹配到任意一个值时,整个acl对象都被认为是匹配的;

4.当同类型的review的名字被重用时,Squid会把所有的值组合成这个名字的对象;

5.如果对象的值是文件名,则将文件中包含的内容作为对象的值,文件名需要双引号;

在定义访问控制列表时,需要正确分析用户的访问需求,结合当前网络环境准确定义使用代理服务的控制条件。不同的客户端地址,需要限制的目标网站,具体时间段等。是单独定义的。

# vi /etc/squid.confacl localhost src 192.168.1.0/255.255.255.0 // 源地址 192.168.1.0acl MYLAN src 192.168.1.0/24 192.168.3.0/24 // 客户端网段acl to_localhost dst 127.0.0.0/8 // 目标地址 127.0.0.0/8 网段acl MC20 maxconn 20 // 最大并发连接 20 acl WORKTIME time MTWHF 9:00-18:00 // 时间:周一至周五 9:00-18:00复制代码

除了以上配置的参数外,还可以根据实际需要,根据上表中常用的访问控制列表类型进行配置。

当有很多受限类对象时,可以将它们存储在单独的文件夹中,在acl配置导航的列表中指定相应的文件位置,或者为目标地址创建黑名单文件。

# mkdir /etc/squid# cd /etc/squid# vi heimingdanip.list // 黑名单目标 IP 地址名单# vi mubiaoyuip.list // 域目标 IP 地址名单# vi /etc/squid.confacl HEIMINGDANIP dst "/etc/squid/heimingdanip.list" // 调用指定文件中的列表内容acl MUBIAOYUIP dstdomain “/etc/squid/mubiaoyumingip.list”复制代码设置访问权限

定义ACL对象的目的:为了控制与对象匹配的请求的访问,不是通过ACL选项来实现,而是通过http_access或者icp_access选项来实现。http_access配置行必须放在对应的ACL配置行之后,http_access配置的每一行都确认一个访问控制规则。

Http_access格式:

http_access < allow | deny > [!]ACL对象 1 [!]ACL对象 2 ···复制代码

允许:允许拒绝:拒绝

Acl:指ACL选项定义的网络对象,可以有多个!符号表示非操作,即与ACL对象相反的那些对象。

Http_access规则可以同时包含多个访问控制列表名称,每个列表名称用空分隔。

是与的关系,在施加限制之前,必须满足与访问控制列表对应的所有条件。

当你需要否定条件时,你可以在访问控制列表中加上前缀!符号。

# vi /etc/squid.confhttp_access deny MYLAN MEDIAFILE // 禁止客户端下载 MP3、MP4 等文件http_access deny MYLAN HEIMINGDANIP // 禁止客户端访问黑名单中的 IP 地址http_access deny MYLAN MUBIAOYUIP // 禁止客户端访问黑名单中的 域http_access deny MYLAN MC20 // 客户端的并发连接超过 20 时被中断http_access allow MYLAN WORKTIME // 允许客户端在工作时间内进行上网http_access deny all // 默认禁止所有客户端使用代理复制代码

当Squid处理http_access选项时,它应该将客户机的请求与http_access选项中的ACL对象相匹配。当请求可以匹配每个ACL对象时,将执行允许或拒绝。只要请求与其中一个ACL对象不匹配,http_access就会无效,并且不会执行任何指定的操作。

多个http_access选项,如果一个请求匹配其中一个http_access选项,则执行http_access指定的操作;如果不匹配所有http_access选项,将执行与上一个选项相反的操作。

通常最常用的控制规则放在最前面,以减少Squid的负载。

在访问控制策略上,采用先拒绝后允许或先允许后拒绝的方法,最后一条规则可以设置为默认策略,表示为http_access allow all或http _ access deny all;

在这个Squid环境中,通过以下四个访问控制配置选项对其进行配置。配置完成后,重新启动Squid服务进行验证。

# vi /etc/squidacl sorce src 192.168.3.1 // 定义好内网客户机的地址acl mubiao dst 202.100.0.0/24 // 定好内网要访问的目标地址http_access deny sorce mubiao // 拒绝内网地址放问外网地址(用 http_access 引用列表)http_access allow all // 定义默认规则为允许所有# service squid reload复制代码

验证结果无非是两种情况,一种是正常访问,一种是禁止访问。当客户端的代理访问请求被Squid服务拒绝时,会弹出一个错误页面,具体的错误内容也和你的限制条件有关。

原地址:https://juejin.cn/post/6974225297952473095

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/164441.html

发表回复

登录后才能评论