当前位置: > Linux服务器 >

用Linux的iptables做代理服务器和防火墙配置详细介绍(2)

时间:2014-05-17 11:45来源:linux.it.net.cn 作者:IT网


    5.缓存代理squid
    1) 安装包
    squid-2.5.STABLE1-2
    2) 主要配置文件
    /etc/squid/squid.conf
    内容:
    http_port:指定了squid监听客户请求的端口,默认值是3128。要使用代理,建议这个端口值和运行squid的机器ip地址一起使用;
    举例:http_port 192.168.0.2:3128
    说明:squid绑定在ip地址192.168.0.2上,端口为3128。
    cache_mgr:当代理页面发生错误时,代理服务器将向这个配置项登记的用户发送邮件消息,将它配置为管理员的实际邮件地址;
    举例:cache_mgr shuke@shuke.com
    说明:当代理页面发生错误,给shuke@shuke.com发送消息。
    http_access:允许HTTP访问,这个是主要的访问控制列表。默认拒绝所有的访问。
    举例:http_access allow all
    说明:接受所有访问。
    cache_dir:定义磁盘缓存空间,以存储访问过的页面或其他资源的拷贝。
    格式:cache_dir Type Directory-Name Fs-specific-data [options]
    说明:
    Type:存储类型,一般设置为ufs;
    Directory-Name:代表缓存的位置,默认的设置是cache_dir ufs /var/spool/squid 100 16 256,其中,100代表缓存空间最大为100M;16到256代表缓存目录下的一级和二级目录数目。
    启动命令:/etc/rc.d/init.d/squid start
    客户端需要进行的设置:
    IE浏览器选项-局域网设置-选中代理服务器和对本地地址不使用代理服务器,填写代理的IP地址和端口号。
    3) squid.conf的13个配置选项:
    NETWORK OPTIONS (有关的网络选项) :
    OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居选择算法的有关选项) :
    OPTIONS WHICH AFFECT THE CACHE SIZE (定义cache大小的有关选项):
    LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径及cache的目录)
    OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)
    OPTIONS FOR TUNING THE CACHE (调整cache的选项)
    TIMEOUTS (超时)
    ACCESS CONTROLS (访问控制)
    ADMINISTRATIVE PARAMETERS (管理参数)
    OPTIONS FOR THE CACHE REGISTRATION SERVICE (cache注册服务选项)
    HTTPD-ACCELERATOR OPTIONS (HTTPD加速选项)
    MISCELLANEOUS (杂项)
    DELAY POOL PARAMETERS (延时池参数)
    网络选项:
    tcp_incoming_address指定监听来自客户或其他squid代理服务器的绑定ip地址;
    tcp_outgoing_address指定向远程服务器或其他squid代理服务器发起连接的ip地址
    udp_incoming_address为ICP套接字指定接收来自其他squid代理服务器的包的ip地址 udp_outgoing_address为ICP套接字指定向其他squid代理服务器发送包的ip地址;
    缺省为没有绑定任何ip地址。该绑定地址可以用ip指定,也可以用完整的域名指定。
    交换空间设定选项:
    cache_swap_low (percent, 0-100)
    cache_swap_high (percent, 0-100)
    说明:squid使用大量的交换空间来存储对象。那么,过了一定的时间以后,该交换空间就会用完,所以还必须定期的按照某种指标来将低于某个水平线的对象清除。squid使用所谓的“最近最少使用算法”(LRU)来做这一工作。当已使用的交换空间达到cache_swap_high时,squid就根据LRU所计算的得到每个对象的值将低于某个水平线的对象清除。这种清除工作一直进行直到已用空间达到cache_swap_low。这两个值用百分比表示,如果你所使用的交换空间很大的话,建议你减少这两个值得差距,因为这时一个百分点就可能是几百兆空间,这势必影响squid的性能。缺省为:
    cache_swap_low 90
    cache_swap_high 95
    maximum_object_size
    说明:大于该值得对象将不被存储。如果你想要提高访问速度,就请降低该值;如果你想最大限度地节约带宽,降低成本,请增加该值。单位为K,缺省值为:
    maximum_object_size 4096 KB
    有关日志的选项:
    cache_access_log:
    说明:指定客户请求记录日志的完整路径(包括文件的名称及所在的目录),该请求可以是来自一般用户的HTTP请求或来自邻居的ICP请求。缺省值为:cache_access_log /var/log/squid/access.log,如果你不需要该日志,可以用以下语句取消:cache_access_log none;
    cache_store_log
    说明:指定对象存储记录日志的完整路径(包括文件的名称及所在的目录)。该记录表明哪些对象被写到交换空间,哪些对象被从交换空间清除。缺省路径为:cache_log /var/log/squid/cache.log,如果你不需要该日志,可以用以下语句取消:cache_store_log none;
    cache_log:
    说明:指定squid一般信息日志的完整路径(包括文件的名称及所在的目录)。缺省路径为:cache_log /var/log/squid/cache.log;
    cache_swap_log:
    说明:该选项指明每个交换空间的“swap.log”日志的完整路径(包括文件的名称及所在的目录)。该日志文件包含了存储在交换空间里的对象的元数据(metadata)。通常,系统将该文件自动保存在第一个“cache_dir”说定义的顶级目录里,但是你也可以指定其他的路径。如果你定义了多个“cache_dir”,则相应的日志文件可能是这样的:
    cache_swap_log.00
    cache_swap_log.01
    cache_swap_log.02
    后面的数字扩展名与指定的多个“cache_dir”一一对应。需要注意的是,最好不要删除这类日志文件,否则squid将不能正常工作;
    pid_filename:
    说明:指定记录squid进程号的日志的完整路径(包括文件的名称及所在的目录)。缺省路径为
    pid_filename /var/run/squid.pid,如果你不需要该文件,可以用以下语句取消:pid_filename none;
    debug_options:
    说明:控制作日志时记录信息的多寡。可以从两个方面控制:section控制从几个方面作记录;level控制每个方面的记录的详细程度。推荐的方式(也是缺省方式)是:debug_options ALL,1,即,对每个方面都作记录,但详细程度为1(最低);
    log_fqdn on|off:
    说明:控制在 access.log 中对用户地址的记录方式。打开该选项时,squid记录客户的完整域名,取消该选项时,squid记录客户的ip地址。注意,如果打开该选项会增加系统的负担,因为squid还得进行客户ip的DNS查询。缺省值为:log_fqdn off。
    有关外部支持程序的选项:
    ftp_user:
    说明:设置登录匿名ftp服务器时的提供的电子邮件地址,登录匿名ftp服务器时要求用你的电子邮件地址作为登录口令(更多的信息请参看本书的相关章节)。需要注意的是,有的匿名ftp服务器对这一点要求很苛刻,有的甚至会检查你的电子邮件的有效性。缺省值为:ftp_user Squid@;
    ftp_list_width:
    说明:设置ftp列表的宽度,如果设得太小将不能的浏览到长文件名。缺省值为:ftp_list_width 32;
    cache_dns_program:
    说明:指定DNS查询程序的完整路径(包括文件的名称及所在的目录)。缺省路径为:cache_dns_program /usr/lib/squid/dnsserver;
    dns_children:
    说明:设置DNS查询程序的进程数。对于大型的登录服务器系统,建议该值至少为 10。最大值可以是32,缺省设置为5个。注意,如果你任意的降低该值,可能会使系统性能急剧降低,因为squid主进程要等待域名查询的结果。没有必要减少该值,因为DNS查询进程并不会消耗太多的系统的资源;
    dns_nameservers:
    说明:指定一个DNS服务器列表,强制squid使用该列表中的DNS服务器而非使用/etc/resolv.conf文件中定义的DNS服务器。你可以这样指定多个DNS服务器:dns_nameservers 10.0.0.1 192.172.0.4
    缺省设置为:dns_nameservers none;
    unlinkd_program:
    说明:指定文件删除进程的完整路径。缺省设置为:unlinkd_program /usr/lib/squid/unlinkd;
    pinger_program:
    说明:指定ping进程的完整路径。该进程被squid利用来测量与其他邻居的路由距离。该选项只在你启用了该功能时有用。缺省为:pinger_program /usr/lib/squid/pinger;
    authenticate_program:
    说明:指定用来进行用户认证的外部程序的完整路径。squid的用户认证功能我们将在后面的章节讲述。缺省设置为不认证。
    用户访问控制选项:
    acl:
    说明:定义访问控制列表。
    定义语法为:
    acl aclname acltype string1 …
    acl aclname acltype "file" …
    当使用文件时,该文件的格式为每行包含一个条目。
    acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user 中的一种。
    分别说明如下:
    src 指明源地址。可以用以下的方法指定:
    acl aclname src ip-address/netmask … (客户ip地址)
    acl aclname src addr1-addr2/netmask … (地址范围)
    dst 指明目标地址。语法为:
    acl aclname dst ip-address/netmask … (即客户请求的服务器的ip地址)
    srcdomain 指明客户所属的域。语法为:
    acl aclname srcdomain foo.com … squid将根据客户ip反向查询DNS。
    dstdomain 指明请求服务器所属的域。语法为:
    acl aclname dstdomain foo.com … 由客户请求的URL决定。
    注意,如果用户使用服务器ip而非完整的域名时,squid将进行反向的DNS解析来确 定其完整域名,如果失败就记录为“none”。
    time 指明访问时间。语法如下:
    acl aclname time [day-abbrevs] [h1:m1-h2][hh:mm-hh]
    day-abbrevs:
    S - Sunday
    M - Monday
    T - Tuesday
    W - Wednesday
    H - Thursday
    F - Friday
    A - Saturday
    h1:m1 必须小于 h2:m2,表达示为[hh:mm-hh]。
    port 指定访问端口。可以指定多个端口,比如:
    acl aclname port 80 70 21 …
    acl aclname port 0-1024 … (指定一个端口范围)
    proto 指定使用协议。可以指定多个协议:
    acl aclname proto HTTP FTP …
    method 指定请求方法。比如:
    acl aclname method GET POST …
    各类超时设置选项:
    negative_ttl time-units:
    说明:设置消极存储对象的生存时间。所谓的消极存储对象,就是诸如“连接失败”及"404 Not Found"等一类错误信息。缺省设置为5分钟;
    举例:negative_ttl 5 minutes
    positive_dns_ttl time-units:
    说明:设置缓存成功的DNS查询结果的生存时间。缺省为6小时;
    举例:positive_dns_ttl 6 hours
    negative_dns_ttl time-units:
    说明:设置缓存失败的DNS查询结果的生存时间。缺省为5分钟;
    举例:negative_dns_ttl 5 minutes
    connect_timeout time-units:
    说明:设置squid等待连接完成的超时值。缺省值为2分钟;
    举例:connect_timeout 120 seconds
    read_timeout time-units:
    说明:如果在指定的时间内squid尚未从被请求的服务器读入任何数据,则squid将终止该客户请求。缺省值为15分钟;
    举例:read_timeout 15 minutes
    request_timeout:
    说明:设置在建立与客户的连接后,squid将花多长时间等待客户发出HTTP请求。缺省值为30秒。
    举例:request_timeout 30 seconds;
    clIEnt_lifetime time-units:
    说明:设置客户在与squid建立连接后,可以将该连接保持多长时间;
    注意,因为客户建立的每个连接都会消耗一定的系统资源,所以如果你是为一个大型网络 提供代理服务的话,一定要正确地修改该值。因为如果同一时间的连接数量太大的话,可能会消耗大量的系统资源,从而导致服务器宕机。缺省值为1天,该值太大了,建议根据你自己的情况适当减小该值。
    举例:clIEnt_lifetime 1 day
    half_closed_clIEnts on/off:
    说明:有时候由于用户的不正常操作,可能会使与squid的TCP连接处于半关闭状态,这时候,该TCP连接的发送端已经关闭,而接收端正常工作。缺省地,squid将一直保持这种处于半关闭状态的TCP连接,直到返回套接字的读写错误才将其关闭。如果将该值设为off,则一旦从客户端返回“no more data to read”的信息,squid就立即关闭该连接;
    举例:half_closed_clIEnts on
    pconn_timeout:
    说明:设置squid在与其他服务器和代理建立连接后,该连接闲置多长时间后被关闭。缺省值为120秒;
    举例:pconn_timeout 120 seconds
    ident_timeout:
    说明:设置squid等待用户认证请求的时间。缺省值为10秒;
    举例:ident_timeout 10 seconds
    shutdown_lifetime time-units:
    说明:当收到SIGTERM 或者 SIGHUP 信号后, squid将进入一种shutdown pending的模式,等待所有活动的套接字关闭。在过了shutdown_lifetime所定义的时间后,所有活动的用户都将收到一个超时信息。缺省值为30秒;
    举例:shutdown_lifetime 30 seconds
    管理参数选项:
    cache_mgr:
    说明:设置管理员邮件地址。缺省为管理员;
    举例:cache_mgr root
    cache_effective_user / cache_effective_group:
    说明:如果用root启动squid,squid将变成这两条语句指定的用户和用户组。缺省变为squid用户和squid用户组。注意这里指定的用户和用户组必须真是存在于/etc/passwd中。如果用非root帐号启动 squid,则squid将保持改用户及用户组运行,这时候,你不能指定小于1024地http_port;
    举例:
    cache_effective_user squid
    cache_effective_group squid
    visible_hostname:
    说明:定义在返回给用户的出错信息中的主机名;
    举例:visible_hostname www-cache.foo.org
    unique_hostname:
    说明:如果你有一个代理服务器阵列,并且你为每个代理服务器指定了同样的“visible_hostname”,同时你必须为它们指定不同的“unique_hostname”来避免“forwarding loops ”(传输循环)发生。
    其它杂项:
    1. dns_testnames
    说明:设置进行DNS查询测试,如果第一个站点解析成功则立即结束DNS查询测试。如果你不愿意进行DNS查询测试,就不要去掉缺省的设置;
    举例:#dns_testnames netscape.com internic.net nlanr.net microsoft.com
    logfile_rotate:
    说明:通常,squid会定期的将日志文件更名并打包。比如正在使用的日志文件为 access.log,squid会将其更名并打包为access.log.1.gz;过了一定时间后,squid又会将access.log.1.gz 更名为access.log.2.gz并将当前的日志文件更名并打包为access.log.1.gz,以此循环。logfile_rotate所指定的数字即为打包并备份的文件的数量,当达到这一数目时,squid将删除最老的备份文件。缺省值为10。如果你想手动来进行这些操作,你可以用 logfile_rotate 0来取消自动操作;
    err_html_text:
    说明:用该语句定义一个字符串变量,可以用%L在返回给用户的错误信息文件中引用。错误信息文件通常在/etc/squid/errors目录中,这是一些用HTML写成的脚本文件,你可以自己修改它;
    deny_info:
    说明:你可以定制自定义的拒绝访问信息文件,并且可以和不同的用户列表相关联。当用户被http_access相关规则拒绝时,squid可以向用户显示你自定义的相应的拒绝访问信息文件;
    举例:
    Usage: deny_info err_page_name acl
    比如:
    deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys
    memory_pools on|off:
    说明:如果你将该项设为on,则squid将保留所有已经分配(但是未使用)的内存池以便在将来使用。缺省为on;
    举例:memory_pools on
    log_icp_querIEs on|off:
    说明:设置是否对ICP请求作日志。如果你的系统负载很大,你可以用off来取消该功能;
    举例:log_icp_querIEs on
    always_direct:
    说明:该选项允许你指定某些用户类,squid将这些用户类的请求直接转发给被请求的服务器;
    举例:
    always_direct allow|deny [!]aclname …
    如:直接转发FTP请求可以这样设置:
    acl FTP proto FTP
    always_direct allow FTP
    never_direct
    说明:与always_direct相反;
    举例:
    Usage: never_direct allow|deny [!]aclname …
    比如,为了强制除了本地域的其他用户使用代理服务器,你可以这样设置:
    acl local-servers dstdomain foo.net
    acl all src 0.0.0.0/0.0.0.0
    never_direct deny local-servers
    never_direct allow all
    icon_directory:
    说明:指明向用户传送错误信息时所用到的图标文件的目录;
    举例:icon_directory /usr/lib/squid/icons
    error_directory:
    说明:指明向用户传送错误信息所用到的错误描述文件的目录。
    举例:error_directory /etc/squid/errors
    5.透明代理的设置
    编辑/etc/squid/squid.conf,修改参数如下:
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on
    运行/etc/rc.d/init.d/squid reload使设置生效,然后,使用iptables工具添加两条端口转向和网络地址转换规则:
    iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
    这条命令将把所有局域网用户通过linux接入服务器访问WWW服务的访问请求,重定向到工作在3128端口的squid处理;
    iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 166.32.129.10
    这条命令是把所有来自192.168.1.0网段,并且将要从eth0网络接口(即internet连接)发出的数据包的源地址,更改为这个代理服务器所设置的外部IP地址166.32.129.10。
    设置完毕,在局域网内的用户,将计算机的网关更改为192.168.1.2,则可以获得透明代理的服务了。 (责任编辑:IT)
------分隔线----------------------------