转自:http://hi.baidu.com/owee/blog/item/53e74889355c53b20f24445d.html
文章写的很好!值得推荐!
LINUX网络工程师教程
2007-04-19 12:57
SQUID代理服务器
教学内容: ■ 代理服务器概述 ■ Squid安装和配置 ■ Squid配置案例 教学目标: ■ 了解代理服务器工作原理 ■ 理解Squid服务器配置选项 ■ 掌握Squid服务器的安装和配置 教学重点: ■ Squid的安装和配置 ■ Squid配置选项 教学难点: ■ 透明代理 一. 代理服器概述 1. 什么是代理服务器 代理服务器(Proxy Server)是指代理服务的双宿主主机,是个人网络和Internet服务商之间的中间代理机构,它负责转发合法的网络信息,对转发进行控制和登记。代理服务器作为连接Internet(广域网)与Intranet(局域网)的桥梁 2. 代理服务器的功能 充当局域网与外部网络的连接出口 作为防火墙 网址过滤和访问权限限制 提高访问速度 3. 代理服务器的工作过程 (1) 客户机发送访问请求给代理服务器 (2) 代理服务器联系客户机请求的服务器,缓存客户访问内容 (3) 客户机访问代理服务器的缓存 4. 代理服务器的优缺点 (1) 优点 保护内部主机免受外部主机的*** 提供高速的缓存功能 在应用网关上可以强制执行用户的身份认证 内容过滤和简化包过滤 具有完整的日志 (1) 缺点 支持的协议有限 不能防止数据驱动侵袭 建立了一个网络的服务瓶颈 5. Squid简介 Squid是一个高性能的代理缓存服务器,它支持FTP、GOPHER和HTTP协议 Squid支持SSL,支持访问控制 Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户请求 Squid代理服务器可以分为:普通代理服务器、透明代理服务器、反向代理服务器 二. Squid的安装和配置 1. 安装Squid (1)RPM包方式 #rpm -ivh squid-2.5.STABLE1-2.i386.rpm(1#CD) (2)编译方式 #tar -xzvf squid-2.5.STABLE.tar.gz #cd squid-2.5.STABLE #./configure --prefix=/var/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-pthreads --enable-err-language="Simplify_Chinese" --enable-storeio=ufs,null --enable-default-err-language="Simplify_Chinese" --enable-auth="basic" --enable-baisc-auth-helpers="NCSA" --enable-underscore #make #make install 相关文件: /etc/squid/squid.conf squid的主配置文件 /etc/squid/errors 报告错误使用的语言 /etc/squid/ mib.txt Squid-MIB定义文件 /etc/squid/mime.conf 定义MIME-TYPE /etc/squid/msntauth.conf MSNT认证的配置文件 /usr/sbin/squid Squid主程序 /usr/sbin/squidclient 统计显示摘要表的客户程序 /usr/lib/squid/*_auth Squid的各种认证库文件 2. Squid的配置 (1) Network Options(网络设置选项) http_port 端口号 监听客户请求的端口,默认3128 icp_port 端口号 和其它squid发送和接收ICP查询时监听的端口,0表示禁止 mcast_groups IP地址 指定一个多播组,可以接收多播形式的ICP查询,例:mcast_groups 239.128.16 224.0.1.20 htcp_prot 端口号 同其它相邻的缓存服务器之间发送和接收HTCP查询时监听的端口,0:禁用 tcp_outgoing_address IP地址 用于采用HTCP和CARP方式同其它服务器通信,默认255.255.255.255 udp_incoming_address IP地址 接收其它缓存服务器的ICP数据报时使用的地址,默认0.0.0.0 udp_outgoing_address IP地址 发送ICP数据报到其它缓存服务器时用的地址,默认255.255.255.0 (2) 多缓存服务器设置选项 cache_peer hostname type http_port icp_port options 指定网络中其它的缓存服务器,默认为none。 Hostname:另一台缓存服务器的主机名 Type: parent/sibling /multicast(父/同级/多播) http_port:目的服务器的http端口 icp_port:目的服务器的ICP端口 options: – proxy-only:仅去获取数据,但不在本地缓存 – no-query: 不发送ICP查询给此主机 – default:默认的父服务器 – login username:passwd:连接对方通过服务器用户名和密码 – no-netdb-exchange 代理服务器之间彼此不交换信息 – round-robin 当有多个代理服务器可用时,本地代理服务器采用轮转算法 cache_peer_domain 服务器主机名 域名 用来限定查询相邻的缓存服务器的域 dead_peer_timeout N seconds 设置Squid在确定父(同)级缓存服务器不可用之前的等待时间 (3) 缓存大小设置选项 cache_mem N(KB/MB/bytes,默认为bytes) 缓存内存大小 cache_swap_low(percent,0-100) 缓存对象交换的最低点 cache_swap_high(percent,0-100) 缓存对象交换的最高点 maximum_object_size 缓存对象的最大大小 minimum_object_size 缓存对象的最小大小 maximum_object_size_in_memory 在内存中缓存的最大的对象大小 ipcache_size 4096: ip对应cache的大小为4096fqdncache_size 4096: fqdncache_size 4096 域名全称cache的大小为4096 (4) 日志文件路径及CACHE的目录设置选项 memory_replacement_policy heap GDSF/heap LRU/LRU/heap LFUDA 内存替换策略 heap GDSF:双重大小贪婪法 LRU:默认,最近最少使用算法 heap LFUDA:最近最不常用被老化法 heap LRU:堆LRU cache_replacement_policy heap GDSF/heap LRU/LRU/heap LFUDA 缓存替换策略 cache_dir 类型 路径 大小(M) 一级子目录 二级子目录 系统使用的存储类型 类型: UFS|AUFS,默认使用UFS,AUFS用于非同步的I/O设备 实例:cache_dir ufs /usr/local/squid/cache 25000 16 256 cache_access_log /var/log/squid/access.log access.log日志文件路径 cache_log /var/log/squid/cache.log 缓存日志文件的目录和文件 emulate_httpd_log on/off 激活仿真HTTP格式的日志 mime_table /etc/squid/mime.conf mime文件路径 pid_filename /var/ran/squid.pid 指定pid文件和路径 ftp_user 用户名@域名 指定匿名FTP密码 ftp_list_width 数字 指定FTP列表的文件名长度 ftp_passive on/off 以被动模式(on)/主动模式(off) cache_dns_program /usr/lib/squid/ 指定DNS查询程序路径 编译时指定:--disable-internal-dns option dns_children 数字 指定本地默认启动DNS查询进程数 dns_nameservers IP地址 DNS服务器地址 diskd_program /usr/lib/squid/diskd 磁盘管理程序 unlinkd_program usr/lib/squid/unlinkd 删除文件程序 pinger_program /usr/lib/squid/ ping程序 编译时指定:--enable-icmp option redirect_program none URL重点向程序 redirect_children 数字 重点向进程数 redirect_rewrites_host_heade on/off 重点向时重写包头(用加速器时勿用) authenticate_program 路径 认证程序 例:authenticate_program /usr/bin/ncsa_auth /usr/etc/passwd authenticate_children 数字 认证程序的进程数 authenticate_ttl 数字 hour/minutes/seconds 认证有效时间 authenticate_ip_ttl 对一个IP一次认证后多长时间有效 此时在同一个IP有第二个用户认证会失败 (5) 调整Cache的选项 request_header_max_size 数字(KB) 最大http请求头 request_body_max_size 数字(KB) 最大http请求数据内容 reply_body_max_size 数字(KB) 最大返回数据,可限制用户下载的数据大小 reference_age 数字 LRU算法中指定LRU时间 quick_abort_min 数字(KB) 断点续传最小值 quick_abort_max 数字(KB) 断点续传最大值 quick_abort_pct 数字(percent) 超过值认为续传成功 negative_ttl 数字 minutes/hours/seconds 否定回答TTL positive_dns_ttl 数字 minutes/hours/seconds DNS肯定回答TTL range_offset_limit 数字 KB/MB/Bytes 请求SQUID预取数据的大小 (6) 定义超时的选项 connect_timeout:SQUID等待客户请求的服务器回应的时间长度 peer_connect_timeout:一个对等的缓存服务器的TCP连接超时时间 client_lifetime:客户端同代理服务器TCP连接的最大时间长度 read_timeout:读入数据超时 request_timeout:客户端请求最大时间 shutdown_lifetime:关闭squid缓存时间 (7) 定义超时的选项 acl:定义一个访问列表 格式:acl aclname acltype string 类型:(acltype) • src:源地址 • dst:目标地址 • srcdomain:原(客户)名称 • dstdomain:目标名称 • time:时间 • url_regex[-i]:URL中的正则表达式匹配 • urlpath_regex[-i]:略去协议和主机名的正则表达式 • proxy_auth:通过外部程序进行用户验证 • maxconn:单IP最大连接数 • port:端口 • myip:本地IP • srcdom_regex [-i]:匹配客户名 • dstdom_regex [-i]:匹配目标名 • aclname myport:我的端口 • aclname proto:协议,http,ftp.. • aclname method:方法, GET POST • aclname browser:匹配User-Agent header • aclname ident:用户方用户名 • aclname ident_regex [-i]:匹配用户方用户名 • aclname proxy_auth username:指定合法用户 • 用REQUIRED表示所有合法用户 http_access:代理访问控制 格式:http_access allow|deny [!] acl_name icp_access:icp访问控制 格式:icp_access allow|deny [!]acl_name cache_peer_access:其它缓存服务器访问控制 格式:cache_peer_access cache_host allow|deny [!]acl_name (8) 管理员参数选项 cache_mgr mail地址:管理员电子邮件 cache_effective_user 用户名:运行身份 cache_effective_group 组名:运行组身份 (9) CACHE注册服务选项 announce_period 数字:发布缓存通告频率 announce_host 主机名:通告的主机 announce_file 文件名:通告的信息 announce_port 端口号:通告的对方端口 (10) HTTPD加速选项 httpd_accel_host 主机名/vitual:加速某服务器访问 httpd_accel_port 端口号:加速服务器的对方端口 httpd_accel_single_host on/off:多台服务器时设置off httpd_accel_with_proxy on/off:即作为加速器,又作为WEB缓存服务器,设置为on httpd_accel_uses_host_header on/off:为on,能支持不同的http协议 (11) 杂项 logfile_rotate 0-9:日志轮换版本数 append_domain 域名:默认域名 tcp_recv_bufsize 数字(KB):TCP缓存区大小 err_html_text 字符串:包含在错误消息中的文本 deny_info:禁用时显示消息 格式:deny_info err_page_name acl visible_hostname 主机名 错误消息中显示的服务器名称 error_directory 路径:指定错误消息文件目录 netfilter/iptables常用术语 •表 •链 •规则 ⑴ 表 含义:提供独立的功能,每张表中由若干链组成 种类:FILTER(默认) :包过滤 NAT :地址转换 MANGLE :QOS ⑵ 链 含义:是表的组成部分,细分表的具体功能,每条链由若干条规则构成 种类:INPUT OUTPUT FORWARD POSTROUTING (对出去的数据包进行路由选择) PREROUTING (对进来的数据包进行路由选择) 用户自定义链 注:FILTER : INPUT OUTPUT FORWARD NAT : OUTPUT POSTROUTING PREROUTING MANGLE : PREROUTING OUTPUT INPUT POSTROUTING FORWARD ⑶ 规则 含义:是一种包含条件的判断语句,用于确定如何处理数据包 种类: ACCEPT Drop FORWARD REJECT SNAT DNAT LOG TOS REDIRECT MASQUERRADE a) 各表之间的关系 (12) iptables的使用 a) 安装iptables # rpm –ivh iptables-1.2.7a-3.i386.rpm 相关文件: /etc/rc.d/init.d/iptables (启动脚本) /usr/sbin/iptables (配置工具) /usr/sbin/iptables-save (保存规则到/etc/sysconfig/iptables文件中) /usr/sbin/iptables-restore (恢复/etc/sysconfig/iptables文件中的规则) b) iptables的语法 命令格式: # iptables [-t 表名] 命令 [链] [规则号] [条件] [规则] 说明:⑴ -t 表名 指定规则所在的表。表名可以是 filter ,nat ,mangle (小写) ⑵ 命令 (iptables的子命令) -A 在指定链中添加规则 -D 在指定链中删除指定规则 -R 修改指定链中指定规则 -I 在指定规则前插入规则 -L 显示链中的规则 -N 建立用户链 -F 清空链中的规则 -X 删除用户自定义链 -P 设置链的默认规则 -C 用具体的规则链来检查在规则中的数据包 -h 显示帮助 ⑶ 条件 –i 接口名 指定接收数据包接口 -o 接口名 指定发送数据包接口 -p [!]协议名 指定匹配的协议 (tcp , udp , icmp , all ) -s [!]ip地址 [/mask] 指定匹配的源地址 --sport [!]端口号 [:端口号] 指定匹配的源端口或范围 -d [!]ip地址 [/mask] 指定匹配的目标地址 --dport [!]端口号 [:端口号] 指定匹配的目标端口或范围 --icmp –type [!]类型号/类型名 指定icmp包的类型 注:8 表示request 0 表示relay (应答) -m port --multiport 指定多个匹配端口 limit --limit 指定传输速度 mac --mac-source 指定匹配MAC地址 sate --state NEW,ESTABLISHED,RELATED,INVALID 指定包的状态 注:以上选项用于定义扩展规则 -j 规则 指定规则的处理方法 ⑷ 规则 ACCEPT :接受匹配条件的数据包(应用于I NPUT ,OUTPUT ,FORWARD ) Drop :丢弃匹配的数据包(应用于INPUT ,OUTPUT ,FORWARD ) REJECT :丢弃匹配的数据包且返回确认的数据包 MASQUERADE :伪装数据包的源地址(应用于POSTROUTING且外网地址 为动态地址,作用于NAT ) REDIRECT :包重定向 (作用于NAT表中PREROUTING ,OUTPUT,使用要加上--to-port 端口号 ) TOS : 设置数据包的TOS字段(应用于MANGLE,要加上--set-tos 值) SNAT : 伪装数据包的源地址(应用于NAT表中POSTROUTING链,要加上--to-source ip地址 [ip地址] ) DNAT : 伪装数据包的目标地址(应用于NAT表中PREROUTING链,要加上--to-destination ip地址 ) LOG :使用syslog记录的日志 RETURN :直接跳出当前规则链 c) iptables子命令的使用实例 ⑴ 添加规则 #iptables –A INPUT –p icmp –-icmp-type 8 –s 192.168.0.3 –j Drop (拒绝192.168.0.3主机发送icmp请求) # iptables –A INPUT –p icmp –-icmp-type 8 –s 192.168.0.0/24 –j Drop (拒绝192.168.0.0网段ping 防火墙主机,但允许防火墙主机ping 其他主机) # iptables –A OUTPUT –p icmp –-icmp-type 0 –d 192.168.0.0/24 –j Drop (拒绝防火墙主机向192.168.0.0网段发送icmp应答,等同于上一条指令) # iptables –A FORWARD –d www.sina.com -j Drop (拒绝转发数据包到www.sina.com,前提是www.sina.com必须被解析) # iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j SNAT –-to-source 211.162.11.1 (NAT,伪装内网192.168.0.0网段的的主机地址为外网211.162.11.1,这个公有地址,使内网通过NAT上网,前提是启用了路由转发) # iptables –t nat –A PREROUTING –p tcp --dport 80 –d 211.162.11.1 –j DNAT -–to-destination 192.168.0.5 (把internet上通过80端口访问211.168.11.1的请求伪装到内网192.168.0.5这台WEB服务器,即在iptables中发布WEB服务器,前提是启用路由转发) # iptables –A FORWARD –s 192.168.0.4 –m mac --mac-source 00:E0:4C:45:3A:38 –j ACCEPT (保留IP地址,绑定 IP地址与MAC地址) ⑵删除规则 # iptables –D INPUT 3 # iptables –t nat –D OUTPUT –d 192.168.0.3 –j ACCEPT ⑶插入规则 # iptables –I FORWARD 3 –s 192.168.0.3 –j Drop # iptables –t nat –I POSTROUTING 2 –s 192.168.0.0/24 –j Drop ⑷修改规则 # iptables –R INPUT 1 –s 192.168.0.2 –j Drop ⑸显示规则 # iptables –L (默认表中的所有规则) # iptables –t nat –L POSTROUTING ⑹清空规则 # iptables –F # iptables –t nat –F PREROUTING ⑺设置默认规则 # iptables –P INPUT ACCEPT # iptables –t nat –P OUTPUT Drop (注:默认规则可以设置为拒绝所有数据包通过,然后通过规则使允许的数据包通 过,这种防火墙称为堡垒防火墙,它安全级别高,但不容易实现;也可以把默认 规则设置为允许所有数据包通过,即鱼网防火墙,它的安全级别低,实用性较差。) ⑻建立自定义链 # iptables –N wangkai ⑼删除自定义链 # iptables –X wangkai ⑽应用自定义链 # iptables –A wangkai –s 192.168.0.8 –j Drop # iptables –A INPUT –j wangkai (注:要删除自定义链,必须要确保该链不被引用,而且该链必须为空,如要删除上例定义的自定义链方法为:# iptables –D INPUT –j wangkai # iptables -F wangkai # iptables -X wangkai (13) 启动iptables和保存iptables规则 a) 启动iptables # service iptables start 2. 保存规则 方法一:将规则写入iptables 的启动脚本 #v/etc/rc.d/init.d/iptables 在start()函数中写入要保存的规则 方法二:将规则写入一个自定义的脚本,再把该脚本放如rc.local中,要注意的是建立脚本是要输入iptables的绝对路径:/sbin/iptables 方法三:# service iptables save (将内存中的规则保存到/etc/sysconfig/iptables中,重启系统时,iptables的启动脚本会利用iptables-restore 来恢复该文件中的规则) 方法四:# iptables-save>/etc/sysconfig/iptables (该命令等同与上一条命令) (14) 配置案例 要求:•设置防火墙主机能够给局域网中的主机动态分配IP地址 •设置防火墙主机具有SNAT功能,代理内网中的主机接入Internet •设置防火墙主机拒绝icmp 数据包 •设置防火墙主机发布内网中的Web服务器和FTP服务器 •设置防火墙主机禁止内网主机访问www.QQ.com; 配置过程: 1. DHCP服务的配置 ⑴ # rpm –ivh dhcpd-3.11pl.i386.rpm ⑵ # vi /etc/dhcpd.conf ddns-update-style none; ignore client-updates; default-lease-time 3600; max-lease-time 7200; subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.1; options domain-name-servers 202.162.38.254; range 192.168.0.4 192.168.0.254; } ⑶ # vi /etc/sysconfig/dhcpd DHCPDARGS =eth0 ⑷ # service dhcpd start 2. 启用防火墙主机的路由转发功能 # vi /etc/rc.d/rc.local echo “1” >/proc/sys/net/ipv4/ip_forward 3. 配置iptables ⑴ # rpm –ivh iptables-1.2.7a-3.i386.rpm ⑵ # service iptables start ⑶ # iptables –F # iptables –t nat –F # iptables –t mangle –F # iptables –P INPUT Drop # iptables –P OUTPUT Drop # iptables –P FORWARD Drop # iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j SNAT -–to-source 202.162.39.1 # iptables –A FORWARD –s 192.168.0.0/24 –m state –state NEW –j ACCEPT # iptables –A FORWARD–m state –state ESTABLISHED,RELATED –j ACCEPT # iptables –t nat –A PREROUTING –d 202.162.39.1 –p tcp -–dport 80 –j DNAT --to-destination 192.168.0.2 # iptables –t nat –A PREROUTING –d 202.162.39.1 –p tcp -–dport 21 –j DNAT --to-destination 192.168.0.3 # iptables –I FORWARD –s 192.168.0.0/24 –d www.QQ.com -j Drop (4) # service iptables save |