软件环境:squid3.0+iptables
实现网络的透明代理与反向代理
第一、安装
    低于3.0的包,与现在目前的有很多参数不一样。
    yum -y install squid
源码:
    1、调整内核参数(这是临时性的,若要永久生效,可以写在rc.local文件中)
    ulimit -n 显示
    ulimit -HSn 8192 (改变用户打开8192个文件)
    vim /etc/sysctl.conf(改变端口号的范围)
    net.ipv4.ip_local_port_range=1024 61000
    net.ipv4.ip_forward=1    (打开转发功能)
    sysctl -p
    2、安装源码包
    解压到/usr/src下,进入相关目录,进行配置编译安装。
/usr/local/squid/var/   <---存放日志文件,磁盘缓存文件,需要占用大量的磁盘空间。 --localdir=dir安装参数
--enable-async-io  <---异部比同步快很多,是采用多线程工作,一般设置为120就可以了。缓存文件存取的机制。
--enable-delay-pools <--限制带宽支持
--enable-useragent-log  <--记录浏览器的相关信息
--enable-referer-log    <--引用日志
--disable-wccp  --disable-wccpv2 <---一些关于路由器信息
--enable-snmp|| --disable-snmp <---便于监控服务器
--enable-arp-acl <---可以利用MAC地址进行限制
--enable-htcp <---多台squid服务器之间进行沟通
--enable-ssl    <---支持安装套接字的代理
--enable-basic-auth-helpers="NCSA,multi-domain-NTLM,PAM"   在上网代理的时候验证
--enable-auth=ntlm,basic
--with-large-files   <--大文件的支持,如果日志文件超过2G,那么可能挂掉,若启用了这项,则不会,但不建议无限制的增大。
--enable-default-err-language="Simaplify_Chinese"
--enable-linux-tproxy  <--加此参数,在正常启动的时候不会报一个透明代理不支持的警告(不加,不影响运行)
./configure --enable-async-io=120 --enable-delay-pools --enable-useragent-log --enable-referer-log --disable-wccp --disable-wccpv2  --enable-snmp --enable-arp-acl --enable-htcp --enable-ssl  --with-large-files --enable-default-err-language="Simplify_Chinese" --enable-basic-auth-helpers="NCSA,multi-domain-NTLM,PAM"  --enable-auth=ntlm,basic --enable-linux-tproxy
    3、正向代理
    打开路由转发
    编辑配置文件(rpm):/etc/squid/squid.conf
    源码包:/usr/local/squid/etc/squid.conf
    http_port 3128 || http_port 172.16.7.6:3128
    cache_mem 8 MB,若专门做代理服务器,没有其他服务,那么可以设置成内存的一半以上,如果有其他的服务,那么不要超过物理内存的1/3。
    cache_dir ufs /usr/local/squid/var/cache 100 16 256(缓存的空间,第一个单位为M,建议使用一个大一点的分区,来区分开。16在cache下生成16个文件夹,在其他再建立256文件夹)
     cache_store_log /usr/local/squid/var/logs/store.log 记录缓存了哪些网站
    access_log /usr/local/squid/var/logs/access.log squid(3.0以前的版本参数为cache_access_log,这个参数是指定存放记录客户端的访问记录的日志文件路径,squid是表示写日志时用什么样的身份进行写入)
    cache_effective_user squid,(日志文件的所有者指定,且要为/usr/local/squid/var/logs/指定本拥有者)
    cache_effective_group squid(组身份)
    dns_nameservers 172.16.7.6 10.1.1.141(指定代理服务在解析的时候,用的DNS服务器地址,如果是上公网,一定设置一个公网的IP地址)
    visible_hostname station8.uplooking.com(主机名需写到/etc/hosts和/etc/sysconfig/network中,这样才可以确切定位)
    http_access allow all(应用规则,在582行加入,这样比较集中)
    4、第一次运行squid必须初始化缓存目录,并确保缓存目录的权限
    /usr/local/squid/sbin/squid -zX(创建缓存初始化)
    手工创建缓存目录:mkdir /usr/local/squid/var/cache
            useradd -s /sbin/nologin squid
            chown -R squid:squid /usr/local/squid/var/cache(给缓存目录和日志目录的权限squid用户)
    5、运行
    /usr/local/squid/sbin/squid -N -d1 (-N运行在前台,-d1把错误信息输出到屏幕)
---------------------------------------------------------------------------------------------------------   
透明代理
    1.透明代理要设置路由转发:echo "1" > /proc/sys/net/ipv4/ip_forward
    vim /etc/sysctl.conf    net.ipv4.ip_forwared = 1
    iptables -t nat -A POSTROUTING -p tcp --dport 80 -s 172.16.7.0/24 -o eth1 -j SNAT --to-source 10.1.1.86
    iptables -t nat -A POSTROUTING -p tcp --dport 53 -s 172.16.7.0/24 -o eth1 -j SNAT --to-source 10.1.1.86
    iptables -t nat -A POSTROUTING -p tcp --dport 53 -s 172.16.7.0/24 -o eth1 -j SNAT --to-source 10.1.1.86
    iptables -t nat -A POSTROUTING -p tcp -s 172.16.7.0/24 -j DROP
    设定squid服务器与DNS,由于squid开放了DNS请求,因此可以指定一个外网的DNS服务器。
    2.结合squid做透明代理,增加强大的过滤功能以及缓存功能。
    iptables -t nat -A PRETOUTING -i eth0 -s 172.16.7.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128(将以前的80端口转发给3128squid服务器来处理)
    3.配置squid服务器
    在3.0的版本上只需要更改以下设置即可:http_port 3128 transparent
    在3.0版本以下的需要更改的设置:http_port 3128
                httpd_accel_port 80
                httpd_accel_host virtual
                httpd_accel_with_proxy on
                httpd_accel_uses_host_header on
------------------------------------------------------------------------------------------------------------
访问控制列表
    1.定义acl规则:
        acl rule_name
    2.应用acl规则:
        http_access deny|allow rule_name[ rule2 rule3]
-----------------------------------------------------------------
针对以下内容定义规则:
    acl lunch_time time MTWHF 12:00-13:30
    acl class_off  time MTWHF 17:00-20:00
    acl bad_post urlpath_regex -i \.exe$ \.rar$ \.rm$ \.rmvb$ \.avi$ \.mp3$
    acl bad_site url_regex -i sex sexy movie news sport
    acl weeken time SA 00:00-23:59
    acl vip arp 00:1E:90:E5:78:38
    acl bad_list dstdoman "/usr/local/squid/etc/bad_list"
    >>>>>>>>>>>>>>>>>>
    vim /usr/local/squid/etc/bad_list
    .youku.com
    .qq.com
    .mop.com
    .163.com
    <<<<<<<<<<<<<<<<<<
针对以下定义的规则,合理放置:
    http_access allow vip
    http_access deny bad_post
    http_access deny bad_site
    http_access deny bad_list
    http_access allow all lunch_time
    http_access allow all class_off
    http_access allow all weeken
    http_access deny all
        3.只允许在中午休息时间上网:周一至周五中午12:00-13:30分
    4.只允许下午休息时间上网:周一至周五17:00-20:00
    5.禁止下载附件.exe .rar .rm .rmvb .avi .mp3 .mp4
    6.禁止访问网址中包含如下关键字:sex sexy movie news sport
    7.周末全天候开放上网时间,限制依旧。
    8.VIP无限制上网(使用MAC地址过滤)
    9.在黑名单的网站不允许访问.youku.com .mop.com .qq.com
--------------------------------------------------------------------------------------------
3.0反向代理
    F5调度是在IP网络层
    vim /usr/local/squid/etc/squid.conf
    http_access allow all
    http_port 80 vhost vport(设置侦听的端口)
    cache_peer 192.168.1.2 parent 80 0 no-query originserver name=web(局域网真实的WEB服务器,后面跟的是工作端口,0是否打开ICP-port端口,squid与squid通过ICP-port协议来进行共享缓存)
    cache_peer_domain web www.upl.com(2.6不存在此参数)
-----------------------------------------------------------   
3.0以前的版本配置反向代理
http_port 80 <--- squid本身监听的端口
httpd_accel_port 80 <---原来的真实web监听的端口
httpd_accel_host 10.1.1.20   <---原来的真实web的ip地址
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
真实web服务器的需要配置网关:
route add default gw 10.1.1.21
在没有配置DNS的情况下测试
在squid服务器上添加记录
# vim /etc/hosts
10.1.1.20 www.upl.com
在测试的客户端机器上也必须写一条
# vim /etc/hosts
192.168.20.2 www.upl.com
squid -z生成
/sbin/squid -k reconfig(重新启动)
---------------------------------------------------
Squid安装设试命令:
1,初始化你在 squid.conf 里配置的 cache 目录
#/usr/local/squid/sbin/squid -z     //初始化缓存空间
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#/usr/local/squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,在前台启动squid,并输出启动过程。
#/usr/local/squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4,启动squid在后台运行。
#/usr/local/squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
5,停止 squid
#/usr/local/squid/sbin/squid -k shutdown
这个不用解释吧。
6,重引导修改过的 squid.conf
#/usr/local/squid/sbin/squid -k reconfigure //载入新的配置文件
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7./usr/local/squid/sbin/squid -k rotate 轮循日志
8,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s