Squid 是一个高性能的http代理服务器和web缓存服务器,可以很好的实现HTTP和FTP以及DNS查询、SSL等应用的缓存代理。
1、代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
2、可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
3、可以用在局域网中,使局域网用户通过代理上网。
4、可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
5、Squid支持SSL,支持ACL访问控制。
Web代理的工作机制
使用代理的好处
传统代理模式
客户端必须在自己的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器上网。
主机 | IP | 主要软件 |
---|---|---|
squid代理服务器 | 192.168.100.22 | squid-3.5.27.tar.gz |
web服务器 | 192.168.100.23 | apache |
[root@localhost ~]# hostnamectl set-hostname squid
[root@localhost ~]# su
[root@squid ~]#
[root@localhost ~]# hostnamectl set-hostname web
[root@localhost ~]# su
[root@web ~]#
tar zxvf squid-3.4.6.tar.gz -C /opt/
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid \ ##自定义安装路径
--sysconfdir=/etc \ ##单独将配置文件修改到/etc目录下
--enable-arp-acl \ ##可在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 ##支持GNU正则表达式
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
//增添下句并注释deny
http_access allow all
#http_access deny all
//在端口port下增添三行代码
http_port 3128
cache_effective_user squid #添加指定程序用户
cache_effective_group squid #添加指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid #内存映像的地址
squid -k parse #检查配置文件语法
squid –k rec #重新加载配置文件
squid -z #初始化缓存目录
squid #启动服务
netstat -ntap | grep 3128 #查看服务是否启动
//编写优化脚本
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 #设置为开机自启动
service squid stop
service squid start
netstat -ntap | grep 3128
[root@squid init.d]# vim /etc/squid.conf
http_port 3128 '//下面添加'
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
[root@squid init.d]# iptables -F
[root@squid init.d]# setenforce 0
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#重载服务
[root@squid init.d]# service squid reload
[root@squid init.d]# netstat -ntap | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 11982
[root@localhost ~]# su
[root@web ~]# systemctl stop firewalld.service
[root@web ~]# setenforce 0
[root@web ~]# yum install httpd -y
[root@web ~]# systemctl start httpd
[root@web ~]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 85552/httpd
#查看访问日志是没有东西的
[root@web ~]# cat /var/log/httpd/access_log
设置客户端代理服务为squid IP
用win 10客户机访问web
[root@web ~]# cat /var/log/httpd/access_log
客户端20.0.0.120访问20.0.0.46网站服务,成功变为访问 squid代理IP
服务器 | ip |
---|---|
squid | ens33:192.168.100.20 : ens37:192.168.10.20 |
web | 192.168.100.21 |
client | 192.168.10.30 |
实现思路:
修改IP地址
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens37
vi ifcfg-ens37 ##修改ens37ip信息
BOOTPROTO=static
##删除uuid修改33为37
IPADDR=192.168.10.30
NETMASK=255.255.255.0
//重启网络服务
service network restart
//开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p ##加载使之生效
route add -net 192.168.10.0/24 gw 192.168.100.20
//修改配置文件
vim /etc/squid.conf
#http_port 3128 #删除添加下面这行,地址为与客户机在同网段的地址
http_port 192.168.100.30:3128 transparent
service squid restart
netstat -ntap | grep 3128
iptables -F #清空表缓存
iptables -t nat -F
//定义规则入口ens37,80端口重定向到3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
//允许3128端口访问
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
iptables -t nat -L
cat /var/log/httpd/access_log