squid(Proxy)服务器配置笔记

局域网控制者 Proxy服务器

好处:可以解省带宽

# yum install squid -y

安装好之后,它的配置文件路径在/etc/squid/目录下

主配置文件为: squid.conf

# vim /etc/squid/squid.conf

这个配置文件夹,RHEL6之前,有几千行,现在简化了好多,只有77行;

这里列出了很多的ACL,这些ACL是用来起一个别名的,比如说,我的内网地址为192.168.30.0/24,那么这时我们就可以给它起一个别名,叫XX、YY都可以随便起的,如下:

这时就是给192.168.30.0/24网段起了一个别名叫做XX;(我们给源为192.168.30.0这个网段起一个别名叫XX)

如果写一个具体的IP地址的话,子网掩码要写成32,否则报错。!!!!!!!!!!!!

注意: 我们在写ACL的时候,可以随便在什么地方写,没有顺序限制!!!!

我们继续往下找,在下面会有很多个http_access ,这些http_access的意思是允许哪些网段可以使用这个代理,那么网段不能使用这些代理;

http_access的格式为: http_access allow/deny 别名

注意:我们在再http_access的时候,它的顺序非常重要!!!!!!!!!!!!!

它的匹配顺序是从上往下匹配的,如果说它在上面已经匹配成功了,就不会往下去匹配了!!!!!!!!!!

如果你把http_access allow xx写在56行上面或者写在57行下面,则内网可以使用这个代理上网,因为上面的localnet和localhost是另外两个网段的别名,所以它不会去匹配,这时它就可以上网;写好如下:

这里是将http_access xx写在这两行上面

如果你把http_access allow xx 写在60行的下面,则这时这个网段是不可以上网,因为60行已经拒绝所有的了

它的意思就是说,客户端要使用我的代理服务器的话,所使用的端口是多少,代理服务器默认的端口为3128,在现实生活中,我们使用808或者8080比较多

下面我们开始把服务器重启一下,如下:

# service squid restart

因为前面我们把代理的端口改成了8080,所以我们要在防火墙上把8080端口打开,如下:

# iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT

# service iptables save

下面我们开始到客户端那边来操作,如下:

到客户端那边打开浏览器,做如下操作:

打开“编辑”—“首选项”—“高级”—“网络”,然后点击“连接”右边的“设置”按钮跳出如下窗口:

在上面选择“手工配置代理”,然后在HTTP代理后面输入squid服务器的IP地址和端口,确定即可。(这时,客户端可以访问任何网页)

拒绝客户端访问某个网站方法:

下面有一个问题,就是不允许客户端去访问某个网站(比如:百度)

回到服务器去修改/etc/squid/squid.conf文件,如下:

再去定义两行,如下:

这里给.baidu.com这个域名定义了一个别名叫做baidu。

Dstdomain 这个意思是: 指定目的域

Dst 这个意思是:指定目的地(也就是到什么地方)

Src 这个意思是:指定源地址

这里是拒绝百度这个别名(写在最上面)

这里是把baidu这个别名写在最上面,则会首先匹配这行,如果写在xx下面,则会先去匹配XX;如果先匹配了XX这行,那么刚刚写的拒绝百度,则不会生效,因为这里的顺序非常重要。(这里的匹配顺序是从上往的匹配)

这里写的是把百度(.baidu.com这个后缀的百度域明都将无法访问),对其它网站不影响。

拒绝客户端访问什么类型文件:

1、只拒绝用户访问www.rhce.cc这个网站里面的文本文件

Acl test url_regex ^\.txt

解释:

regex 表示正则表达式

^\txt 这行前面的尖括号代表开头的意思;

这里写的是一个正则表达式,第一个点表示任意一个字符(和shell里面的一个通配符的意义是不一样的);星号表示它前面的点可以出现任意多次,可有可无(无论什么字符,两个也行,三个也行,多个也行);后面的一个点的意思是以.txt为后缀的文件,这里的点要使用前面的一个反斜线给去掉后面的点的特殊意义;这句的意思是只限制这rhce.cc/test/下面的以.txt为后缀的文本文件;其它的内容不会影响

http_access deny test

这里要写上这行,必须在XX这行的上面才可以

2、互联网上所有为文本文件,都不能访问;

Acl test urlpath_regex \ . txt$

这里的反斜线它是一个正则表达式,前面加了一个反斜线之后,就去掉了后面的点的特殊意义,这个点只表示后缀,这里$的意思是指最后的意思(这句话的意思就是互联网上后缀为txt的文件,都不可以访问,都不给做代理)

这里要写上这行,必须在XX这行的上面才可以

这个是对所有网站进行定义

这个是对指定的网站进行定义

我们定义好acl之后,下面我们要做的就是允许或者拒绝;前面写的都是http_access,那么它还有没有其它的选项呢? 有

还可以使用cache还替代

这句前面写的是cache,客户端去访问代理服务器,如果说代理服务器没有相关缓存的话,代理服务器会去互联网上去发送请求去获取结果,然后把这个结果给保存在代理服务器里面去,然后同时发送一份给客户端,那么是不是所有的都给做缓存呢?这就是由cache后面的deny或者allow来决定的;那么这句话的意思是:如当出现在拒绝的行里,那么这句话的意思就是,当cache出现在deny的这行前面,代理服务器则不会给后面定义的test做缓存;当caceh出现在allow的这行的前面,代理服务器则会给后面定义的test做缓存;

我们还可以在squid.conf配置文件中加以下内容:

表示指定代理服务器的主机名

表示当代理服务器出现问题的时候,它就会给后面的邮箱地址发送一封邮件

以上两行加在squid.conf配置文件的最上面就可以了。

在配置文件中往下找,找到如下行:

这句话的意思是,当代理服务器存放了很多缓存的时候,就是从互联网上下载的所有的缓存文件都是放在/var/spool/squid这个目录里面的,它是怎么组织的呢?它后面有三个数字,100 16 256 这三个数字是什么意思呢?

首先100:它的意思是当代理从互联网上下载缓存到缓存里面的时候,它会在/var/spool/squid/目录里面创建一个100M的高速缓存;

其次 16: 它的意思是在/var/spool/squid/这个目录下会有16个目录;

最后256: 它的意思是在这16中的每个目录中还有256个目录;

总的意思是:在/var/spool/squid/目中会有16个子目录,每个子目录中会有256个目录;

我们都知道,内存的速度要比硬盘的速度快很多

实际上这行的上面还有一个默认的选项 cache_mem ,就是说对于那些比较热门的网站,系统都会给放到内存里

对那些不热门的程序放到/var/spool/squid这个目录中去

就是说把那些比较热门的内容给放到内存里,将占用内存10M的空间;10M的意思是说从内存中划分10M出来当squid的存储用,而不放到硬盘里去;

这里有一个需要注意的地方;硬盘里的这个100M的缓存文件一定要大于划分给内存的空间

把cache_dir这行给启用,然后重启squid服务,会发现在/var/spool/squid/这个目录下多了16个目录,如下:

并且在每个目录中,又有256个子目录

我们是否可以更改一下,cache_dir后面的目录呢?是可以的,比如我们要想把目录改为/xx,如下:

首先到根下面去创建一个xx目录,

# mkdir /xx

下面我们就直接改成根下面的xx就可以了,如下:

现在你直接把缓存目录换成了/xx,但是它现在还是不能正常工作的,原因如下:

从上面的截图我们可以看出,

/var/spool/squid这个目录的上下文为squid_cache_t;

/xx这个目录的上下文为default_t;

因为上下文不一样,所以selinux会阻止的,所以我们要把/xx的上下文改成和/var/spool/squid一样才可以,如下:

# chcon -R --reference=/var/spool/squid /xx

我们要保证/xx这个目录的属性和/var/spool/squid/这个目录相同,前面改过上下文了。

还要把/xx的所有者和所属组也要改成和/ var/spool/squid/一样,如下:

这里看到的所有者和所属组都是squid;所以我们也要把/xx的所有者和所属组也要改成squid,截图如下:

这样就改好了/xx的所有者和所属组为squid

还要改一下/xx目录的权限也要和/var/spool/squid/一样,如下:

这时我们看到的/var/spool/squid目录的权限为750

我们这里看到的/xx的权限是755

所以我们要把/xx目录的权限也要改成750 ,如下:

这时就把/xx目录改成了750

重启squid

# service squid restart

这时我们再看一下/xx目录,截图如下:

下面我们继续打开配置文件;

现在我们已经将squid的缓存文件放到/xx目录里去了,如果说你有一台服务器是专门做代理用的,那么你想一下,它的缓存可能会非常非常的大,所以它的占用的数据量也会非常非常的大,一般情况下,我会都做一个逻辑卷给挂载到/xx 这个目录里,如果空间不够了,我们可以去给增长,我们也不希望它无限制的去增长,比如有的数据已经存放十天了,那么我们可以根据需要把老的数据给删除掉,所以我们可以加入以下选项:

Cache_swap_low 90 cache_swap_high 95

这两句话的意思是,假如说有一个逻辑卷挂载到了根下面的/XX,xx里面的数据可能会在不停的增长,上面设置了一个90,一个95,它的意思是说,当这个磁盘空间的使用率达到95%的话,就开始删除里面最老的数据,一直删除到90%为止。

这里设置的是缓存在我们机器里存储多久,这里的单位是分钟

1440为最小缓存时间,单位为分钟;(数据在我们电脑里最小要存1440分钟)

10080为最大缓存时间,单位为分钟;(数据在我们电脑里最大能存10080分钟)

20%表示,当缓存存放在电脑里的的时间为10080*20%的时候,电脑会把这个数据标记为老的数据;

下面我们再想一下另外一个问题,如下: 透明代理

一般情况下,在公司的现实的工作中,在代理服务器上可能会配置防火墙,也就是会配置NAT,现在内网的用户通过代理服务器去上网,如果内网的用户比较懂网络的话,他就会把他自己机器上的代理给删除掉,网关指向代理服务器,然后再给配置上DNS,这样的话,他就可以使用NAT来上网了,从而就跳过了代理服务器,直接通过NAT来上网,这样的话,我们配置这个代理服务器就没有多少作用了?

在服务器上配置NAT,如下:

# iptables -t nat -A POSTROUTING –o eth0 -s 192.168.30.0/24 -j SNAT --to-source 192.168.24.10

这句话的意思是在服务器上配置SNAT,将内网地址转换成外网地址,让内网用户可以通过NAT来上网

# echo 1 > /proc/sys/net/ipv4/ip_forward 和 # vim /etc/sysctl.conf

上面两种方法是在服务器上启用路由功能

完成以上配置之后,内网用户(192.168.30.0/24)就可以通过NAT来访问互联网了。

这时,在服务器上配置了squid和NAT,这两种上网方式,那么内网的客户端之前是使用squid来上网的,而且在squid上面配置了很多限制访问的网站,如果这时,一个比较懂网络的客户端,把自己机器上的代理给删除掉,再把网关指向服务器,再把自己的DNS给更改了一下,那么他就可以直接通过NAT去上网了,如果都这样,那么我们配置这个代理还有什么意义呢?

有一个方法可以限制用户在使用NAT上网时,然后NAT再将这种请求发送给squid去处理每一个访问外网的80端口,方法如下:

这时,我们只要在服务器的防火墙上加上一句就可以了,如下:

# iptables -t nat -I PREROUTING 1 -s 192.168.30.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 8080

解释:是在prerouting链中添加一个凡是来自192.168.30.0/24这个网段的80端口的请求时,就直接给转到8080端口(因为8080是代理的端口,所以就是将这种请求交给squid去处理)

服务器上还要做一个步骤才可以(就是在squid服务器上也启用它的转发功能),如下:

# vim /etc/squid/squid.conf

找到,然后这行后面加上transparent

就是在squid服务器上也启用它的转发功能。

上面所讲的就是透明代理的实现过程。

大家有没有想过这样一个问题,就是前面我们在使用squid上网时,没有设置DNS,而使用NAT上网时,则设置了DNS;

Squid上网:

我们在使用代理上网的时候,我们是直接和代理服务器直接连接的,就是说我们访问百度服务器的时候,我不需要知道百度的地址是多少,我们只要把我们要访问百度的请求发送给代理服务器就可以了,这时代理会帮助我们去查找百度;NAT上网:

我们在使用NAT上网的时候,是客户端直接和百度服务器通信的,NAT只是把客户端的源地址做了一次变换,因为客户端是直接和百度进行通信的,所以必须要有一个DNS才可以;

监控squid服务器

如果squid服务器出现了问题,那么,我们应该如何监控我们的squid服务器:

如果我们要监控squid服务器的话,我们必须要安装一个包才可以,如下:

Sarg-2.3.1-1.el6.rft.x86_64.rpm

安装这个包:

# yum localinstall sarg-2.3.1-1.el6.rft.x86_64.rpm

当这个装好之后,它必须要配合apache才可以

# vim /etc/httpd/conf/httpd.conf

ServerName 192.168.30.250:80

# service httpd restart

启动好apache之后,下面我们就开始运行sarg

# sarg

第一次运行sarg时,好像提示什么字体没有找到

这时,我要就到sarg的安装目录中,找到原来存在的字体

# cd /etc/sarg

然后我们将fonts目录下的字体给复制到/usr/share/sarg/fonts/这个目录下

# mkdir -p /usr/share/sarg/fonts/ 创建目录

# cd /etc/sarg/fonts/ 进入安装目录下的字体目录

# cp /etc/sarg/fonts/DejaVuSans.ttf /usr/share/sarg/fonts/ 将DejaVuSans.ttf拷贝到/usr……

然后我们再执行一次sarg命令,如下:

# sarg

这时就没有报错了

下面就使用浏览器打开sarg

在浏览器地址栏输入: