Web代理的工作机制
缓存网页对象,减少重复请求
代理的基本类型
传统类型:适用于Internet,需要明确指定服务端
透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
使用代理的好处
提高Web访问速度
隐藏客户机的真实IP地址
传统代理部署
设备 IP地址
客户机 20.0.0.18
代理服务器 20.0.0.11
web服务器 20.0.0.12 20.0.0.15
Squid安装
-
上传文件,解压
tar xf squid-3.5.23.tar.gz cd squid-3.5.23/
-
配置安装内容
./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
cd
ln -s /usr/local/squid/sbin/* /usr/sbin/
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var
- 编辑配置文件
vi /etc/squid.conf
squid -k parse
cache_effective_user squid
cache_effective_group squid
5.启动服务
squid -z
squid
netstat -anpt | grep squid
- 配置管理文件
vi /etc/init.d/squid
chmod +x /etc/init.d/squid
chkconfig --add /etc/init.d/squid
chkconfig --list
#!/bin/bash
#chkconfig:35 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 -anpt | 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
;;
reload)
$CMD -k reconfigure
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then netstat -anpt | grep squid
else echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
$0 start &> /dev/null
;;
check)
$COM -k parse
;;
*)
echo "用法: $0{start|stop|status|restart|check|reload}"
esac
- 重启服务,查看端口
systemctl stop squid
systemctl start squid
systemctl status squid
netstat -anpt | grep squid
传统代理
- 修改配置文件
vi /etc/squid.conf
http_access allow all
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
squid -k parse
systemctl stop squid
systemctl start squid
netstat -anpt | grep squid
-
开始设置web节点
在web1,web2上
1.安装软件yum -y install httpd
-
在所有设备上
systemctl stop firewalld
setenforce 0
systemctl disable firewalld
sed -i '/SELINUX/s/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
grep -v "#" /etc/selinux/config
- 在web1,web2上创建网页
web1 web2上
echo "<h1>this is web1</h1>" > /var/www/html/index.html
echo "<h1>this is web1</h1>" > /var/www/html/index.html
systemctl start httpd
curl http://localhost
-
客户机浏览器上进行代理设置
浏览器上在首选项–高级–设置–手动配置代理
代理服务器ip地址,端口号 -
在squid上
iptables -F
iptables -I INPUT -p TCP --dport 3128 -j ACCEPT
透明代理
基础设备
一个Squid代理服务器:20.0.0.11 192.168.1.13
两个web节点服务器:192.168.1.14,192.168.1.15
一个客户机client:20.0.0.19
-
打开浏览器–设置页面–首选项–高级–网络–连接设置—不使用代理
-
在squid上
systemctl stop squid
-
开启路由功能
vi /etc/sysctl.conf
sysctl -p
net.ipv4.ip_forward=1
- web1 web2上添加路由
route add -net 20.0.0.0/24 gw 192.168.1.13
route -n
- 配置透明代理服务器
在squid上配置
编辑配置文件
vi /etc/squid.conf
systemctl start squid
netstat -anpt | grep squid
http_port 192.168.1.10:3128 transparent
iptables -F
iptables -t nat -I PREROUTING -i ens33 -s 20.0.0.0/24 -p tcp --dport=80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 20.0.0.0/24 -p tcp --dport=443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport=3128 -j ACCEPT
iptables -t nat -L
iptables -L
-
测试
192.168.1.14
192.168.1.15
-
查看日志
tail -f /var/log/httpd/access_log web1 web2 tail -f /usr/local/squid/var/logs/access.log squid
ACL访问控制
ACL用法
squid 定义acl
acl 列表名称 类型 控制的对象
squid 调用acl
http_access allow/deny 列表名称
常用的ACL列表类型
类型 | 表示 |
---|---|
src | 源地址 |
dst | 目标地址 |
port | 端口号 |
dstdomain | 目标域 |
time | 访问时间 |
maxconn | 最大并发连接 |
url_regex | 目标URL地址 |
Urlpath_regex | 整个目标URL路径 |
举例
禁止源地址为20.0.0.18的IP地址访问
vi /etc/squid.conf
acl client src 20.0.0.18/32
http_access deny client
squid日志分析
sarg
-
配置网易yum源、并安装依赖包、上传sarg-2.3.7.tar.gz压缩包
-
创建目录、编译安装
yum -y install gd gd-devel
mkdir /usr/local/sarg
tar xf sarg-2.3.7.tar.gz
cd sarg-2.3.7/
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install
-
修改配置文件
vi /etc/sarg/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
:206 修改添加 exclude_hosts /usr/local/sarg/ noreport
:184 topuser_sort_field connect reverse
:190(注释) user_sort_field reverse
:257 overwrite_report no
:289 mail_utility mailx
:434 修改 charset UTF-8
:518 weekdays 0-6
:525 hours 0-23
:633 www_document_root /var/www/html
-
创建文件
touch /usr/local/sarg/noreport ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
-
安装httpd,并开启
yum -y install httpd
日志分割
crontab -e
* 2 * * * /usr/local/bin/sarg -l /usr/local/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "-1 day" +%Y-%m-%d)-$(date +%Y-%m-%d)
反向代理
工作机制
缓存网页对象,减少重复请求
将互联网请求轮询或按权重份额配到内网Web服务器
代理用户请求,避免用户直接访问Web服务器,提高安全
- 编辑配置文件
vi /etc/squid.conf
http_port 20.0.0.11:80 accel vhost vport
cache_peer 192.168.1.14 parent 80 0 no-query originserver round-robin max_conn=100 weight=1 name=web1
cache_peer 192.168.1.15 parent 80 0 no-query originserver round-robin max_conn=100 weight=1 name=web2
cache_peer_domain web1 web2 www.cjy.com
- 开启关闭服务
iptables -F
iptables -F -t nat
iptables -L -t nat
systemctl stop squid
systemctl start squid
netstat -anpt | grep squid
- 测试