构建squid代理服务器
基本概念
本文使用squid代理服务
软件介绍:百度百科
作为应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能;
工作机制:缓存网页对象,减少重复请求(HTTP代理的缓存加速对象主要为文字、图像等静态Web元素);
代理类型:
- 传统代理:适用于Internet,需明确指定服务端;
 - 透明代理:适用于共享上网网关,不需指定服务端;
 
使用代理的优点:
- 提高Web访问速度;
 - 隐藏客户机的真实IP地址;
 
其他可以实现数据缓存的软件:
本文不过多介绍
编译安装Squid软件&&基本使用
软件软件下载地址:http://www.squid-cache.org/
1.编译安装软件
tar zxvf squid-3.4..tar.gz -C /usr/src/ //解包
cd /usr/src/squid-3.4./
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-arp-acl --enable-linux-netfiulter --enable-linux-tproxy --enable-async-io= --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gunregex //配置,更多配置可以参考"./configure --help"
make && make install //编译并安装 ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #优化执行路径
useradd -M -s /sbin/nologin squid #创建程序用户
chown -R squid:squid /usr/local/squid/var/ #更改指定目录额属主和属组
chmod -R 757 /usr/local/squid/var/ #修改指定目录的权限,以便写入日志
配置项说明:
--prefix=/usr/local/squid //安装目录;
--sysconfdir=/etc/ //单独将配置文件修改到其他目录下;
--enable-arp-acl //可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗;
--enable-linux-netfiulter //使用内核过滤;
--enable-linux-tproxy //支持透明模式;
--enable-async-io= //异步I/O,提升存储性能,相当于--enable-pthreads --enable-storeis=ufs,aufs --with-pthreads --with-aufs-thread=值;
--enable-err-language="Simplify_Chinese" //错误信息的显示语言;
--enable-underscore //允许URL中有下划线;
--enable-poll //使用Poll()模式,提升性能;
--enable-gunregex //使用GNU正则表达式;
配置项说明
配置文件内容:
位置::/etc/squid.conf(更详细的配置项请参考/etc/squid.conf.documented文件)
#
# Recommended minimum configuration:
# # Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/ # RFC1918 possible internal network
acl localnet src 172.16.0.0/ # RFC1918 possible internal network
acl localnet src 192.168.0.0/ # RFC1918 possible internal network
acl localnet src fc00::/ # RFC local private network range
acl localnet src fe80::/ # RFC link-local (directly plugged) machines acl SSL_ports port
acl Safe_ports port # http
acl Safe_ports port # ftp
acl Safe_ports port # https
acl Safe_ports port # gopher
acl Safe_ports port # wais
acl Safe_ports port - # unregistered ports
acl Safe_ports port # http-mgmt
acl Safe_ports port # gss-http
acl Safe_ports port # filemaker
acl Safe_ports port # multiling http
acl CONNECT method CONNECT #
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager # We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost #
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
# # Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost # And finally deny all other access to this proxy
http_access deny all # Squid normally listens to port
http_port //用来指定代理服务监听的地址和端口(默认端口为3128) # Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /usr/local/squid/var/cache/squid # Leave coredumps in the first cache dir
coredump_dir /usr/local/squid/var/cache/squid #
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: %
refresh_pattern ^gopher: %
refresh_pattern -i (/cgi-bin/|\?) %
refresh_pattern . %
squid.conf文件
Squid运行控制:
squid -k parse //检查配置文件语法是否正确
squid //开启服务
squid -k kill //停止服务
squid -z //初始化缓存目录(清理缓存目录**服务停止的情况下)
更多的使用方法请参考:http://linux.51yip.com/search/squid
创建Squid服务脚本:
github address:https://github.com/spdir/ShellScripts/blob/master/squid.sh
#!/bin/bash
# chkconfig: #可以使用-,-的意思是所有运行级别
# 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" #程序运行才会有pid文件,反之则无
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid" case "$1" in
start)
netstat -anpt | grep squid $> /dev/null
if [ $? -eq ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill $> /dev/null #调用squid命令停止服务
rm -rf $PID $> /dev/null #删除pid文件
;;
status)
[ -f $PID ] &> /dev/null #检测pid文件是否存在
if [ $? -eq ] #假如文件存在则0等于0,执行netstat命令展示端口
then
netstat -aupt | grep squid
else
echo "Squid is not running"
fi
;;
restart)
$ stop $> /dev/null #注意:$ stop的意思是调用之前定义的stop
echo "正在关闭Squid..."
$ start $> /dev/null
echo "正在启动Squid..."
;;
reload)
$CMD -k reconfigure #重新加载,但不中断服务,配置更改后,建议用这种方式加载
;;
check)
$CMD -k parse #检查配置文件语法是否错误
;;
*)
echo "用法:$0 {start | stop | restart | reload | check | status}" # $0代表脚本名字/etc/squid.conf的用法
;;
esac
squid
将这个文件放到/etc/init.d/目录下并命名为squid
chmod +x /etc/init.d/squid //赋予执行权限
chkconfig --add squid //添加到系统服务
chkconfig squid on
这样我们就可以通过squid脚本来启动、停止、重启、重载Squid服务了。
构建传统代理服务

案例环境说明:
- 主机B提供Web代理服务
 - 主机C通过代理访问主机A的网站
 
Squid服务器配置:
vim /etc/squid.conf     //修改配置文件   
    省略......
    http_access allow all        //放在http_access deny all 之前
    http_port
    reply_body_max_size  MB    //允许下载的最大文件大小(10MB)[可选]
    省略......
在防火墙中添加允许策略:(在实验环境中可以选择直接关闭防火墙)
iptables -I INPUT -p tcp --dport -j ACCEPT
service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
重载Squid服务
service squid reload
客户机的代理配置
windows客户端:

linux客户端:
vim /etc/profile
http_proxy=http://192.168.10.1:3128 # 分别指定http、https、ftp协议使用的代理服务器地址
https_proxy=http://192.168.10.1:3128
ftp_proxy=http://192.168.10.1:3128
no_proxy=192.168.. # 访问局域网地址(192.168.20.0/24网段)时不使用代理,可以用逗号分隔多个地址
export http_proxy https_proxy ftp_proxy no_proxy
porfile文件添加内容
source /etc/profile //立即生效
代理服务的验证方式:
在客户机192.168.10.254中通过浏览器访问目标网站 http://192.168.10.10/ 然后观察Squid代理服务器、Web服务器的访问日志,以验证代理服务是否发挥作用。
构建透明代理

案例环境说明:
- Linux网关提供透明代理服务
 - 局域网通过代理访问Internet中的网站
 
配置Squid支持透明代理:
vim /etc/squid.conf //修改squid配置文件
省略......
http_port 192.168.10.1: tranparent //只在其中一个IP地址上提供服务
省略......
设置iptables的重定向策略
REDIRETC也是一种数据包控制类型,只能在nat表的PREROUTIN或OUTPUT链以及被调用的链中使用,通过"--to-prots 端口号"的形式来指定映射的目标端口。
iptables -t nat -I PREROUTING - eth1 -s 192.168.10.0/ -p tcp --dport -j REDIRECT --to-prots //http
iptables -t nat -I PREROUTING - eth1 -s 192.168.10.0/ -p tcp --dport -j REDIRECT --to-prots //https
service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
3.验证透明代理的使用
为了验证透明代理的效果,如果手动指定的代理服务器设置应在客户机中将其去除。
linux客户机中的取出方式通过Unset命令清除http_proxy,https_proxy
unset http_proxy https_proxy
验证方式:(和传统的方式相同)
在客户机192.168.10.254中通过浏览器访问目标网站 http://192.168.10.10/ 然后观察Squid代理服务器、Web服务器的访问日志,以验证代理服务是否发挥作用。
未完待续......
构建squid代理服务器的更多相关文章
- CentOS 7 Squid代理服务器正向代理-透明代理
		
Squid是Linux系统中最常用的一款开源代理服务软件,主要提供缓存加速和应用层过滤控制的功能,可以很好的实现HTTP.FTP.DNS查询以及SSL等应用的缓存代理 透明代理:提供与传统代理相同的功 ...
 - CentOS 7 Squid代理服务器正向代理-传统代理
		
Squid是Linux系统中最常用的一款开源代理服务软件,主要提供缓存加速和应用层过滤控制的功能,可以很好的实现HTTP.FTP.DNS查询以及SSL等应用的缓存代理 传统代理:普通的代理服务,多见于 ...
 - Squid代理服务器(二)——配置Squid服务器
		
一.传统代理 (一)需求分析 局域网内,客户机访问自家的Web服务器,通过Squid代理服务器访问Web服务器,再由Squid反馈给客户机;在Squid主机上,构建Squid为客户机访问网站提供代理服 ...
 - squid 代理服务器应用
		
squid 代理服务器应用 1.Squid 代理服务器 : Squid 主要提供缓存加速.应用层过滤控制的功能. 代理的工作机制: 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址. 将获得 ...
 - Squid代理服务器应用
		
Squid代理服务器应用 目录 Squid代理服务器应用 一.Squid的脚本概念 1. Squid的作用 2. Web代理的工作机制 3. 代理服务器的概念 4. 代理服务器的作用 5. 代理的基本 ...
 - CentOS安装squid代理服务器
		
Squid是一个Linux系统下优秀的代理服务器软件.Squid可以配置普通上网代理(正向代理).反向代理.透明代理.系统是CentOS6.2.Squid主机IP为192.168.1.100. 安装s ...
 - 【转载】CentOS 6.4下Squid代理服务器的安装与配置
		
一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用 ...
 - CentOS 6.4下Squid代理服务器的安装与配置
		
一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用 ...
 - Squid代理服务器的安装与配置
		
一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用 ...
 
随机推荐
- TCP/IP协议---ICMP协议及ping、traceroute
			
ICMP Internet控制报文协议通常被认为是IP层的组成部分,一般被IP层或更高层(TCP.UDP)使用.ICMP报文是在IP数据报内部被传输的.如图: ICMP报文的格式如下: 报文的前4个字 ...
 - Linux集锦
			
一:Linux文件系统 Linux系统有一个重要概念:一切都都式文件. Linux支持五种文件类型: Linux的目录结构如下: 常见目录说明: /bin: 存放二进制可执行文件(ls,cat,mkd ...
 - pycharm shortcut
			
Alt+F12 is a shortcut to open/hide Terminal panel
 - python3 编程使用技巧
			
from random import randint data = {"Student{}".format(i):randint(60,100) for i in range(1, ...
 - Luogu  P3388 【模板】割点(割顶)
			
一道求割点的板子题.还是采用经典的Tarjan算法. 首先大致和Tarjan求强连通分量相似,都是用\(dfn_x\)表示访问到\(x\)的时间(时间戳),\(low_x\)表示通过\(x\)回边能走 ...
 - 基于uFUN开发板的心率计(一)DMA方式获取传感器数据
			
前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...
 - R绘图 第十一篇:统计转换、位置调整、标度和向导(ggplot2)
			
统计转换和位置调整是ggplot2包中的重要概念,统计转换通常使用stat参数来引用,位置调整通常使用position参数来引用. bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个 ...
 - keycloak 调研资料
			
1.https://www.keycloak.org/docs/latest/server_development/index.html 下载keycloak 2.https://gitee.com/ ...
 - 个人java框架 技术分析
			
1.框架选型 spring-boot https://github.com/JeffLi1993/springboot-learning-example https://mp.weixin.qq.co ...
 - FormData
			
1. 概述FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 2. 构造函数创建一个formData对象 ...