linux squid代理服务器

一. squid代理软件结构介绍

/etc/squid/squid.conf   #squid的主配置文件
/etc/squid/mime.conf   #squid所支持的Internet上面的文件格式,默认足够用
/usr/sbin/squid                #squid的主程序
/var/spool/squid                #squid的缓存目录
/usr/lib64/squid/            #提供 squid 额外的控制模块,尤其是影响认证密码方面的程序,都是放在这个目录下的

二. squid主配置文件介绍

本部分介绍的是标准的代理模式,用户是需要在浏览器中指定代理服务器才能使用代理的,比较麻烦,一般场景中会设置透明代理,具体请在看完本部分后看第三大部分,

[root@www ~]# vim /etc/squid/squid.conf

# 1. 信任用户与目标控制,透过 acl 定义出 localhost 等相关用户
acl manager proto cache_object              <==定义 manager 为管理功能
acl localhost src 127.0.0.1/32              <==定义 localhost 为本机来源
acl localhost src ::1/128
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 <==定义 to_localhost 可联机到本机
acl to_localhost dst ::1/128

# 2. 信任用户与目标控制,定义可能使用这部 proxy 的外部用户(内网)
acl localnet src 10.0.0.0/8      <==可发现底下都是 private IP 的设定
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
# 上述数据设定两个用户 (localhost, localnet) 与一个可取得目标 (to_localhost)

# 3. 定义可取得的数据端口所在!
acl SSL_ports port 443                  <==联机加密的埠口设定
acl Safe_ports port 80          # http  <==公认标准的协议使用埠口
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
# 定义出 SSL_ports 及标准的常用埠口 Safe_ports 两个名称

# 4. 定义这些名称是否可放行的标准依据(有顺序喔!)
http_access allow manager localhost  <==放行管理本机的功能
http_access deny manager             <==其他管理来源都予以拒绝
http_access deny !Safe_ports         <==拒绝非正规的埠口联机要求
http_access deny CONNECT !SSL_ports  <==拒绝非正规的加密埠口联机要求
<==这个位置为你可以写入自己的规则的位置喔!不要写错了!有顺序之分的!
http_access allow localnet           <==放行内部网络的用户来源
http_access allow localhost          <==放行本机的使用
http_access deny all                 <==全部都予以拒绝啦!

# 5. 网络相关参数,最重要的是那个定义 Proxy 协议埠口的 http_port
http_port 3128     <==Proxy 预设的监听客户端要求的埠口,是可以改的
# 其实,如果想让 proxy server/client 之间的联机加密,可以改用 https_port (923)

# 6. 快取与内存相关参数的设定值,尤其注意内存的计算方式
#1个G磁盘缓存,占用10M内存空间。
hierarchy_stoplist cgi-bin ? <==hierarchy_stoplist 后面的关键词 (此例为 cgi-bin)
# 若发现在客户端所需要的网址列,则不快取 (避免经常变动的数据库或程序讯息)
cache_mem 8 MB     <==给proxy额外的内存,用来处理最热门的快取数据(需自己加)

# 7. 磁盘高速缓存,亦即放置快取数据的目录所在与相关设定
cache_dir ufs /var/spool/squid 100 16 256 <==默认使用 100MB 的容量放置快取
coredump_dir /var/spool/squid
# 底下的四个参数得要自己加上来喔!旧版才有这样的默认值!
minimum_object_size 0 KB    <==小于多少 KB 的数据不要放快取,0 为不限制
maximum_object_size 4096 KB <==与上头相反,大于 4 MB 的数据就不快取到磁盘
cache_swap_low 90   <==与下一行有关,减低到剩下 90% 的磁盘高速缓存为止
cache_swap_high 95  <==当磁盘使用量超过 95% 就开始删除磁盘中的旧快取

# 8. 其他可能会用到的默认值!参考参考即可,并不会出现在配置文件中。
access_log /var/log/squid/access.log squid <==曾经使用过 squid 的用户记录
ftp_user Squid@  <==当以 Proxy 进行 FTP 代理匿名登录时,使用的账号名称
ftp_passive on   <==若有代理 FTP 服务,使用被动式联机
#refresh_pattern <regex>   <最小时间> <百分比> <最大时间>
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
#regex:使用的是正规表示法来分析网址列的资料,如上面第一行设定为网址列开头是 ftp 的意思。
#最小时间:单位是分钟,当取得这个数据的时间超过这个设定值,则该数据会被判定为旧资料。如上面第一行, 表示当取得的资料超过 1440 分钟时,该资料会被判定为旧数据,若有人尝试读取同样的网址列,那么 squid 会重新抓取该数据,不会使用快取内的旧数据。至于第三行,则表示除了上述的两个开头数据外,其他的数据都是被定义为新的, 因此 squid 只会从快取内抓数据给客户端。
#百分比:这个项目与『最大时间』有关,当该资料被抓取到快取后,经过最大时间的多少百分比时,该数据就会被重抓。
#最大时间:与上一个设定有关,就是这个数据存在快取内的最长时间。如上面第一行,最大时间为 10080 分钟,但是当超过此时间的 20% (2016分钟) 时,这个数据也会被判定为旧资料。
# 上面这四行与快取的存在时间有关,底下内文会予以说明
cache_mgr root               <==预设的 proxy 管理员的 email
cache_effective_user squid   <==启动 squid PID 的拥有者
cache_effective_group squid  <==启动 squid PID 的群组
# visible_hostname <==有时由于 DNS 的问题,找不到主机名会出错,就得加上此设定
ipcache_size 1024  <==以下三个为指定 IP 进行快取的设定值
ipcache_low 90 
ipcache_high 95  

三. squid配置文件常用修改功能

1. 增加额外目录空间给缓存

tips:了解即可,一般情况下分区足够,直接增加缓存即可,不需要指定额外目录。

[root@www ~]# vim /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 500 16 256
cache_dir ufs /srv/squid 2000 16 256

[root@www ~]# mkdir /srv/squid
[root@www ~]# chmod 750 /srv/squid
[root@www ~]# chown squid:squid /srv/squid
[root@www ~]# chcon --reference /var/spool/squid /srv/squid
[root@www ~]# ll -Zd /srv/squid
drwxr-x---. squid squid system_u:object_r:squid_cache_t:s0 /srv/squid/
[root@www ~]# /etc/init.d/squid restart

2. ACL与http_access

  • 管理使用代理的源
    • src ip-address/netmask
    • src addr1-addr2/netmask
    • srcdomain .domain.name
  • 管理目标站点能否被代理
    • dst ip-addr/netmask
    • dstdomain .domain.name
      • acl dropdomain dstdomain "/etc/squid/dropdomain.txt" #如果域名经常变动,可以这样操作,防止经常修改主配置,每次修改配置后reload配置即可。
    • url_regex [-i] ^http://url #使用正则表达式---全路径匹配
    • urlpath_regex [-i] .gif$ #正则表达式---部分路径匹配
    [root@www ~]# vim /etc/squid/squid.conf
    # http_access 是有顺序的,因此建议你找到底下这个关键词行后,将你的资料加在后面
    # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
    acl vbirdlan src 192.168.1.0/24 192.168.100.0/24
    acl dropdomain dstdomain .facebook.com
    acl dropsex urlpath_regex /sexy.*jpg$
    http_access deny dropdomain  <==这三行的『顺序』很重要!
    http_access deny dropsex
    http_access allow vbirdlan
    [root@www ~]# /etc/init.d/squid restart

3. 不要进行某些网站的缓存

[root@www ~]# vim /etc/squid/squid.conf
acl denyphp urlpath_regex \.php$
cache deny denyphp
# 在此档案的最后新增这两行即可!
[root@www ~]# /etc/init.d/squid restart

4. 主机名与管理员的email指定

指定主机名是防止由于DNS解析问题导致squid无法启动,邮箱是在用户报错的时候提示给用户看的。

[root@www ~]# vim /etc/squid/squid.conf
cache_mgr [email protected]  <==管理员的 email 呦!
visible_hostname www.centos.com  <==直接设定主机名喔!
[root@www ~]# /etc/init.d/squid restart

三. squid服务器的常用功能

1. Proxy 服务放在 NAT 服务器上:通透式代理 (Transparent Proxy)

## 1. 设定 proxy 成为通透式代理服务器的功能!
[root@www ~]# vim /etc/squid/squid.conf
http_port 3128  transparent
# 找到 3128 这行后,在最后面加上 transparent 即可
[root@www ~]# /etc/init.d/squid reload
# 2. 设定防火墙规则
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule
iptables -t nat -A PREROUTING -i $INIF -s 192.168.100.0/24 -p tcp \
         --dport 80 -j REDIRECT --to-ports 3128
# 将上述这一行加在最底下 /etc/init.d/iptables save 的上面一行即可!
[root@www ~]# /usr/local/virus/iptables/iptables.rule

2. 设置仅代理不缓存的squid

# 先关闭 squid ,然后删除快取目录,之后再重建快取目录,此时快取目录就空了
[root@www ~]# /etc/init.d/squid stop
[root@www ~]# rm -rf /var/spool/squid/*
[root@www ~]# vim /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 100 16 256 read-only
#cache_dir ufs /srv/squid 2000 16 256
# 额外的那个 /srv/squid 批注掉,然后第一行多个 read-only 字样!
cache_mem 0 MB
# 本来规范有 32MB ,现在不要了!
[root@www ~]# /etc/init.d/squid start

3. 代理的认证功能

tips:一般直接在用户接入网络的时候使用802.1X,这种认证实际不用,了解即可。

[root@www ~]# rpm -ql squid | grep ncsa
/usr/lib64/squid/ncsa_auth    <==有的!就是这个验证模块档案!注意完整路径
/usr/share/man/man8/ncsa_auth.8.gz
[root@www ~]# yum install httpd   <==apache 软件安装
[root@www ~]# rpm -ql httpd | grep htpasswd
/usr/bin/htpasswd           <==就是需要这个帐密建立指令!
/usr/share/man/man1/htpasswd.1.gz
# 1. 先修改 squid.conf 档案内容
[root@www ~]# vim /etc/squid/squid.conf
# 1.1 先设定验证相关的参数
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/squid_user.txt
auth_param basic children 5
auth_param basic realm Welcome to VBird's proxy-only web server
# 非特殊字体为关键词不可更动,第一行为透过 ncsa_auth 读取 squid_user.txt 密码
# 第二行为启动 5 个程序 (squid 的子程序) 来管理验证的需求;
# 第三行为验证时,显示给用户看的欢迎讯息,这三行可写在最上面!

# 1.2 然后是针对验证功能放行与否的 acl 与 http_access 设定
acl vbirdlan src 192.168.100.0/24  <==修改一下,取消 192.168.1.0/24
acl dropdomain dstdomain "/etc/squid/dropdomain.txt"
acl dropsex urlpath_regex /sexy.*jpg$
acl squid_user proxy_auth REQUIRED <==建立一个需验证的 acl 名称
http_access deny dropdomain
http_access deny dropsex
http_access allow vbirdlan
http_access allow squid_user       <==请注意这样的规则顺序喔!验证在最后

# 2. 建立密码数据
[root@www ~]# htpasswd -c /etc/squid/squid_user.txt vbird
New password:
Re-type new password:
Adding password for user vbird
# 第一次建立才需要加上 -c 的参数,否则不需要加上 -c 喔!
[root@www ~]# cat /etc/squid/squid_user.txt
vbird:vRC9ie/4E21c.  <==这就是用户与密码啰!
[root@www ~]# /etc/init.d/squid restart

4. 用户行为分析(常用)

[root@www ~]# yum install gd
[root@www ~]# rpm -ivh sarg-2.2.3.1-1.el5.rf.x86_64.rpm
[root@www ~]# vim /etc/sarg/sarg.conf
title "Squid 使用者存取报告"           <==第 49 行左右
font_size 12px                         <==第 69 行左右
charset UTF-8                          <==第 353 行左右

# 1. 一口气制作所有登录文件内的数据报表
[root@www ~]# sarg
SARG: Records in file: 2285, reading: 100.00%  <==列出分析信息

# 2. 制作 8 月 2 日的报表
[root@www ~]# sarg -d 02/08/2011
# 这两个范例,都会将数据丢到 /var/www/sarg/ONE-SHOT/ 底下去;

# 3. 制作昨天的报表
[root@www ~]# sh /etc/cron.daily/sarg
# 这个范例则是将每天的数据放置于 /var/www/sarg/daily/ 底下去!

如果制作好相关数据,由于 sarg 这个 RPM 档案已经帮我们设定好了每日、每周、每月进行一次执行, 所以你可以不用管怎么执行啦!非常的方便!如果想要查阅数据,只要在 proxy server 端输入 http://your.hostname/sarg 即可访问。

猜你喜欢

转载自www.cnblogs.com/wangzengyi/p/12523425.html