坚持#第263天~squid代理(正想代理、透明代理、反向代理)

squid:

客户端实际上是访问代理服务器,代理服务器再把结果返回给客户端

还有缓存的功能

应用在应用层

正向代理:代理上网

无论是正向代理还是反向代理都可以进行网络控制

 

正向和反向看客户端

客户端访问代理服务器,看代理服务器里面有没有缓存,有缓存的话,直接使用缓存,没有的话,代理服务器向远端服务器发送请求,远端

 

一般只缓存静态页面,动态页面会变化不适合缓存。

 

提高web服务器的安全性

 

3种代理方式

正向代理、透明代理、反向代理

正向代理的目的:为了实现内网正常上网

就像DNS转发一样

缺点:用户需要对浏览器进行设置

透明代理:

优点:不需要对浏览器进行设置

 

反向代理:

外网客户端通过代理服务器,能够访问内网

 

以下是正向代理:

环境:

web:192.168.10.11(clone1)

squid:192.168.10.13、192.168.1.250注意这个代理服务器虚拟机有两个网卡

client:192.168.1.1

 

start:

正向代理:

1.250:

systemctlstart httpd

yum install-y squid(代理服务器的软件装在哪里哪里就是代理服务器)

systemctlstart squid

火狐-首选项-高级-网络-设置-手动配置代理-HTTP代理:192.168.1.250,端口3128

qq浏览器(开启极速模式)-设置-高级-更改代理服务器设置-局域网设置:192.168.1.250,端口3128

你会发现可以访问代理服务器另一个网卡的网段了

 

正向代理总结:

物理机是1网段的,浏览器的设置代理就写代理服务器中1网段的网卡,

然后在浏览器可以访问代理服务器另一个网卡的网段了

克隆1把真机屏蔽掉

iptables -AINPUT -s 10.11 -p tcp --dport 80 -j REJECT

能ping通10.11,但是访问不了curl不通

克隆2可以(绕道上网)

systemctlstart squid

浏览器设置192.168.10.12可以访问10.11了

 

透明代理:

环境:

start:

10.11机:

先把浏览器上的代理去掉

vim/etc/squid/squid.conf

59行在3128后面加上  transparent表示是透明代理

systemctlrestart squid重启服务

iptables -tnat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port3128设置防火墙策略地址转换,iptables -S查看设置成功了没

-t:指定操作的是哪张表,nat表是做地址转换的
-A
:添加一条策略
PREROUTING
:路由前
-s IP
:指定源IP
-p tcp
:协议
--dport
:目标端口
-j
指定动作
REDIRECT
:重定向
--to-port
端口:重定向到某个端口

 

切换一台不同网段的虚拟机操作:

route -n查看路由表

ping 10.11不通

route adddefault gw 192.168.1.250把网关设置成代理服务器ip

route add-net 192.168.56.57 netmask 255.255.255.255 gw 192.168.1.63

-net后面的ip如果是写全的话,子网掩码是4个255,

-net后面的ip如果是.0结尾的话就是一个网段,3个255

ping不通10.11,但是可以访问,可以curl通

 

route deldefault gw 192.168.1.250删除nat刚才的设置

iptables -F是刷新清空

route -n可以查看生效了没

 

同一网段是如何发送的?不同网段又是如何发送的?

比如说192.168.10.11和192.168.10.12怎么通信?

首先通过自己的子网掩码24和对方相比是否一样,如果一样,通过广播获取对方的mac地址,将数据传送给对方的mac地址:

data、目标端口、自己端口、目标ip、自己ip、目标mac、自己mac

对方收到之后会拆分data,里面有来源的位置,可以回应他

如果不一样,就访问

 

反向代理:

通过缓存反向加速代理:

访问的是代理服务器,而不是真正的服务器

squid不要用3128端口了,改成80端口

vim/etc/squid/squid.conf

 

安装软件:
# yum install squid -y
关闭防火墙
修改配置文件
# vim /etc/squid/squid.conf
#将端口监听在 192.168.1.250:80 上,accel 指加速模式,vhost,vport 用于转发请求
http_port 192.168.1.250:80 accel vhost vport在59行虚拟端口
#计算机名,可以为IP地址,用于错误页面的显示
visible_hostname desk.up.com改了主机名导致服务起不来就要加这条了
#使用多大的内存作为缓存,不能大于物理内存的三分之一
cache_mem 16 MB注意有MB空格
#缓存目录大小为512M,这个可以按实际磁盘大小来定,有16二级目录,每个二级目录下有256个子目录
cache_dir ufs /var/spool/squid 512 16 256
#最大缓存文件大小为 4MB ,超过的直接传给用户,不作缓存
maximum_object_size 4 MB
#访问日志文件路径,记录了用户访问 Internet 的详细信息,可以查看每用户的上网记录
cache_access_log /var/log/squid/access.log
#缓存日志文件路径,记录了缓存相关的日志信息
cache_log /var/log/squid/cache.log
#网页缓存日志文件路径,记录了网页在缓存中调用情况
cache_store_log /var/log/squid/store.log
#缓存磁盘空间大于 90% 时自动清理
cache_swap_high 90
#清理到 80% 时停止
cache_swap_low 80
#cache_peer 后端真实服务器地址,端口,0 为 ICP 端口号(多个 Squid 时用),originserver原始资源服务器 调度策略 服务器权重,如果服务器有多台的话round-robin允许轮循
cache_peer 192.168.10.12 parent 80 0 originserver round-robin weight=1
重启服务
[root@squid ~]# systemctl restart squid

 

怎么看使用了缓存
echo clone1 > /var/www/html/index.html

cd/var/log/squid

vimaccess.log里面可以查看缓存日志

TCP_MISS是没有命中缓存,HIT是命中了缓存

cd/var/spool/squid/这个是缓存的目录

 

如果服务器有多台的话:

在cache_peer192.168.10.12 parent 80 0 originserver上面添加一条round-robin允许轮循:

cache_peer192.168.10.11 parent 80 0 originserver round-robin weight=1

cache_peer192.168.10.1 parent 80 0 originserver round-robin weight=1

 

重新巩固:

正向代理:(正向代理不该注释的不要注释掉)

第一步:代理机的两个网卡是56.63、1.63,在代理机上安装代理软件四驱id:

yum install-y squid

systemctlstart squid

第二步:浏览器上设置代理ip和3128端口即可(代理的端口是38中间有个12)

 

透明代理:

第一步:关闭浏览器代理设置,修改代理机的代理配置文件:

vim/etc/squid/squid.conf

第59行后面追加transparent

systemctlrestart squid

第二步:代理机:清除防火墙策略,并设置防火墙端口重定向策略:

iptables -tnat -F

iptables -tnat -A PREROUTING -s 192.168.1.0/24客户机网段 -p tcp --dport 80 -j REDIRECT --to-port 3128

第三步:客户机:添加一个代理ip的路由网关:

route add -net192.168.56.57 netmask 255.255.255.255 gw 192.168.1.63

可以curl 192.168.56.57了

 

反向代理:

第一步:代理机:清空防火墙策略,并修改代理机的代理配置文件

iptables -tnat -F

vim/etc/squid/squid.conf

http_port192.168.1.63:80 accel vhost vport从第59行开始添加

visible_hostnamelitao5663

cache_mem 16MB

cache_dirufs /var/spool/squid 512 16 256

maximum_object_size4 MB

cache_access_log/var/log/squid/access.log

cache_log/var/log/squid/cache.log

cache_store_log/var/log/squid/store.log

cache_swap_high90

cache_swap_low80

cache_peer192.168.56.57真实服务器地址 parent 80 0originserver round-robin weight=1

systemctlrestart squid

第二步:客户机:客户机去访问代理服务器

curl192.168.1.63反向代理是客户机访问代理服务器,而不是访问真实服务器

 

mysql方框形状的,添加字段很浪费空间

nosql可以添加字段,比mysql更节省空间

mangleDB基于mysql和nosql之间,可以存放大量数据

面向图形化的数据库

 

代理的ACL访问控制:

ACL访问控制: 不能上网

vim/var/log/squid

acl 定义元素

使用deny禁止,allow允许访问

acl就是将一个东西本地网络  源地址做标记:

acl localnetsrc

格式:acl  名字  类型 

源地址src目标地址dst

源端口port

源域srcdomain目标域dstdomain

域名里面包含的东西、正则匹配

proto协议

 

src:指明源地址。可以用以下的方法指定:
acl aclname src ip-address/netmask ... 客户ip地址
acl aclname src addr1-addr2/netmask ... 地址范围
dst:指明目标地址,即客户请求的服务器的IP地址。语法为:
acl aclname dst ip-address/netmask ...
srcdomain:指明客户所属的域,Squid将根据客户IP反向查询DNS。语法为:
acl aclname srcdomain foo.com ...
dstdomain:指明请求服务器所属的域,由客户请求的URL决定。语法为:
acl aclname dstdomain foo.com ...。此处需要注意的是:如果用户使用服务器IP而非完整的域名时,Squid将进行反向的DNS解析来确定其完整域名,如果失败,就记录为“none”。

time指明访问时间。语法如下:
acl aclname time [day-abbrevs] [h1:m1-h2:m2] [hh:mm-hh:mm]
日期的缩写指代关系如下:
1. S:指代Sunday
2. M:指代Monday
3. T:指代Tuesday
4. W:指代Wednesday
5. H:指代Thursday
6. F:指代Friday
7. A:指代Saturday
另外,h1:m1必须小于h2:m2,表达式为[hh:mm-hh:mm]。

port:指定访问端口。可以指定多个端口,比如:
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一个端口范围
proto:指定使用协议。可以指定多个协议:
acl aclname proto HTTP FTP ...
method:指定请求方法。比如:
acl aclname method GET POST ...
url_regex:URL规则表达式匹配,语法为:
acl aclname url_regex [-i] pattern
urlpath_regex:URL-path规则表达式匹配,略去协议和主机名。其语法为:
acl aclname urlpath_regex [-i] pattern
在使用上述ACL元素的过程中,要注意如下几点:
1. acltype可以是任一个在ACL中定义的名称。
2. 任何两个ACL元素不能用相同的名字。
3. 每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换句话说,任一ACL元素的值被匹配,则这个ACL元素即被匹配。
4. 并不是所有的ACL元素都能使用访问列表中的全部类型。
5. 不同的ACL元素写在不同行中,Squid将这些元素组合在一个列表中。

2. http_access访问控制列表
根据访问控制列表允许或禁止某一类用户访问。如果某个访问没有相符合的项目,则默认为应用最后一条项目的“非”。比如最后一条为允许,则默认就是禁止。通常应该把最后的条目设为“deny all”或“allow all”来避免安全性隐患。
使用该访问控制列表要注意如下问题:
1. 这些规则按照从上到下的顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
2.
如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
3.
一个访问条目中的所有元素用逻辑与连接
4.
一个acl元素中的多个参数用逻辑或连接

 

 

把56行上面的全部都注释掉,重启服务任何人都不能反问了

 

开启80端口的访问:

第15行开启

并把下面的!改为allow,!是取反的意思

http_accessallow Safe_ports

 

例如周一~周五早8点到晚上6点

15行下面插入:

acl worktimetime MTWHF 8:00-18:00

http_accessallow Safe_ports worktime可以写在一起

 

aclSafe_ports port 21 20 80 443 1024-65534或的关系

例子:

3. 代理的ACL访问控制实例:
(1)允许网段10.0.0.0/8内的所有客户机以及在文件/etc/squid/allow-hosts列出的客户机访问代理服务器

acl allow_hosts src 10.0.0.0/8 “/etc/squid/allow-hosts”文件位置固定的

httpd_access allow allow_hosts 写到默认策略上面

start:

全注释

acl allow_hosts src 10.14 “/etc/squid/allow_hosts”位置要放对

httpd_access allow allow_hosts

vim /tmp/hosts

10.15

经验:看到10.0.0.0/8肯定是src类型

(2)允许域名为job.net、gdfq.edu.cn的两个域访问代理服务器,其他的域都将拒绝访问代理服务器

acl allow_dom srcdomainjob.net gdfq.edu.cn

经验:看到域名肯定是源域

(3)使用正则表达式,拒绝客户机通过代理服务器访问url中包含有诸如“sexy”等关键字的网站

acl deny_list url_regex -isexy

http_access denydeny_access

经验:看到关键字是正则

http_access deny  deny_access要写在allow的上面,因为一旦匹配到了就不在往下面执行了

(4)只允许管理员192.168.10.1访问网站http://www.qq.com,其他人不能访问此网站,但是可以访问其他网站

acl deny_dom dstdomain www.qq.comm

acl manager src 192.168.10.1

http_access allow manager

http_access deny deny_dom顺序不能颠倒

这些规则按照从上到下的顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。

想象:如果不是管理员,就不能访问,如果是管理员,就能访问,不执行下面的那个拒绝了

经验:看到www.qq.com就是目标域

看到192.168.10.1就是

(5)允许所有的用户在上班时间(周一至周五的8:30到18:00)访问代理服务器,其他时间不能访问; 系统管理员192.168.10.1可以在任何时间访问

acl workdaytime MTWHF

acl worktimetime 8:30-18:00

acl managerssrc 192.168.10.1

http_accessallow managers

http_accessdeny !workday

http_accessdeny !worktime

 

查看日志检查哪里报错:vim /var/log/messages

 

重新巩固:

代理服务器ACL访问控制:

关键:从上到下的顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束

关键:时间是看代理机的时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值