实验环境:代理服务器squid 192.168.80.181
HTTP服务器 192.168.80.182
Win7客户端 192.168.80.9
代理服务器端配置如下
[root@aa squid-3.5.27]# tar xf squid-3.5.27.tar.gz -C /opt/ #解压squid源码包
[root@aa squid-3.5.27]# yum install perl-devel #安装perl语言编译插件
[root@aa squid-3.5.27]# cd /opt/squid-3.5.27/
[root@aa squid-3.5.27]# ./configure
--prefix=/usr/local/squid
--sysconfdir=/etc
--enable-arp-acl //支持acl
--enable-linux-netfilter //支持透明代理
--enable-linux-tproxy //重定向
--enable-async-io=100
--enable-err-language="Simplify_Chinese"
--enable-underscore --enable-poll
--enable-gnuregex
[root@aa squid-3.5.27]# make && make install //配置、编译、安装
[root@aa squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin //
[root@aa squid-3.5.27]# useradd -M -s /sbin/nologin squid
[root@aa squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/
[root@aa squid-3.5.27]# vi /etc/squid.conf
http_port 3128 //59行,在下面新增
visible_hostname 192.168.80.181
cache_mem 64 MB
cache_swap_low 80
cache_swap_high 97
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 //68行,去掉注释配置硬盘缓存,打开#.缓存目录100M,其中一级目录16个,二级256个
cache_effective_user squid
cache_effective_group squid //制定squid用户的执行主和组
[root@aa squid-3.5.27]# squid -k parse //检查配置文件
[root@aa squid-3.5.27]# squid –k rec //重新加载配置文件
[root@aa squid-3.5.27]# squid -zX //初始化缓存目录
[root@aa squid-3.5.27]# vi /etc/init.d/squid //制作管理脚本
#!/bin/bash
#chkconfig: 35 90 25
#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"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac
[root@aa squid-3.5.27]# chmod +x /etc/init.d/squid //赋予启动脚本执行权限
[root@aa squid-3.5.27]# chkconfig --add squid //将squid添加到管理脚本
[root@aa squid-3.5.27]# chkconfig squid on //设置开机自启动
[root@aa squid-3.5.27]# service firewalld stop
[root@aa squid-3.5.27]# setenforce 0
[root@aa squid-3.5.27]# service squid start
[root@aa squid-3.5.27]# netstat -anpt | grep 3128
此时已经可以通过代理服务器访问www服务器了
下面是http服务器的配置
[root@ab ~]# yum install -y httpd //安装httpd服务器
[root@ab ~]# service httpd start //启动
下面客户端直接访问测试
没有指定代理服务器,访问正常
下面客户端指定代理服务器
设置完毕,去http服务器上监控访问日志
[root@ab ~]# tail -f /etc/httpd/logs/access_log
下面再去访问182
访问依旧成功,查看日志发现,实际的访问者为181代理服务器。
缓存服务器内容已经缓存了
-------------------限制下载文件的大小------------
在http服务器上配置
[root@ab ~]# cd /var/www/html/
[root@ab html]# dd if=/dev/zero of=test1.tgz bs=1M count=11
[root@ab html]# dd if=/dev/zero of=test2.tgz bs=1M count=2 //复制出两个tgz文件用于下载测试。
[root@aa squid-3.5.27]# vi /etc/squid.conf
reply_body_max_size 10 MB //限制文件超过10M的不能下载
[root@aa squid-3.5.27]# service squid restart
客户端测试下载情况
当访问下载test2.tgz时可以成功下载
当访问test1.tgz时,由于大小为11M,则不能下载
--------------下面可以配置linux使用代理服务器上网-----------------
[root@ac ~]# export HTTP_PROXY=:3128 //指定http代理服务器
[root@ac ~]# export HTTPS_PROXY=:3128 //指定https代理
[root@ac ~]# export FTP_PROXY=:3128 //指定ftp代理服务器
[root@ac ~]# export NO_PROXY=192.168.1.,192.168.2. //指定访问1 2 段的不转发
以上的可以写入/etc/profile开机启动文件中
[root@ac ~]# yum install -y wget //安装wget下载
实验没有成功
-------------下面配置透明代理------------------
代理服务器做为内网的网关设备,两块网卡,一块连接内网,另一块连接外网,测试客户端主机要指网关。
首先理清实验拓扑:通过181的网关代理,使80.9的win7能够上互联网
Win7:ip地址为192.168.80.9,网关地址为192.168.80.181
代理squid:内网网卡地址为192.168.80.181,使用桥接模式连外网
下面进行实验准备,打开代理服务器的桥接模式,两块网卡地址都已经获得了
181为内网,123.197为外网口地址
Ping百度是通的,说明可以上网
将win7之前的指定代理服务器去掉,此时是上不了网的
指定他的网关为192.168.80.181
下面去配置squid透明代理
[root@aa ~]# vi /etc/squid.conf
http_port 192.168.80.181:3128 transparent //将改行修改如此,指定内网卡监听端口
[root@aa ~]# service squid restart
[root@aa ~]# yum install -y iptables-services
[root@aa ~]# systemctl start iptables
[root@aa ~]# iptables –F //清空防火墙nat表内容
[root@aa ~]# iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -s 192.168.80.0/24 -j REDIRECT --to-ports 3128 //对nat表的PREROUTING链做操作,指定内网卡ens33接收到的来自192.168.80.0/24网段的80端口的tcp请求全部转发给3128端口处理
[root@aa ~]# service iptables save //保存防火墙配置
Win7客户端访问百度成功
-------------------下面可以配置acl访问控制---------
[root@aa ~]# vi /etc/squid.conf
Acl和防火墙一样是从上向下依次匹配,匹配及停止,并执行匹配的动作。
#acl localnet src 192.168.0.0/16 //注释本行默认配置
http_access allow all //在本行上面新增ACL语句,如果在该行下面插入,则访问的已经被全部允许了
1.禁止某IP地址主机上网
acl nolink src 192.168.90.9
http_access deny nolink
2.禁止某网段在某时间段上网
acl nolink src 192.168.1.0/24
acl nowang time MTWHF 9:00-11:30
http_access deny nolink nowang
3.禁止所有人访问某网站(精确匹配)
acl nourl dstdomain -i www..com
http_access deny nourl
4.禁止所有人访问某些网站(含有关键字的都会过虑)
acl nourl url_regex -i taobao.com
http_access deny nourl
5.禁止下载某类型的文件
acl nof urlpath_regex -i \.avi$ \.mkv$
http_access deny nof
6.禁止访问某类型的网站
acl nop url_regex -i ^emule:// ^thunder
http_access deny nop
修改squid配置文件测试
[root@aa ~]# vi /etc/squid.conf
#acl localnet src 192.168.0.0/16 //注释本行默认配置
[root@aa ~]# service squid restart
再次访问,访问被拒绝
---------------配置sarg日志---------------
注意:需要在代理服务器上安装WWW服务器
[root@aa ~]# yum install -y httpd
[root@aa sarg-2.3.11]# tar xf sarg-2.3.11.tar.gz -C /opt/
[root@aa sarg-2.3.11]# cd /opt/sarg-2.3.11/
[root@aa sarg-2.3.11]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
[root@aa sarg-2.3.11]# make && make install
[root@aa sarg-2.3.11]# vi /etc/sarg/sarg.conf
7 access_log /usr/local/squid/var/logs/access.log //squid的访问日志位置
25 title "Squid User Access Reports" //网页标题
120 output_dir /var/www/html/squid-reports //分析报告的存放位置
178 user_ip no //不使用IP代替用户ID
184 topuser_sort_field BYTES reverse //升序排列
190 user_sort_field BYTES reverse
206 exclude_hosts /usr/local/sarg/noreport //设置不生成报告的主机
257 overwrite_report no
289 mail_utility mailx //指定发邮件命令
434 charset UTF-8
518 weekdays 0-6 //指定top排序星期周期
523 hours 7-12,14,16,18-20 //指定top排序时间周期
633 www_document_root /var/www/html //网页根目录
[root@aa sarg-2.3.11]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@aa sarg-2.3.11]# sarg //启动
SARG: Records in file: 102, reading: 100.00%
SARG: Successful report generated on /var/www/html/squid-reports/2018Mar21-2018Mar22
/squid-reports/ //访问日志页
----------------配置squid反向代理-------------
Squid服务器:内网卡192.168.80.181 外网卡192.168.80.90.181
两台web服务器:192.168.80.182 192.168.80.183
Win7客户端:192.168.90.9 gw192.168.90.181
[root@aa network-scripts]# vi /etc/squid.conf
http_port 192.168.90.181:80 vhost vport
cache_peer 192.168.80.182 parent 80 0 no-query round-robin originserver name=s1
cache_peer 192.168.80.183 parent 80 0 no-query round-robin originserver name=s2
cache_peer_domain s1 www.test.com
cache_peer_domain s2
[root@aa network-scripts]# service squid restart
下面去客户端测试
修改hosts文件
192.168.90.181
192.168.90.181 www.abc.com
访问成功
如果报错访问被拒绝deny改为allow