转自:http://hi.baidu.com/owee/blog/item/53e74889355c53b20f24445d.html
文章写的很好!值得推荐!
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 |