一、Squid基本概念
Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 ,可以很好地实现 HTTP 和 FTP,以及 DNS 查询、SSL 等应 用的缓存代理,功能十分强大。
代理的基本类型
1、传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ 聊天工具、下载 软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于 网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器。
2、透明代里:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务 器的地址和端口,而是通过默认路由、防火墙策略将 Web 访问重定向,实际仍然交给 代理服务器来处理。重定向的过程对客户机是“透明”的,用户甚至并不知道自己在使用 代理服务,所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请 求将优先发给 DNS 服务器。
二、Squid代理服务器的安装
-------------------安装squid服务----------------------------
1、tar zxvf squid-3.5.28.tar.gz -C /opt/
2、cd /opt/squid-3.5.28
3、./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \ #linux 内核通过 netfilter 模块实现网络访问控制功能
--enable-linux-tproxy \ #实现透明代理功能
--enable-async-io=100 \ #异步传输输入输出数量
--enable-err-language="Simplify_Chinese" \ #用中文报错
--enable-underscore \ #允许下划线
--enable-poll \ #协调读写设备个数或读写设备顺序的函数
--enable-gnuregex #c/c++常用的正则表达式
4、make && make install #编译安装
5、ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #因为squid是条命令,设置个软链接,可以使管理员也可以使用此命令
6、useradd -M -s /sbin/nologin squid #因为每个程序都需要一个管理目录,这里设置一个不可登陆的squid目录
7、chown -R squid.squid /usr/local/squid/var/ #此目录用于存放缓存文件
8、vim /etc/squid.conf
------56行插入-----
http_access allow all #放在http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128 #用来指定代理服务监听的地址和端口(默认的端口号为3128)
-----61行--插入------
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #指定缓存文件目录
9、squid -k parse //检查配置文件语法
10、squid -z //初始化缓存目录
11、squid //启动服务
12、netstat -anpt | grep "squid" #查看端口号,看服务是否看起
13、vim /etc/init.d/squid #设置可以使用systemctl管理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
14、chmod +x /etc/init.d/squid #设置权限
15、chkconfig --add squid
16、chkconfig --level 35 squid on
三、传统代理服务器
---------------------------传统代理服务器-----------------------------
1、环境准备工作:
squid服务器 192.168.150.100 安装squid nat模式
web服务器 192.168.150.101 开启http nat模式
client客户端 win10 192.168.150.150 nat模式
2、vim /etc/squid.conf
-------------------------
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_leffective_group squid
cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
------------------------
3、systemctl restart squid
4、iptables -F
5、setenforce 0
6、iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
7、在Windows系统中开启浏览器
Internet选项---》连接----》局域网设置----ip:squid服务器地址 端口:3128
地址栏输入web服务器地址
查看web服务器访问日志access.log 是代理服务器地址访问
四、透明代理
- 透明代理提供的服务功能与传统代理是一致的,但是其“透明”的实现依赖于默认路由和 防火墙的重定向策略,因此更适用于为局域网主机服务,而不适合为 Internet 中的客户机提 供服务
- 在 Linux 网关上,构建 Squid 为客户机访问 Internet 提供代理服务。
在所有的局域网客户机上,只需正确设置 IP 地址、默认网关和 DNS,不需要手动指定 代理服务器的地址、端口等信息。
-------------------透明代理-----------------------------
1、环境准备工作:
squid服务器 ens33:192.168.150.100(nat) ens38:192.168.10.10(仅主机) squid安装包
web服务器 192.168.150.101 开启http nat模式
client win10 192.168.10.11 仅主机模式
2、配置双网卡内网
ens33 192.168.150.100
外网ens36 192.168.10.10
3、vim /etc/squid.conf
http_port 192.168.10.10:3128 transparent
4、systemctl restart squid
5、vim /etc/sysctl.conf
net.ipv4.ip_forward=1
--------
sysctl -p
6、iptables -F
7、iptables -t nat -F
8、vim /etc/sysctl.conf
net.ipv4.ip_forward=1
9、---------------------------将来源为192.168.10.0网段:80、443端口的流量重定向到3128端口
iptables -t nat -I PREROUTING -i ens38 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens38 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
------------若进行重启,需要重新配置以下规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
----------------web服务器------------
10、route add -net 12.0.0.0/24 gw 192.168.10.10
11、windos验证 看日志验证
五、acl代理
----------------------ACL访问控制----------------------------------------
环境准备工作:
squid服务器 192.168.150.100 squid nat模式
web服务器 192.168.150.101 httpd nat模式
web服务器 192.168.150.102 httpd nat模式
windos 192.168.150.200 nat模式
vim /etc/squid.conf
----------------------------------
acl localhost src 192.168.175.136/32
acl MYLAN src 192.168.175.0/24
acl destionhost dst 192.168.175.130/32
acl MC20 maxconn 20
acl BURL url_regex -i ^rtsp:// ^emule://
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$
acl work time MTWHFAC 08:30-17:30
mkdir /etc/squid #启用对象列表管理
vim dest.list
192.168.175.150
192.168.175.140
192.168.175.130 #目标web
vim /etc/squid.conf
acl destionhost dst "/etc/squid/dest.list"
http_access deny destionhost #拒绝列表(注意置顶)
systemctl restart squid
六、Squid 日志分析
------------------------squid日志分析---------------------------
1、yum install -y gd gd-devel pcre-devel #图像处理
2、mkdir /usr/local/sarg
3、tar zxvf sarg-2.3.7.tar.gz
4、cd /opt/sarg-2.3.7
5、./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \
--enable-extraprotection #额外安全防护
6、make && make install
7、cd /etc/sarg/
8、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/sarg //报告输出目录
178/ user_ip no //使用用户名显示
206/ exclude_hosts /usr/local/sarg/noreport //不计入排序的站点列表文件
184/ topuser_sort_field connect reverse //top排序中有连接次数、访问字节、降序排列 升序是normal
190/ user_sort_field connect reverse
//用户访问记录 连接次数、访问字节按降序排序
257/ overwrite_report no //同名日志是否覆盖
289/ mail_utility mailq.postfix //发送邮件报告命令
434/ charset UTF-8 //使用字符集
518/ weekdays 0-6 //top排行的星期周期
525/ hours 0-23 //top排行的时间周期
633/ www_document_root /var/www/html //网页根目录
#添加不计入站点文件,添加的域名将不被显示在排序中
9、touch /usr/local/sarg/noreport
10、ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
11、[root@localhost sarg]# sarg
SARG: 纪录在文件: 242, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2018Jul21-2018Jul21
12、yum install httpd -y
13、systemctl start httpd
14、systemctl stop firewalld
15、访问http://192.168.175.128/sarg
16、vim /usr/local/sarg/report.sh
#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#get one week ago today
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
17、chmod +x /usr/local/sarg/report.sh
#周期性计划任务执行每天生成报告crontab
18、crontab -e
0 0 * * * /usr/local/sarg/report.sh
七、squid反向代理
--------------squid反向代理---------------------------------------
1、因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
2、 清空防火墙规则,并放空3128端口
iptables -F
iptables -t nat -F
3 . 修改squid配置文件
vim /etc/squid.conf
http_port 192.168.80.10:80 accel vhost vport
cache_peer 192.168.80.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.80.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.clj.com
4、##重启squid服务
systemctl stop squid.service
systemctl start squi
5、后端2台web节点服务器设置
##节点1(web1:192.168.80.20)
echo “this is WEB1” >> /var/www/html/index.html
##节点2(web2:192.168.80.30)
echo “this is WEB1” >> /var/www/html/index.html
6、客户机的域名映射配置
修改C:\Windows\System32\drivers\etc\hosts 文件
192.168.80.10 www.clj.com
7、开启客户机的代理配置
打开浏览器,工具–>Internet选项–>连接–>局域网设置–>开启代理服务器
(地址: Squid服.务器IP地址,端口: 80)
浏览器访问http:/ /www. kgc. com
``