网络技术高级工程师专业RedHatLinux服务器操作系统难点:Linux下Squid的应用重点:Squid代理服务器配置关键词:Squid代理1、代理服务功能:代理服务器是目前网络中常见的服务器之一,它可以提供文件缓存、复制和地址过滤等服务,充分利用有限的出口带宽,加快内部主机的访问速度,也可以解决多用户需要同时访问外网但公有IP地址不足的问题。同时可以作为一个防火墙,隔离内网与外网,并且能提供监控网络和记录传输信息的功能,加强局域网的安全性等。它的主要作用有以下几点。1.共享网络2.加快访问速度,节约通信带宽3.防止内部主机受到攻击4.限制用户访问,完善网络管理Squid基本概念2、代理服务原理:①客户端A向代理服务器提出访问Internet的请求。②代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。③如果缓存中存在客户端A需要的信息,则将信息传送给客户端。如果不存在,代理服务器就代替客户端向Internet上的主机请求指定的信息。④Internet上的主机将代理服务器的请求信息发送到代理服务器中,同时代理服务会将信息存入缓存中。⑤代理服务器将Internet上主机的回应信息传送给客户端A。⑥客户端B向代理服务器提出相同的请求。⑦代理服务器也首先与访问控制列表中的访问规则相对照。⑧如果满足规则,则将缓存中的信息传送给客户端B。Squid基本概念Squid基本概念3、Squid简介Squid是Linux和UNIX平台下最为流行的高性能免费应用层代理服务器,它具有权限管理灵活、性能高和效率快等特点。Squid是一个由众多在互联网上的开发人员共同努力完成的高性能的代理缓冲服务器,它的具体开发是由国家网络应用研究室(theNationalLaboratoryforAppliedNetworkResearch)的DuaneWessels主持,由NSF出资支持的。Squid的另一个优越性在于它使用访问控制列表(ACL)和访问权限列表(ARL)进行权限管理和内容过滤。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。1、安装squid软件包#rpm–ivhsquid-2.6.STABLE6-4.el5.i386.rpmSquid代理服务基本配置2、配置网卡并开启路由功能设置网卡IP地址:#ifconfigeth0192.168.8.188netmask255.255.255.0#ifconfigeth1192.168.0.188netmask255.255.255.0开启内核路由功能:#echo1/proc/sys/net/ipv4/ip_forwardSquid代理服务基本配置3、配置主配置文件squid.conf#vim/etc/squid/squid.confhttp_port192.168.8.188:8080//仅监听内网eth0:192.168.8.188上8080端口的http请求cache_dirufs/var/spool/squid1024016256//设置硬盘缓存大小为10G,目录为/var/spool/squid,一级子目录16个,二级子目录256个。cache_mem512MB//设置高速缓存为512MBcache_swap_low90cache_swap_high95cache_access_log/var/log/squid/access.log//设置访问日志cache_log/var/log/squid/cache.log//设置缓存日志cache_store_log/var/log/squid/store.log//设置网页缓存日志Squid代理服务基本配置3、配置主配置文件squid.confdns_nameservers202.102.192.68//设置DNS服务器地址cache_mgrroot@example.com//设置管理员E-mail地址cache_effective_usersquid//设置squid进程所有者cache_effective_groupsquid//设置squid进程所属组visible_hostname192.168.8.188//设置squid可见主机名error_directory/usr/share/squid/errors/Simplify_Chinese//客户端错误提示为中文acllist1src192.168.0.0/255.255.255.0//设置访问控制列表list1,该表的内容为所有客户端http_accessallowlist1//设置允许所有客户端访问Squid代理服务基本配置4、初始化squid服务,创建Squid使用硬盘缓冲区的目录结构。#squid–z5、检测squid语法#squid-kparse6、启动squid服务#servicesquidstartSquid代理服务基本配置Squid代理服务基本配置7、测试客户端设置acl选项的格式如下:acl列表名称列表类型[-i]列表值列表名称:用于区分Squid的各个访问控制列表,任何两个访问控制列表不能用相同的列表名。虽然列表名称可以随便定义,应尽量使用有意义的名称,如badurl、clientip和worktime等。列表类型:是可被Squid识别的类别。Squid支持的控制类别很多,可以通过IP地址、主机名、MAC地址和用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口和URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理-i:表示忽略列表值的大小写。列表值:针对不同的类型,列表值的内容是不同的。例如,对于类型为src或dst,列表值的内容是某台主机的IP地址或子网地址;对于类型为time,列表值的内容是时间;对于类型为srcdomain和dstdomain,列表值的内容是DNS域名。Squid代理服务基本配置类型选项命令说明src源IP地址(客户机IP地址)dst目标IP地址(服务器IP地址)srcdomain源名称(客户机所属的域)dstdomain目标名称(服务器所属的域)time一天中的时刻和一周内的一天url_regexURL规则表达式匹配urlpath_regex:URL-path略去协议和主机名的URL规则表达式匹配proxy_auth通过外部程序进行用户认证maxconn单一IP的最大连接数time时间段,语法为:[星期][时间段]。[星期]:可以使用这些关键字M(Monday星期一)、T(Tuesday星期二)、W(Wednesday星期三)、H(Thursday星期四)、F(Friday星期五)、A(Saturday星期六)和S(Sunday星期天)[时间段]:可以表示为10:00-20:00Squid代理服务基本配置Squid代理服务基本配置Squid会针对客户HTTP请求检查http_access规则,定义访问控制列表后,就使用http_access选项根据访问控制列表允许或禁止访问了。该选项的基本格式为:http_access[allow|deny]访问控制列表名称[allow|deny]:定义允许(allow)或禁止(deny)访问控制列表定义的内容。访问控制列表名称:需要http_access控制的ACL名称。访问控制应用实例例1:禁止IP地址为192.168.16.200的客户机上网。aclbadclientip1src192.168.16.200http_accessdenybadclientip1例2:禁止192.168.16.0这个子网里所有的客户机上网。aclbadclientnet1src192.168.16.0/255.255.255.0http_accessdenybadclientnet1访问控制应用实例例3:禁止用户访问IP地址为210.21.118.68的网站。aclbadsrvip1dst210.21.118.68http_accessdenybadsrvip1例4:禁止用户访问域名为的网站。aclbaddomain1dstdomain–i:禁止用户访问域名包含有qq.com的网站。aclbadurl1url_regex–i.qq.comhttp_accessdenybadurl1访问控制应用实例例6:禁止用户访问域名包含有sex关键字的网站。aclbadurl2url_regex–isexhttp_accessdenybadurl2例7:限制IP地址为192.168.16.200的客户机并发最大连接数为5。aclclientip1src192.168.16.200aclconn1maxconn5http_accessdenyclientip1conn1访问控制应用实例例8:限制192.168.16.0子网所有客户机仅在周一到周五的8:00-18:00上网。aclclientnet1src192.168.16.0/255.255.255.0aclworktimetimeMTWHF8:30-12:0014:00-18:00http_accessdenyclientnet1!worktime例9:禁止客户机下载*.mp3,*.exe,*.rar和*.zip类型的文件。aclbadfile1urlpath_regex-i\.mp3$\.exe$\.rar$\.zip$http_accessdenybadfile1例10:禁止内部客户机客户机上QQ。acldenyqq1url_regex-i.tencent.comhttp_accessdenydenyqq1透明代理所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。相关的选项:httpd_accel_hostvirtualhttpd_accel_port80httpd_accel_with_proxyonhttpd_accel_user_host_headeron可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口8080,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:iptables-tnat-APREROUTING-s192.168.16.0/32-ptcp--dport80-jREDIRECT8080就是将192.168.16.0的所有针对80端口的访问重定向到8080端口。Squid透明代理1、配置Squid#vietc/squid/squid.confhttp_port192.168.16.1:8080cache_mem512MBcache_dirufs/var/spool/squid409616256cache_effective_usersquidcache_effective_groupsquiddns_nameservers202.102.192.68cache_access_log/var/log/squid/access.logcache_log/var/log/squid/cache.logcache_store_log/var/log/squid/store.logvisible_hostname192.168.16.1cache_mgrlindenstar@163.com#以下是实现透明代理的4条语句的关键,缺一不可httpd_accel_hostvirtualhttpd_accel_port80httpd_accel_with_proxyonhttpd_accel_uses_host_headeronaclallsrc192.168.16.0/255.255.255.0http_accessallo