squid传统代理和透明代理实验
安装代理服务器
安装并编译
yum -y install gcc gcc-c++
tar zxvf squid-3.4.6.tar.gz -C /opt/
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
权限配置
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_port 3128 搜索到这一行
cache_effective_user squid 添加
cache_effective_group squid 添加
检查语法
squid -k parse
初始化缓存目录
squid -z
启动服务
squid
编写脚本启动文件
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 -ntap | grep suqid &> /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 -ntap | 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
service squid stop
service squid start
chkconfig --level 35 squid on
传统代理服务器
修改配置文件
vim /etc/squid.conf
修改如下
http_access deny all
http_access allow all
http_prot 3128
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
关闭服务
iptables -F
iptables -t nat -F
setenforce 0
添加防火墙规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
启动
service squid reload
netstat -ntap | grep 3128
接下来,我们打开一台新的机器,web2
yum -y install httpd
systemctl start httpd
最后验证
打开一台W10机器,设置搜索代理,在手动设置代理中,开启【使用代理服务器】,地址就是第一台机器的地址,我这边是192.168.209.131 端口:3128
接下来,我们打开网页,访问192.168.209.132(这个是刚刚打开的新机器web2的地址)
透明代理
添加网卡
cd /etc/sysconfig/network-scripts
cp -p ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
ens33改为ens36
IPADDR=192.168.10.1
NETMASK=255.255.255.0
service network restart
ifconfig
添加转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
修改配置文件
vim /etc/squid.conf
修改如下:
http_port 192.168.10.1:3128 transparent
squid -k parse
添加防火墙规则,并重启服务
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
service squid stop
service squid start
ACL访问控制
接下来,我们回到传统模式下
进行一个简单的ACL控制
vim /etc/squid.conf
acl aaa src 192.168.209.250/32 ///这个IP是win机的IP地址,我这边用于测试,禁止这个IP访问///
http_access deny aaa
重启
service squid restart
squid日志分析
环境安装
yum install -y gd gd-devel pcre pcre-devel
mkdir /usr/local/sarg
tar zxvf sarg-2.3.7.tar.gz -C /opt/
cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install
修改配置文件
cd /etc/sarg
修改如下
vim sarg.conf
修改如下
7 access_log /usr/local/squid/var/logs/access.log //指定访问日志文件
25 title "Squid User Access Reports" //网页标题
120 output_dir /var/www/html/squid-reports //报告输出目录
178 user_ip no // 使用用户名显示
184 topuser_sort_field BYTES reverse // TOP排序中连接次数,访问字节,降序佩列,升序是 normal
190 #user_sort_field BYTES reverse //用户访问记录,连接此时,访问字节按降序排序
206 exclude_hosts /usr/local/sarg/noreport // 不计入排序的站点列表文件
257 overwrite_report no //同名日志是否覆盖
289 mail_utility mailq.pstfix //发送邮件报告命令
434 charset UTF-8 //使用字符集
518 weekdays 0-6 //top 配合的星期周期
525 hours 0-23 //top排行的时间周期
633 www_document_root /var/www/html //网页根目录
添加不计入站点的文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport
创建软连接
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
安装httpd
yum install httpd -y
systemctl start httpd
systemctl stop firewalld
setenforce 0
启动sarg
sarg
打开网页,访问192.168.209.131/squid-reports
周期性执行每天生成报告
sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
接下来,我们再开启一台机器,做web2
开启后
yum -y install httpd
关闭服务
setenforce 0
iptables -F
分别在两台web机器编写一个网页测试
echo "this is web1" > /var/www/html/index.html
echo "this is web2" > /var/www/html/index.html
回到squid机器
编辑配置文件
vim /etc/squid.conf
把3128接口的命令注释掉,添加如下
http_port 192.168.209.131:80 accel vhost vport
cache_peer 192.168.209.132 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.209.133 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com
接下来,关键一步,要关闭squid上的httpd服务,否则会发生端口冲突
systemctl stop httpd
然后重启squid服务
service squid restart
接下来,我们到win机器上,这边我们就不添加dns解析了
我们带来C盘,找到system32,打开drivers里面的etc,找到hosts文件
首先,右键——打开方式——文本文档
在末尾添加:192.168.209.131 www.yun.com ;保存退出
然后,右键属性——安全栏中——Users…——编辑——勾选完全控制——确定
并且我们找到代理中,将之前的3128端口改成80端口,保存退出
打开网页,访问www.yun.com,进行刷新访问,轮询访问web1,web2