本文共 4924 字,大约阅读时间需要 16 分钟。
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器。 并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。
传统代理:即为普通的代理服务,一般以提供HTTP、ftp代理为主,需要客户端在浏览器中指定代理服务器地址和端口(默认为3128)。
- 透明代理:客户不需要指定代理服务器的地址和端口,而是通过网关,由防火墙的重定向策略将用户的请求交给代理服务器处理;域名解析有客户机完成
安装及运行控制
编译安装时目录设置为/usr/local/squid
# tar zxvf squid-3.5.28.tar.gz -C /opt/# yum install gcc gcc-c++ cmake -y# cd /opt/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正则表达式# 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/
Squid配置文件
# vim /etc/squid.conf (添加下面3行) cache_effective_user squid #添加 指定程序用户 cache_effective_group squid #添加 指定账号基本组 coredump_dir /usr/local/squid/var/cache/squid
# squid -k parse //检查配置文件语法# squid -z //第一次启动 先初始化缓存目录# squid //启动服务# netstat -anpt | grep "squid"
为了更方便控制服务的 启动、停止、重载
# cd /etc/init.d/# vim squid (创建一个服务脚本)#!/bin/bash#chkconfig: 2345 90 25PID="/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
主机 | IP | 主要软件服务 |
---|---|---|
Squid代理服务器 | 192.168.100.20 | squid |
Web服务器 | 192.168.100.30 | httpd |
windows7 | 192.168.100.50 | IE浏览器 |
如图:
安装httpd服务并且开启
# systemctl stop firewalld.service# setenforce 0# yum install -y httpd# systemctl start httpd
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为单位,超过大小限制的文件将不被缓存,而是直接转发给用户 # service squid restart
添加防火墙策略
# iptables -F# setenforce 0# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
可以看到是192.168.100.50(客户机)请求访问192.168.100.30(web测试页面)
# tail /usr/local/squid/var/logs/access.log
验证传统代理配置成功
# tail /var/log/httpd/access_log
主机 | IP | 主要软件服务 |
---|---|---|
Squid代理服务器 | ens33:192.168.100.1 / ens36:12.0.0.1 | squid |
Web服务器 | 12.0.0.12 | httpd |
windows7 | 192.168.100.50 | IE浏览器 |
在http_port配置后面加上 transparent(透明)的选项
# vim /etc/squid.confhttp_port 192.168.100.1:3128 transparent# service squid restart# echo "1" > /proc/sys/net/ipv4/ip_forward
设置iptables的重定向策略
# iptables -F# iptables -t nat -F# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
可以看到是192.168.100.50(客户机)请求访问12.0.0.12(web测试页面)
# tail /usr/local/squid/var/logs/access.log
可以看出代理配置成功
# tail /var/log/httpd/access_log
若想要在Linxu客户机命令行界面使用代理服务器,必须通过环境变量来指定代理服务器的地址、端口等信息。
在Linux系统中设置代理
# vim /etc/profile (在末尾添加) HTTP_PROXY=http://192.168.100.20:3128 HTTPS_PROXY=http://192.168.100.20:3128 FTP_PROXY=http://192.168.100.20:3128 NO_PROXY=192.168.10.,192.168.20. export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY# source /etc/profile
转载于:https://blog.51cto.com/13630803/2147433