读书人

Squid 反向代理服务器装配笔记

发布时间: 2012-06-26 10:04:13 作者: rapoo

Squid 反向代理服务器安装笔记

1.安装前准备
设置网卡
?外网网卡:eth0
?ip:60.190.212.114
?网关:60.190.212.113
?子网掩码:255.255.255.0
?dns:202.96.107.28
?202.96.107.29

内网网卡:eth1
?ip:192.168.0.10

激活网卡:
?# vi /etc/sysconfig/network-script/ifcfg-eth0
?ONBOOT=yes? 修改no 为yes 即可激活

删除已装软件
?rpm -q squid
?rpm -e squid --nodeps

修改hostname
?# hostname 查看主机名
?# hostname squid.localhost
?vi /etc/sysconfig/network
?vi /etc/hosts
?在以上2个文件中修改相应主机名
?然后
?# ping squid.localhost
?显示为 127.0.0.1 为正常

下载软件到 /usr/local/src/ 文件夹下
?wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz

2.开始安装
解压软件
?# cd /usr/local/src/
?# tar zxvf squid-3.0.STABLE13.tar.gz
?cd squid-3.0.STABLE13
?
安装配置
?./configure --prefix=/usr/local/squid --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-pthreads --enable-err-language="Simplify_Chinese" --enable-default-err-language="Simplify_Chinese" --enable-underscores --disable-internal-dns --enable-pf-transparent --enable-referer-log

开始安装
?# make && make install

3.开始配置squid
添加 squid 用户
?# useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin

新建一个用于运行squid的用户和组:
?#groupadd squid
?#useradd g squid s /sbin/nologin squid
修改/usr/local/squid3/var/目录的属主和属组为squid
?#chown squid:squid /usr/local/squid/var/


修改 squid.conf
?# cd /usr/local/squid/etc/
?# vim squid.conf

????? ????http_port? 设定Squid的代理端口和开启透明代理(加上IP地址,squid就不会监听外部的网络接口)
??? -->?http_port 3128 transparent vhost vport

???????? cache_mem 8 MB 共享内存大小(squid在提供服务的时候所使用的内存)
??? -->?cache_mem 128 MB?

????????? maximum_object_size_in_memory 8 KB (最大缓存文件大小,超过此值则不缓存)
???? -->?maximum_object_size_in_memory 512 KB

?????????? memory_replacement_policy 替换机制(lru叫做 最近不常用的单元 unit一般就是常说的 object 也就是当cache中的内容比如内存或硬盘达到上限时的 那么就需要进行数据的换进和换出工作)
???? -->?memory_replacement_policy lru

?????????? cache_dir ufs /usr/local/squid3/var/cache 10000 16 256 (/tmp size L1 L2)? 这里的10000是10000MB为10G
??100G其中1层目录16个,并且每个1层目录下又有256个2层目录[或者说子目录]
??#磁盘缓存的类型和目录,大小,一二级目录的设置,这里磁盘缓存大小是10G
??ufs? 是一种文件存储方式,因为os一般都是从内存获取数据 那么内存的东西必须最后写的硬盘上~
??sync 同步的时候用的ufs,那么squid也是一样
??ufs? 一般是同时写入内存和硬盘
??注意:size是按照MB为单位的也就这个目录中最大存储容量的上限
??????? -->?cache_dir ufs /tmp1 10000 16 256

????????????? max_open_disk_fds 0
??????? -->?max_open_disk_fds 0

????????????? minimum_object_size 0 KB
???????? -->?minimum_object_size 0 KB

?????????????? maximum_object_size 4096 KB 大于此容量的对象将不会保存到磁盘上,默认设置为4MB,过大的文件在下次重启后需要重新获取
?????????-->?maximum_object_size 10 MB

?????????????? maximum_object_size_in_memory 最大位于内存对象的大小,默认大小8K,依服务器内存大小来定
?????????-->?maximum_object_size_in_memory 2 MB

?????????????? reply_body_max_size 10240000 allow all?//禁止下载超过10M的文件
?????????-->?reply_body_max_size 10240000 allow all

?????????????? dns_nameservers 172.16.0.2 //使用内部DNS(可以不用设置)

?????????????? logformat squid? 设置access_log中日志存储的格式~
?????????-->?logformat squid? %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

?????????????? access_log 客户端请求的日志
?????????-->?access_log /usr/local/squid3/var/logs/access.log squid 

?????????????? cache_log? squid自身的运行日志??
?????????-->?cache_log /usr/local/squid3/var/logs/cache.log  

?????????????? pid_filename 此三项是设置PID和日志文件位置
?????????-->?pid_filename /usr/local/squid3/var/logs/squid.pid

?????????????? cache_store_log none? 不记录store.log? 我配置的是可以允许
?????????-->?cache_store_log none

?????????????? visible_hostname squid.localhost 只是标签? 有利于检查是否你的那台设备在提供服务!这里填写的是当前服务器的主机名 hostname
??????? ?-->?visible_hostname squid.localhost

?????????????? cache_effective_user squid 设定用于运行squid的帐户
?????????-->?cache_effective_user squid

?????????????? cache_effective_group squid 设定用于运行squid的组
?????????-->?cache_effective_group squid

?????????????? acl QUERY urlpath_regex cgi-bin .php .jsp .asp .aspx .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe 将这些后缀名的文件不进行缓存
?????????-->?acl QUERY urlpath_regex cgi-bin .php .jsp .asp .aspx .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe

???????? cache deny QUERY 将此行添加在 acl QUERY urlpath_regex cgi-bin .php .jsp .asp .aspx .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe的下面
?????????-->?cache deny QUERY

???????? http_access

??基本上的 deny all 都修改成 allow all
??修改 acl
??????? our_networks
??????? cache_peer newtest.haishang.com parent 80 0 no-query round-robin max-conn=32 originserver

验证squid.conf的语法和配置
??????? # /usr/local/squid/sbin/squid k parse
初始化cache目录,在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录。
??????? # /usr/local/squid/sbin/squid z
前台启动squid,查看是否报错:
?????? #/usr/local/squid3/sbin/squid N d1
?????? …
?????? …
?????? …
?????? 2010/07/06 05:42:44| Ready to serve requests.
?????? …
?????? …
?????? 看到有上面那句就可以试着启动squid了

?????? 透明代理设置(eth0是外部网卡,eth1是内部网卡)
?????? Squid要使用透明代理功能的话,在配置安装时必须在加上
?????? --enable-linux-netfilter这个选项,还必须要开启内核的路由转发功能(前面已经有开启)
配置iptables
把80端口的包全部转向3128端口:
?????? # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
?
动态地址转换:
?????? # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
保存iptables:
?????? # service iptables save
重启iptables:
?????? # service iptables restart
透明代理中一定要把客户端的网关设置成squid的内部网卡IP,否则无法正常代理
客户端还需要设置一个有效的DNS,普通代理则不需要


设置开机启动
????? # vi /etc/rc.d/rc.local
?添加以下行
????? /usr/local/squid/sbin/squid s
????? iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
????? iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
????? service iptables save
????? service iptables restart

3.Squid语法
?1、启动squid服务:
?#/usr/local/squid/sbin/squid s
?2、停止squid服务
?#/usr/loca/squid/sbin/squid k shutdown
?3、Squid用法帮助信息
?#/usr/local/squid/sbin/squid h
?4、在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录
?#/usr/local/squid/sbin/squid z
?5、重配置运行中的squid最好的方法是使用squid k reconfigure命令
?#/usr/local/squid/sbin/squid k reconfigure
?6、周期性的滚动日志文件,以阻止它们变得太大
?#/usr/local/squid/sbin/squid k rotate
?7、在前台启动squid,并输出启动过程
?#/usr/local/squid/sbin/squid N d1
?8、可以根据这个测试命令来验证squid.conf的语法和配置
?#/usr/local/squid/sbin/squid k parse

4.Squid优化
?1、日志周期性滚动:(在每月每周每天的4点执行日志周期性滚动)
?0 4 * * * /usr/local/squid3/sbin/squid k rotate &
?2、Log目录周期性检查:
?0 4 * * 6 /usr/local/squid3/movelog.sh &
?脚本内容如下:movelog.sh
?#!/bin/bash
?SLOG=`du sh /usr/local/squid3/var/logs/ | awk ‘{print $1}’ | awk F ‘.’ ‘{print $1}’`
?if [ $SLOG gt 100 ];then
?if [ ! d /var/log/squid ];then
?mkdir /var/log/squid
?else
?mv /usr/local/squid3/var/logs/ /var/log/squid
?echo “move squid log to /var/logs” | mail s liuyaof@fuch.net
?fi
?else
?echo “The size of /usr/local/squid3/var/logs/ is `du sh /usr/local/squid3/var/logs/ | awk ‘{print $1}’ | awk F ‘M’ ‘{print $1}’`”
?fi
?3、cache周期性优化
?0 4 * * * /usr/local/squid3/clear_squid_cache.sh gif &
?0 4 * * * /usr/local/squid3/clear_squid_cache.sh swf &
?0 4 * * * /usr/local/squid3/clear_squid_cache.sh gif &
?脚本内容如下:
?#cat clear_squid_cache.sh
?#!/bin/bash
squidcache_path="/usr/local/squid3/var/cache"
squidclient_path="/usr/local/squid3/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' | grep [a-zA-Z0-9]$ > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 3128 $url
Done
+++++++++++++++++++++++++++++++++++++++++++++++
?Squid脚本:
?#cat /usr/local/squid3/squid.sh
?#!/bin/bash
?# this script is for Squid
?case "$1" in
?start)
?/usr/local/squid/sbin/squid s
?sleep 1
?if netstat -tnulp | grep squid ;then echo "squid is start" ;else echo "please check it";fi
?;;
?stop)
?/usr/local/squid/sbin/squid -k shutdown
?sleep 1
?if ! netstat -tnulp | grep squid ;then echo "squid is stop" ;else echo "please check it";fi
?;;
?status)
?if netstat -tnulp | grep squid ;then echo "squid is running" ;else echo "squid is stop";fi
?;;
?reload)
?/usr/local/squid/sbin/squid -k reconfigure
?sleep 1
?if netstat -tnulp | grep squid ;then echo "squid is reload" ;else echo "please check it";fi
?;;
?restart)
?if netstat -tnulp | grep squid ;then echo "Squid proess is running" ;else
?/usr/local/squid/sbin/squid -k shutdown && /usr/local/squid/sbin/squid -s
?sleep 1
?if netstat -tnulp | grep squid ;then echo "squid is restart" ;else echo "please check it";fi
?fi
?;;
?esac

5.脚本用法
?Cache脚本用法:
?清除所有Flash缓存(扩展名.swf)
?#/usr/local/squid3/clear_squid_cache.sh swf
?Squid.sh脚本用法:
?/usr/local/squid3/sbin/squid.sh | squid.sh start | stop | status | restart | reload

6.常见问题
?在运行一段时间后,squid变慢了
?减少cache_mem值
?关掉内存池,用该选项:
?memory_pools off
?清掉/usr/local/squid3/var/cache中没用的内存
?定期执行文档中给出的clear_squid_cache.sh脚本
8.实例
?禁止终端用户在任何客户机上下载文件扩展名为mp3、exe、zip和rar类型的文件
?acl badfile urlpath_regex i \.mp3$ \.exe$ \.zip$ \.rar$ \.rmvb$ \.rm$ \.mp4$ ……
?http_access deny badfile
?禁止客户机IP地址在192.168.2.0子网的所有终端客户在星期一到星期五的9:00到18:00访问Internet资源
?acl clientnet src 192.168.2.0/24
?acl worktime time MTWHF 9:00-18:00
?http_access deny clientnet worktime
?限制IP地址为192.168.1.102的客户机并发连接的最大连接数为5
?acl clientip src 192.168.1.102
?acl clientmaxconn maxconn 5
?http_access deny clientip clientmaxconn
?禁止所有终端用户访问域名包含为google.com的网站
?acl badurl url_regex i google.com
?http_access deny badurl
?禁止所有终端用户访问域名为www.google.com的网站
?acl baddomain dstdomain i www.google.com
?http_access deny baddomain

读书人网 >操作系统

热点推荐