如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

1、缓存代理概述:

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

2、代理的工作机制:

(1)当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,若缓存中已有需访问页面,则直接将缓存中的页面内容反馈给客户机

(2)若缓存中没有所需页面,则代理服务器向Internet发送访问请求,当获得返回的web页面后,将网页数据保存到缓存中并发送给客户机

3、代理的基本类型:

(1)传统代理:需手动设置代理服务器的地址和端口,多见于Internet环境(2)透明代理:不需要手动指定代理服务器的地址和端口,多见于局域网环境注:代理服务器一定有预备的缓存空间,用于存储服务器反馈的数据

一、Squid代理服务器的安装及运行控制

(1)挂载并解压squid软件包
[root@localhost ~]# mount.cifs //192.168.100.1/zdh /abc
Password for root@//192.168.100.1/zdh:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
squid-3.5.28.tar.gz
[root@localhost abc]# tar zxvf squid-3.5.28.tar.gz -C /opt
(2)到squid文件路径下执行配置文件
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
rh  squid-3.5.28
[root@localhost opt]# cd squid-3.5.28/
[root@localhost squid-3.5.28]# ls
acinclude     configure     doc      lib          README             tools
aclocal.m4    configure.ac  errors   libltdl      RELEASENOTES.html
bootstrap.sh  contrib       helpers  Makefile.am  scripts
cfgaux        CONTRIBUTORS  icons    Makefile.in  SPONSORS
ChangeLog     COPYING       include  po4a.conf    src
compat        CREDITS       INSTALL  QUICKSTART   test-suite
(3)配置文件项
[root@localhost squid-3.5.28]# ./configure >--prefix=/usr/local/squid \     安装目录
> --sysconfdir=/etc \            单独将配置文件修改到其它目录
> --enable-arp-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              使用GUN正则表达式
[root@localhost squid-3.5.28]# systemctl stop firewalld.service 
[root@localhost squid-3.5.28]# setenforce 0
[root@localhost squid-3.5.28]# yum install gcc gcc-c++ make -y               安装编译软件包
[root@localhost squid-3.5.28]#make && make install
(4)创建用户并赋予权限
[root@localhost squid-3.5.28]#ln -s /usr/local/squid/sbin/* /usr/local/sbin/  建立软连接
[root@localhost squid-3.5.28]#useradd -M -s /sbin/nologin squid  创建用户,不创建用户家目录,不使用本地环境登录
[root@localhost squid-3.5.28]#chown -R squid.squid /usr/local/squid/var/  赋予属主属组权限
(5)修改squid的配置文件
[root@localhost squid-3.5.28]#vim /etc/squid.conf
cache_effective_user squid        #添加   指定程序用户
cache_effective_group squid       #添加   指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid  //在此行上面你添加以上两条语句
(6)Squid的运行控制
[root@localhost squid-3.5.28]#squid -k parse   //检查配置文件语法[root@localhost squid-3.5.28]# squid -z   //初始化缓存目录[root@localhost squid-3.5.28]# squid    //启动服务
(7)使用Squid脚本服务
[root@localhost squid-3.5.28]#cd /etc/init.d
[root@localhost 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" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在启动 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;restart)$0 stop &> /dev/nullecho "正在关闭 squid..."$0 start &> /dev/nullecho "正在启动 squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";;
esac[root@localhost init.d]#chmod +x squid  赋予执行权限
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on                            添加开机自启

这样一来我们就可以通过Squid脚本来启动、停止、重载Squid服务器了,在执行时天机相应的start、stop、reload、restart参数。

二、构建代理服务器

接下来我从两个方面来讲解Squid的配置和使用,分别是传统代理,透明代理。

1、传统代理:

准备条件:一台squid服务器:192.168.100.129一台web服务器:192.168.100.130一台windows客户机:192.168.100.133
(1)squid代理服务器的配置

1、修改squid.conf的配置文件

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

2、在防火墙添加允许策略,这里不要关闭防火墙

[root@localhost ~]# iptables -F   清空防火墙列表
[root@localhost ~]# setenforce 0   关闭网络增强性安全功能
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

3、重载squid服务,使配置文件生效

[root@localhost ~]# service squid reload
(2)web服务器的代理配置
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp |grep 80 
tcp6       0      0 :::80                   :::*                    LISTEN      87297/httpd

开启后客户机就可以访问了,但注意,在这里客户机并不是通过代理服务器访问,而是直接访问的web网站,请看!

[root@localhost squid-3.5.28]# cd /etc/httpd/
[root@localhost httpd]# cd logs/
[root@localhost logs]# vim access_log 
192.168.100.133 - - [23/Jul/2018:14:33:45 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.eot? HTTP/1.1" 404 240 "http://192.168.100.130/" "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)"
"access_log" 30L, 9002C

可以看出是客户机直接访问的web服务器,并没有通过代理服务器,下面我们通过代理服务器登录

(3)客户机的代理配置
在IE浏览器中--选择‘工具’--‘intnet选项’--‘intnet选项对话框’--‘连接’--‘局域网(lan)设置’--单击‘局域网设置’按钮--弹出‘局域网设置’对话框

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!
如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

下面我们清空浏览器记录,重新访问几次,在web服务器查看访问日志
如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

2、透明代理

透明代理提供的服务功能和传统代理是一致的,但其透明的实现是依赖于默认路由和防护墙的重定向策略。因此,更适用于局域网主机服务,而不适合为Internet中的客户机提供服务

准备条件:一台squid代理服务器,配置双网卡:内网ens33 192.168.100.1 外网:ens36 12.0.0.1一台web服务器:12.0.0.12一台windows客户机:192.168.100.133

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!
作为别人的网关需要帮别人转发数据包

[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

重启虚拟机后需要重新执行防火墙策略

[root@localhost ~]#iptables -F
[root@localhost ~]#iptables -t nat -F
[root@localhost ~]#setenforce 0
(1)配置squid支持透明代理
[root@localhost ~]# vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent
[root@localhost ~]#service squid reload

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

(2)设置iptables的重定向策略

[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128           (redirect 重定向)
[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128   (443 安全性的超文本传输协议)
[root@localhost ~]#iptables -I INPUT -p tcp --dport 3218 -j ACCEPT最后再次访问12.0.0.12即可发现是通过网关12.0.0.1访问,这里不再展示。

转载于:https://blog.51cto.com/13687553/2149123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法-C++实现

#include <iostream>using namespace std;void show(int M[], int n) {for(int i0; i<n; i)cout<<M[i]<<" ";cout<<endl; }//快速排序 void quick_sort(int M[], int left, int right) {if(left < right){int i,j,x;i left;j right;…

Bootstrap开发框架视频整理

最近到客户处进行实地培训&#xff0c;整理了很多培训的材料&#xff0c;现将它们录制相关主题的视频&#xff0c;作为我的Bootstrap开发框架的知识补充&#xff0c;希望给感兴趣的朋友进行了解。培训内容主要包括基础框架部分、MVC框架部分、Bootstrap框架部分、Bootstrap重要…

安卓随机通话记录_Android 通话记录

查询通话记录private static final String[] CALLLOGS_PROJECTION new String[]{CallLog.Calls._ID,CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DATE,CallLog.Calls.DURATION};/*** * 概述&#xff1a;获取最近10条通话记录 */publ…

【c基础】入门语法

%d:占位符 表示要输出一个整形数。 %f:为float 浮点数 %lf:为double型 双精度浮点数 \n:换行 const:定义一个常量,一旦被初始化就不能修改&#xff0c;只读的变量&#xff08;read-only variable&#xff09;。 整数运算 的结果是整数 如果有小数就抛弃没有考虑四舍五入。 一&a…

vue的移动app项目中,自定义拖拽指令的问题

使用vue的都知道vue有一个自定义指令&#xff0c;我比较喜欢的就是拖拽的自定义指令&#xff0c;感觉挺方便的&#xff01; //组件内的拖拽指令 directives: {//组建内自定义指令drag: {// 指令的定义bind: function(el, value) {let oDiv el; //当前元素let self this; //上…

弹窗php整人_[整人小程序] 超级信息框(无限弹窗++)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼貌似刚才缩进空格被吞了&#xff0c;再发一次Set FSO  createobject("scripting.filesystemobject")Set ws  Createobject("Wscript.shell")Set SA  CreateObject("Shell.Application")If …

day22 Java学习 IO流(序列流)

IO流&#xff08;序列流&#xff09; 序列流&#xff1a; * 可以把多个字节输入流整合成一个&#xff0c;从序列流中读取数据时&#xff0c;将从被整合的第一个流开始读&#xff0c;读完一个之后继续读第二个。 整合方式&#xff1a; * Seq uenceInputStream ( InputStream &am…

网站建设-简单动态网站搭建

通过前面Clouder课程的学习&#xff0c;或许你已经掌握了在云服务器上发布和部署静态网页的方法&#xff0c;那么如何搭建一个可以随时更新内容的动态网站&#xff1f;通过本课程的学习&#xff0c;你将掌握如何在云端搭建全世界使用最多的WordPress网站的方法&#xff0c;并学…

mysql的concat函数_MySQL中concat函数(连接字符串)

MySQL中concat函数使用方法&#xff1a;CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL &#xff0c;则返回值为 NULL。注意&#xff1a;如果所有参数均为非二进制字符串&#xff0c;则结果为非二进制字符串。如果自变量中含有任一二进制字符串&…

利用airTest的图像实别技术测试Web应用

airTest的第三方类库中有图像实别功能&#xff0c;根据官网的介绍&#xff0c;这个功能是能够在Windows上用来定位元素&#xff0c;进行操作的。尝试过以下脚本&#xff0c;发现真的可以。 from selenium.webdriver.chrome.options import Options from selenium import webdri…

MySQL主从复制故障解决

丛库复制停止&#xff0c;进丛库查看&#xff0c;报错1007&#xff0c;数据库已存在&#xff0c;不能创建数据库 mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1007 Last_Error: Error Cant create database test; database exis…

Unraveling the JPEG file

(文章还剩实践部分没写&#xff0c;答辩过后补上...) JPEG文件在当下数字化生活中是无处不在的&#xff0c;但是在熟悉的JPEG面纱背后&#xff0c;隐藏着一些算法&#xff0c;它们去除了人类眼中无法察觉到的细节。这产生了最高的视觉质量与最小的文件大小。让我们来看看这一算…

mysql interval 3 day_Mysql之INTERVAL与DATE_SUB与EXTRACT函数的使用

1. INTERVALINTERVAL代表的是时间间隔MySQL中的时间间隔类型有如下几种:1.1 利用INTERVAL做时间的加减法示例&#xff1a;加法:SQL>SELECT DATE 2018-11-01 INTERVAL 10 11 DAY_HOUR;结果:2018-11-11 11:00:00减法&#xff1a;SQL> select date 2018-11-11 11:00:00 -INT…

(二十四)面向对象

class Car {int num;String name;String color;public static void run() {System.out.println("行驶中");} } //再类中定义的变量&#xff1a;成员变量 //在类中定义的函数&#xff1a;成员函数 class Demo1 {public static void main(String[] args) {//创建一个ca…

mysql 三主_MySQL主主复制3

一、创建并授权用户在每一台(主)服务器上创建一个用户&#xff0c;并为之授权&#xff0c;使它们可以互相访问彼此的数据库在Server-1上&#xff1a;创建一个充许Server-2来访问的用户server2,密码为&#xff1a;server2mysql> GRANT REPLICATION SLAVE ON *.*> TO ‘ser…

0727日志

为什么80%的码农都做不了架构师&#xff1f;>>> c端线上地址 http://x.diandanme.com/fe/?d183#/ 什么时候来需求&#xff0c;我做好准备了吗&#xff1f; eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC94LmRpYW5kYW5tZS5jb21cL2FwaVwvd2VjaGF0XC…

Python基础学习总结__Day3

一、集合 1&#xff0e;特性&#xff1a;无序且天生去重&#xff0c;格式为{} 2&#xff0e;作用&#xff1a; &#xff08;1&#xff09;去重 &#xff08;2&#xff09;关系测试 3&#xff0e;可调用函数&#xff08;常见对列表操作&#xff09; &#xff08;1&#xff09;取…

day8网络编程,面向对象1

一.只是回顾 1.导入模块的顺序,首先从当前目录下找,再从环境变量里面找,使用"sys.path.insert(0,需要导入的环境变量)"加入需要导入文件的环境变量; 2.如果不同项目中有相同的文件,需要导入文件,需要将非当前项目中右键添加的环境变量取消,将当前的环境变量添加上去;…

mysql练手数据_MySQL新手练习

操作插入数据 的语法 :INSERT INTO 表名称 VALUES(值1&#xff0c;值2&#xff0c;......);修改数据 的语法&#xff1a;UPDATE 表名称 SET 字段名1 值1, 字段名2值2,...... 【WHERE 条件】;删除数据 的语法&#xff1a;delete from 表名 【[where 条件】;delete 表1&#xff…

spring security config

spring secuirty 相关的配置解析 permitAll()与web.ignoring() ingore是完全绕过了spring security的所有filter&#xff0c;相当于不走spring securitypermitall没有绕过spring security&#xff0c;其中包含了登录的以及匿名的。转载于:https://www.cnblogs.com/MND1024/p/10…