squid配置

参数设置如下:

端口设置
http_port 888 transparent //设置squid的端口

##cache设置
cache_mem 512 MB //内存缓存大小,一般建议不小于内存的1/3,
cache_dir ufs /var/spool/squid 2000 16 256 //设置硬盘缓存大小2000M,缓存目录下第一级子目录为16个,第二

级子目录为256个

cache_swap_low 90(此处意思为90%)
cache_swap_high 95

maximum_object_size 32768 KB // 是能cache最大的文件大小。对应wmv,rm文件,建议设置为32768 kB
maximum_object_size_in_memory 64000KB //是在内存中cache的最大文件大小。

cache_effective_user squid //设置缓存的有效用户
cache_effective_group squid //设置缓存的有效用户组

cache_access_log /var/log/squuid/access.log //设置访问日志文件存放位置
cache_log /var/log/squid/cache.log //设置缓存日志存放位置
cache_store_log /var/log/squid/sore.log //设置存储缓存对象的状态记录文件

cache_mgr xxx@163.com //管理员邮箱

ipcache_size 1024 //经由DNS正反解析及IP的结果,记录在暂存区。如果能够将IP和主机名记录下来的话,搜寻也会加快,

//分别开启ipcache_size和fqdncache_size(后面的数值为bytes),这些数据都是ASCII数据,用不了多少

// 空间,1024bytes足够。
ipcache_low 90 // cache容量在达到最高上限百分比后,将自动降至90%
ipcache_high 95 //cache容量使用最高上限95%
fqdncache_size 1024


visible_hostname squidserver //设置squid的主机名称

acl localnet src 10.10.10.0/255.255.255.0 //内网为10.10.10.0网段
acl denyfiles urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$ //禁止下载MP3、exe、zip、rar结尾的文件

http_access deny denyfiles
http_access allow localnet



然后
squid -zX 生成squid的缓存目录,位置在/var/spool/squid

重启squid服务,我们的squid就配置完成了。
---------------------------------------------------------
透明代理设置:

首先将squid的配置文件中端口配置修改如下:
http_port 888 transparent //如果是透明代理,必须加上transparent

编辑/etc/sysctl.conf文件,打开路由功能。
net.ipv4.ip_forward = 1 (0改为1)
并加入下面几行,(本人照搬,主要是为了优化)
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

保存退出
sysctl -p 使生效

-----------------------------------------------------------
iptables设置

把三个表清空,把自建的规则清空
iptables -F
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat –X
设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
打开“回环”,以免有不必要的麻烦。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
在所有网卡上打开ping功能
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
打开22端口,允许远程管理(设定了很多的附加条件:管理机器IP必须是192.168.1网段,并且必须从eth0网卡进入)
iptables -A INPUT -i eth0 -s 192.168.1.0/255.255.255.0 -d 192.168.1.103 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.1.0/255.255.255.0 -s 192.168.1.103 -p tcp --sport 22 -j ACCEPT
----------------------------
端口转发(关键)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 888
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

--------------------------------
iptables -A INPUT -i eth1 -s 10.10.10.0/24 -p tcp --dport 888 -m state --state NEW,ESTABLISHED -j ACCEPT
//允许10.10.10.0/24网段的机器发送数据包从eth0网卡进入。如果数据包是tcp协议,而且目的端口是888(因为REDIRECT 已经把

80改为888了。nat表的PREROUTING是在filter表的INPUT前面的。)的,再而且,数据包的状态必须是NEW或者 ESTABLISHED的(NEW

代表tcp三段式握手的“第一握”,换句话说就是,允许客户端机器向服务器发出链接申请。ESTABLISHED表示通过握手已经建立起

链接),通过

iptables -A OUTPUT -o eth1 -d 10.10.10.0/24 -p tcp --sport 888 -m state --state ESTABLISHED -j ACCEPT
//数据经squid服务器获取后,返回给10.10.10.0/24网段机器。


iptables -A INPUT -i eth0 -p tcp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
//数据有去就有回。

iptables -A OUTPUT -o eth0 -p tcp --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
//现在你的数据包已经进入到linux服务器防火墙上来了。squid需要代替你去访问,所以这时,服务器就成了客户端的角色,所以

它要使用32768到61000的私有端口进行访问。(大家会奇怪应该是1024到65535吧。其实CentOS版的linux所定义的私有端口是

32768到61000的,你可以通过cat /proc/sys/net/ipv4/ip_local_port_range,查看一下。)再次声明:这里是squid以客户端的身

份去访问其他的服务器,所以这里的源端口是32768:61000,而不是888!


------------------------------
开放dns
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT

iptables防火墙设置完毕。

保存iptable的表
service iptables save

================================================================================================================

使用过程监视:

squid命中率查看
squidclient -p 80 -U Henry -W xxxx mgr:info |grep -i hit
Hits as % of all requests: 5min: 62.1%, 60min: 64.1%
Hits as % of bytes sent: 5min: 63.4%, 60min: 60.6%
Memory hits as % of hit requests: 5min: 97.3%, 60min: 89.7%
Disk hits as % of hit requests: 5min: 0.2%, 60min: 0.1%
Cache Hits: 0.00000 0.00000
Near Hits: 0.00091 0.00091

内存使用情况:
squidclient -p 80 -U Henry -W password mgr:mem

该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
tail -f /var/log/squid/access.log |grep TCP_MEM_HIT

该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
tail -f /var/log/squid/access.log |grep TCP_HIT


该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
tail -f /var/log/squid/access.log |grep TCP_MISS