CentOS上构建squid传统代理,透明代理(squid3.4.6)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS上构建squid传统代理,透明代理(squid3.4.6)相关的知识,希望对你有一定的参考价值。
1.1 squid服务基础
1.1.1 缓存代理概述
1、代理的工作机制
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图所示。
2、代理的基本类型
根据实现的方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。
- 传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。
- 透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理,服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。
在实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无需进行额外的设置就可以享受更好的上网速度。
1.1.2 手工编译安装squid
1、解压squid软件包
tar zxvf squid-3.4.6.tar.gz -C /opt/
2、转到解压后的目录下配置并安装
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
make && make install
3、创建软连接,创建管理用户,修改配置文件,
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ //创建软连接
useradd -M -s /sbin/nologin squid //创建管理用户
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
4、初始化缓存目录
squid -z //初始化缓存目录
5、编辑启动脚本
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 //给脚本加权限
chkconfig --add squid //添加为系统服务
chkconfig --level 35 squid on //开机自启动
6、开启服务
service squid start
1.2 构建代理服务器
1.2.1 传统代理
实验环境
1、web服务器上安装httpd服务并开启,关闭防火墙
yum install -y httpd
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
2、squid服务器上修改配置文件
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
http_port 3128
cache_mem 64 MB //指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB //允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
3、设置防火墙策略
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
4、重启squid服务
service squid restart
5、客户端访问测试
客户端先不设置代理直接访问web服务器,查看web服务器的日志文件可知,是客户端的IP地址进行访问的
web服务器日志存放位置
cd /etc/httpd/logs //日志存放位置
vim access_log
客户端设置代理
浏览器中Internet选项---》连接----》局域网设置----ip:squid服务器地址 端口:3128
再进行访问之后查看web服务器日志文件可知是由代理服务器访问的web服务器
1.2.2 透明代理
实验环境
1、squid服务器配置双网卡
2、开启路由转发,清空防火墙规则,关闭安全功能
echo "1" > /proc/sys/net/ipv4/ip_forward //开启路由转发
iptables -F
iptables -t nat -F
setenforce 0
3、配置squid支持透明代理,在http_port配置行加上一个transparent(透明)选项
vim /etc/squid.conf
......
http_port 192.168.100.1:3128 transparent //只在其中一个IP地址上提供服务
4、重启squid服务
service squid restart
5、设置iptables的重定向策略
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT //若做了传统代理刷完这句话,则不用再刷,若直接做的透明代理,则要刷这句话
6、客户端验证
浏览器取消之前设置的Internet选项,清理缓存,访问web服务器
查看web服务器日志,可看到是由代理服务器的外网口网关IP进行的访问
以上是关于CentOS上构建squid传统代理,透明代理(squid3.4.6)的主要内容,如果未能解决你的问题,请参考以下文章