在ec2上配置squid http代理服务器笔记

我知道VPN在中国受到很大的干扰,我就没在ec2上安装VPN server了,我想到了早年代理上网的方式,HTTP 代理,指定端口号就能上网,于是找到了squid这款成熟的代理服务器,squid很强大,通常是作为集群服务器的前端缓存在用的,我的需求却很简单:HTTP代理上网浏览其他网站。
登录ec2

zuola$ sudo ssh -v -i ~/.ssh/zola.pem [email protected]

开始安装

bitnami@ip-10-196-185-56:~$ sudo apt-get install squid
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  python-twisted-web gir1.2-gudev-1.0 python-twisted-names
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  squid-langpack squid3 squid3-common ssl-cert
Suggested packages:
  squidclient squid-cgi smbclient openssl-blacklist
The following NEW packages will be installed:
  squid squid-langpack squid3 squid3-common ssl-cert
0 upgraded, 5 newly installed, 0 to remove and 2 not upgraded.
Need to get 1,988 kB of archives.
After this operation, 6,808 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise/main squid-langpack all 20111114-1 [307 kB]
Get:2 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main squid3-common all 3.1.19-1ubuntu3.12.04.1 [122 kB]
Get:3 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main ssl-cert all 1.0.28ubuntu0.1 [12.3 kB]
Get:4 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main squid3 amd64 3.1.19-1ubuntu3.12.04.1 [1,540 kB]
Get:5 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/universe squid amd64 3.1.19-1ubuntu3.12.04.1 [6,246 B]
Fetched 1,988 kB in 0s (4,124 kB/s)
Preconfiguring packages ...
Selecting previously unselected package squid-langpack.
(Reading database ... 35919 files and directories currently installed.)
Unpacking squid-langpack (from .../squid-langpack_20111114-1_all.deb) ...
Selecting previously unselected package squid3-common.
Unpacking squid3-common (from .../squid3-common_3.1.19-1ubuntu3.12.04.1_all.deb) ...
Selecting previously unselected package ssl-cert.
Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...
Selecting previously unselected package squid3.
Unpacking squid3 (from .../squid3_3.1.19-1ubuntu3.12.04.1_amd64.deb) ...
Selecting previously unselected package squid.
Unpacking squid (from .../squid_3.1.19-1ubuntu3.12.04.1_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ufw ...
Processing triggers for ureadahead ...
Setting up squid-langpack (20111114-1) ...
Setting up squid3-common (3.1.19-1ubuntu3.12.04.1) ...
Setting up ssl-cert (1.0.28ubuntu0.1) ...
Setting up squid3 (3.1.19-1ubuntu3.12.04.1) ...
Creating Squid HTTP proxy 3.x spool directory structure
2012/12/24 12:46:44| Creating Swap Directories
squid3 start/running, process 10571
Setting up squid (3.1.19-1ubuntu3.12.04.1) ...

先添加suqid的用户名和密码,不设置密码也许会导致代理服务器被滥用,我写教程(其实是学习笔记啦)了肯定就会有很多人来体验啊,也许会有人扫描到这个可用的免费代理但他不一定会扫描到这篇文章。用户名是zola,密码是 ilovezola 随便设置个密码就好。

bitnami@ip-10-196-185-56:/etc/squid3$ sudo htpasswd -c /etc/squid3/squid.password zola
New password: 
Re-type new password: 
Adding password for user zola

接下来修改squid的配置文件,

bitnami@ip-10-196-185-56:~$ sudo vi /etc/squid3/squid.conf

我会把尽量每行代码的作用解释清楚,我也是通过阅读  Squid权威指南 和  squid缓存服务器配置-之conf配置文件的详细介绍来理解代码的,并且按自己的需求设置了squid代理服务器

#默认端口号,我也没改,加上transparent就是透明代理了,我需要用于给浏览器设置代理,所以要透明代理模式
http_port 3128 transparent
#下面是指定密码文件
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/squid.password
auth_param basic children 5
#下面是HTTP验证时的提示,我把用户名和密码提示出来啦
auth_param basic realm Zola's Squid proxy server.username:zola pasword:ilovezola
#下面是设置验证时效,一小时后又得输入一次密码,我故意设置的,其实可以设置更长
auth_param basic credentialsttl 1 hours
#密码大小写是否敏感
auth_param basic casesensitive off
#acl是访问控制列表,下面是一个叫password的代理认证设置为必须的,acl 是配合http_access使用的,所以后面会有http_access allow password相呼应
acl password proxy_auth REQUIRED
#下面是一个名字为all的访问控制列表,可以为IP段,也可写成all,这个all跟0.0.0.0/0是一样的效果
acl all src all

#下面三个acl其实我是没有用到的,定义了locahost来源和to_localhost的目标cal
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
#下面是定义一些端口为Safe_ports的acl ,后面可以在http_access里定义拒绝还是允许,其实我只需要定义80和443就可以了,默认是这么些我就没删除了。看文档说,email用的25端口一定要防范,不然被spam邮件发送者利用了这个代理的话,就会导致这个IP被许多防范垃圾邮件组织列入黑名单,甚至还会引来投诉,亚马逊就会怪我,所以这里没有把25列入安全端口。
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
#下面这个acl就是一个允许CONNETC这个HTTP状态的控制列表,这个肯定会要允许的。
acl CONNECT method CONNECT
#下面这个acl就好玩了,我定义了POST这个http状态的acl名字为POST,我会在后面的http_access拒绝掉,这样用我这个代理服务器的人就不能用这个IP去发贴了,也不能登录到任何网站,用上这个代理,所有网站就成只读模式了,哈。
acl POST method POST
# 下面我用正则表达式过滤掉一些文件扩展名,凡是URL里有这些扩展名都无法下载,这样做的好处是节约我的服务器浏量,亚马逊的ec2的服务器流量有限,要是被人家使用我的代理,把流量刷爆了我的信用卡也就爆了
acl deny_url_path urlpath_regex -i \.exe$
acl deny_url_path urlpath_regex -i \.rar$ 
acl deny_url_path urlpath_regex -i \.zip$ 
acl deny_url_path urlpath_regex -i \.dmg$ 
acl deny_url_path urlpath_regex -i \.swf$
acl deny_url_path urlpath_regex -i \.flv$
acl deny_url_path urlpath_regex -i \.mp4$
acl deny_url_path urlpath_regex -i \.mp3$

#我也不允许使用访问aodobe去安装flash播放器,因为前面我设置屏蔽swf会显示出让用户去安装flash player,我干脆把aodobe也拒绝掉。其实squid在公司局域网环境中使用通常是控制员工上网的,可以指定时间段来允许或拒绝访问某些网站。
acl deny_site dstdomain  .adobe.com
#下面这两行我不懂,没仔细看手册
http_access allow manager localhost
http_access deny manager
#下面就是我用于屏蔽特定URL的,屏蔽下载
http_access deny deny_url_path
#下面是调用屏蔽adobe的代理
http_access deny deny_site

#下面是屏蔽POST提交数据动作的
http_access deny POST all Safe_ports
#下面是屏蔽非全安端口的
http_access deny !Safe_ports
#下面是屏蔽非SSL端口的
http_access deny CONNECT !SSL_ports
#下面是允许本地IP的
http_access allow localhost

#下面是允许密码验证的,/etc/squid3/squid.password 里的用户名和密码匹配就允许访问,不会出现/usr/share/squid3/errors/zh-cn/ERR_ACCESS_DENIED里的内容,ERR_ACCESS_DENIED也是可以自定义的,后面会介绍到。
http_access allow password

#下面是允许所有来源IP,也就是不限定任何来源IP,其实可以设置限定某个IP段的用户访问,比如只允许中国IP访问,但这个IP段数据太大了,我就不做这个实验了。
http_access allow all

#设置缓存使用的内存,我的免费ec2服务器只有600多M的内存,我就象征性弄个256M吧,squid作为缓存代理服务器,内存设置越大越好
cache_mem 256 MB
maximum_object_size_in_memory 512 KB

#设置缓存使用的硬盘存储究竟,squid作为缓存代理服务器,硬盘究竟也是设置越大越好,因为网页都会缓存在squid服务器里,能提高用户访问网站的速度,许多ISP会为了提高用户访问体验,会提供squid服务器加速网络访问的。假如你的网站在全球都有访问者,但亚洲访问美洲网络显然是有更多延迟,体验起来不一样,若美国网站也在亚洲弄个squid服务器,亚洲用户访问起来就感觉不到延迟了
cache_dir ufs /var/spool/squid3 100 16 256
maximum_object_size 406 KB
#内存缓存最低百分之九十,就把旧的内容替换直到降到百分之85,配合cache_mem使用
cache_swap_low 90
#缓存最高达到百分之九十五
cache_swap_high 95

#squid突然挂掉的时候,或者突然出现什么故障的时候,将squid在内存中的资料写到硬盘中。
coredump_dir /var/spool/squid3
#Refresh _pattern是设置缓存命中率的,我拿来当代理而不当缓存用,我就不管了,squid.conf显然有下面的选项,我就不解释了
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

#设置管理员邮箱,会在报错页面显示出来,提示有问题联系管理员
cache_mgr [email protected]
#设置主机名字,也会在报错页显示出来
visible_hostname amazon.zuola.com
#下面这行是一个决定是否隐藏用户IP的选项,设置为off的话,使用本HTTP代理登录 https://zuo.la/useragent/  就不会显示你的真实IP,我把这个打开了就是故意不帮别人隐藏IP,我怕别人滥用这个啊。
forwarded_for on
~

修改403报错提示

bitnami@ip-10-196-185-56:~$ vi /usr/share/squid3/errors/zh-cn/ERR_ACCESS_DENIED

最后,来体验我的代理服务器吧:
请把你的浏览器的http和https代理设置为204.236.236.251:3128吧,这样,你访问任何网站都不能提交数据,不能看youtube视频,不能下载mp3,还需要每隔一个小时输入zola 和ilovezola,当然这是免费,不过没有保障和客服哦。也许过几个月我就关掉这个服务了,也许早被GFW屏蔽了。

squid_proxy

2 thoughts on “在ec2上配置squid http代理服务器笔记”

  1. Pingback: 佐拉Ⓥ
  2. Pingback: aiweif an

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据