部署Squid3.0的心得

部署的是squid-3.0.PRE4.tar.gz,不加iptables,不使用任何外加插件
下面不是部署全过程,只是一点心得

一、configure的时候要注意参数

  • 如果要使用HTTPS,要加上–enable-ssl(我加了才发现用不到……)
  • 如果要在定义ACL的时候使用arp选项(即使用MAC地址来判定用户)需要加上–enable-arp-acl
  • 如果要允许解析的URL中出现下划线,要加上–enable-underscore,因为默认情况下Squid会认为带下划线的URL是非法的,并拒绝访问该地址。这个我没试过

二、ACL配置
如果不加载第三方工具,ACL配置是Squid中唯一的访问控制方法。这个东西的功能其实跟CCProxy的身份控制差不多(但是没有用户名密码认证功能),但是配置起来要更复杂也更强大。

    配置格式:acl aclname acltype string1
    常用的定义类型:

  • src ip-address/netmask
    src addr1-addr2/netmask
    用来源的IP地址定义,一个ip#即mask方式就是网络,cidr方式就是单个ip
  • acl aclname dst ip-address/netmask
    目标地址
  • acl aclname arp mac-address
    后悔编译的时候没加–enable-arp-acl参数,这个功能很有用的
  • acl aclname dstdomain .foo.com
    类似于CCProxy的访问限制,例如可以限制只能访问.cn的站点、不能访问.xxx的站点等等
  • acl aclname dstdom_regex [-i] xxx
    用正则,不过……谁这么无聊呢……
  • acl aclname http_status 200 301 500- 400-403
    根据HTTP Response返回值,这个很有效,比如规定302Moved就不访问
  • acl aclname port
    端口
  • acl aclname proto
    协议
  • acl aclname method
    方式,例如只能GET不能CONNECT
  • acl aclname browser [-i] regexp
    这个也太强了……限制浏览器用户代理标志类型

还可以规定mime类型、响应时间等等等等……绝对强大
Continue reading

Linux下多FTPD的共存,以及突破glftpd的chroot

  新接手一台FTP Server,其上本来的FTPD为vsftpd+ncftpd,vs做前台,仅提供匿名下载,nc做后台,仅给管理员使用。nc很不稳定,效率不高,功能单薄,我准备换成glftpd。但是糟糕的是,ncftpd原来只有一个管理员账号,所有的文件都属于这个用户,而且很多文件权限不是755,甚至只有644。有root当然可以chmod和chown,但是,原来1.5T的数据,且不是高速更新的FTP,如何chown?
  glftpd安装的时候,被我装在了 /jail 下,选择了“封闭环境”安装。但是当我尝试把别处的目录mount到它下面的时候,就遇到权限的问题,不仅不能删除很多来自ncftpd的文件,甚至部分文件根本无法访问。最糟糕的是,glftpd下载的时候会写文件(我后来才知道可以关掉这个功能),每下载一次,它会把该文件的GID加一,以方便计算下载总数。
  于是我们的问题就归结成了,如何让glftpd获得UID不是100(新建用户默认值)的文件的所有权?
  翻看glftpd的文档,发现了一个本来应该不相干的内容:如何突破glftpd的chroot。我们都知道glftpd是用root启动的,但是启动后它会立刻换成较低权限的用户去运行,并且将该用户的root限定在某一个固定的目录下(在我的安装中,默认是“封闭环境”的根目录,即 /jail )有的人需要突破这种限制,比如访问上层目录下的文件。我本来想用mount解决这个问题的,但是它的步骤说明吸引了我:
Continue reading