定义:
代理服务器,简单的说就是代替客户向源站获取数据,缓存一份,然后再返还给客户(这里不包括反向代理)。
优点:
1.突破自身IP访问限制,访问国外站点。教育网、过去的169网等网络用户可以通过代理访问国外网站。
2.访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。
3.突破中国电信的IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。所以不能访问时可以换一个国外的代理服务器试试。
4.提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
5.隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。
原理图:
1.正向代理:一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。
2.透明代理:透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。
3.反向代理:反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。
1.正向代理:服务器只需要安装并启动squid服务,客户浏览器设置代理ip和端口,客户端不需要配置dns,需要配置默认路由。
2.透明代理:
a) 客户机配置好DNS服务器地址,网关以及去网关的路由即可。
dns 8.8.8.8
route add default gw 10.1.1.2
b) 网关能够连接外网,解析域名。配置防火墙策略,将源地址为10.1.1.0/24转化为网关eth1的地址,将所有目标地址转化为squid代理eth1的地址。
route add default gw 192.168.1.1
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 192.168.1.67
iptables -t nat -A PREROUTING -i eth0 -d 0.0.0.0/0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.61
c) 安装squid,在配置文件/etc/squid/squid.conf指定端口的语句后面加transparent 支持透明代理,启动squid。配置防火墙,将所有目标端口为80的重定向到3128端口。
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
3.反向代理:
下面截取一张反向代理的配置图
#定义服务器地址和端口(做Proxy时最好用lan的ip来设定绑定端口,transparent表示支持透明代理)
http_port 192.168.1.253:3128 transparent
#定义服务器的名字
visible_hostname squid-proxy-server
#定义管理员邮件地址(在访问发生错误时,visible_hostname和cache_mgr这两个选项的值显示在错误提示页面内的相关位置)
cache_mgr [email protected]
#定义缓存内存空间
cache_mem 32 MB
cache_swap_low 90
cache_swap_high 95
#定义缓冲最大值的内容
maximum_object_size 4096 KB
#定义缓存目录
cache_dir ufs /var/spool/squid 100 16 256
#定义不缓冲的内容
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
#日志
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
#cache_store_log /usr/local/squid/var/logs/store.log
cache_store_log none
#缓冲存取用户和组
cache_effective_user squid squid
#定义ACL
#sexurl.txt列出要过滤网站地址的关键字,每个关键字占一行,如www.sina.com(取sina)即可
#maclist.txt列出允许上网的主机的MAC地址,每个地址占一行,如00:50:56:C0:00:08
acl all src all #定义所有的地址
acl allow_lan src 192.168.1.0/24 #允许局域网lan访问的acl
acl sexurl url_regex "/tmp/forbidurl.txt" #定义过滤url
#acl allowedmac arp "/etc/squid/maclist.txt"
#定义访问策略
http_access deny virurl #拒绝文件内的url
http_access allow allow_lan #允许局域网ip访问
http_access deny all #拒绝其它未定义的规则
#http_access allow allowedmac