[原创]squid透明代理实例(ubuntu8.04)

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
angelus
帖子: 445
注册时间: 2007-08-27 17:31

[原创]squid透明代理实例(ubuntu8.04)

#1

帖子 angelus » 2008-04-23 14:31

squid透明代理实例

这是简单的实例配置,主要是记录自己学习squid的一个过程,希望能对新手有帮助!
squid是linux下非常著名的代理服务软件,主要功能是屏蔽内网机器,代理上网,控制内网上网规则等
自己用的是ubuntu8.04服务器的长期支持版,上网是拨号ppp0.
------------------------------------------------------------------------------------

w3m,zhcon,pppoe,sysv-rc-conf,nmap,vim工具
w3m : 开始因为需要上网查找资料就使用了字符界面的浏览器w3m(系统自带)
zhcon : 不过发现不支持中文,都是乱码,就安装了外挂。zhcon
sudo apt-get install zhcon 安装终端字符界面中文外挂支持(如果出现黑屏死机,查下网,很容易解决)
启动zhcon后,输入w3m http://www.baidu.com就可以看到百度界面了,(前提是要连网)
pppoe: 使用adsl的可以通过pppoeconf命令配置拨号上网功能(需要注意的就是usrname就是你的拨号的用户名)
sysv-rc-conf :有关服务的软件,apt可以安装,后边会用
nmap: 端口查看软件,可以查看网卡开启的端口,apt可以安装
vim :自带文本编辑软件,在ubuntu8.04下最好使用vim,而不要使用vi,至少我的机器上不稳定
注,8.04自带的w3m编码设置不对,自己可以在/etc/w3m.conf最后两句修改,不然网业依然乱码

-------------------------------------------------------------------------------
下来开始安装squid吧,可以自己下载编译,也可以用源安装,这里使用源
sudo apt-get install squid

---------------------------------------------------------------------------------------
安装好后,先配置下自己的网卡吧
我的网卡配置:双网卡,eth0为外网卡,eth1为内网卡ip为:192.168.0.1/255.255.255.0
sudo vi /etc/network/interfaces 加入 (eth0是adsl动态配置不用设置)
eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.1
broadcast 192.168.0.255
(需要重新启动才能生效)
配置好网卡后可以使用命令ifconfig | more来查看全部的网卡配置。

------------------------------------------------------------------------------------------------
下边来配置squid:
ubuntu通过apt安装后版本是2.06,这个版本跟以前的有很大区别,后边详细说明
安装好squid后,就需要配置,默认设置是不允许任何用户代理的。
需要修改配置文件/etc/squid/squid.conf文件。
使用命令:sudo vi /etc/squid/squid.conf 打开文件。
主要配置是:
1:开头的监听端口配置
在vi中使用:/http_port/命令可以找到
可以单使用一个端口,也可以是ip+port 如果需要配置透明代理需要加transparent
比如我的:http_port 192.168.0.1:3128 transparent。有例子和介绍,E文好的很容易懂!

2:日志与缓存配置,
在vi中使用 :/cache_dir/ 可以找到
cache_dir ufs /home/xyz/squid/cache 100 16 256(这是我的配置)
意思是设置缓存目录的位置.大小.一级目录数.二级目录数
这个可以随意设置地方,大小,目录数 100代表100M,16个一级目录,256个二级目录
需要注意的是你设置的地方文件目录一定要存在,不存在就要自己建立
比如我的,就需要先在/home/xyz/中建立squid目录,在进去,建立cache目录
主要命令有,cd 和 mkdir(建立目录) ,rm(删除)
建立好后,使用ls -l(小写L,不是1) 命令查看文件的权限,
权限设置一定要能使squid中设置的用户组可以rwx(读,写,执行)

还有这几个缓存需要指定目录,建议都集中在一起,如放在/home/xyz/squid下。
(cache.log,access.log,store.log其实都是日志文件,cache.log调试时有用
access.log存储用户访问记录,store.log基本没有什么帮助,可以设定关闭)

3:访问控制配置:
使用:/cal/命令可以找到下边类似的
cal network src 192.168.0.0/24 (定义名字叫network的成员,成员范围是192.168.0.1-192.168.0.254)
http_access allow network (允许network的成员访问)
需要注意的是定义成员,和允许成员访问不能有顺序错误,必须先定义,在控制,
http_access allow network必须写在http_access deny All前边。
具体的访问控制,可以去查资料。

4:cache缓存的控制访问
使用命令:/cache_effective/找到
cache_effective_user xyz (允许访问的用户)
cache_effective_group xyz (允许访问的组)
这里就是前边说缓存目录权限为什么要设定好的原因,这里给出我的设置,大家参考下
xyz是我代替root的一般用户,属于xyz组,设定cache目录所有者和组都为xyz.
sudo chown -R xyz.xyz /home/xyz/squid/cache,再给予所有者和组rwx的权限
chmod ug+rwx /home/xyz/squid/cache ,其他的几个一样。

5:visiable hostname(拼写可能有错,我在win下写的,记不太清楚了)
同样使用命令:/visiable hostname/找到
自己定义个名字吧!
6:关于dns的,如果你不是配置透明代理,就在配置文件中找到dns 的参数

做到这里基本上squid就算配置完成了,下来测试下吧
使用命令:squid -z (建立缓存文件目录构架,就是些一级缓存目录和二级缓存目录,必须执行)
squid -NCd1(使用debug方式启动squid,调试错误)
也可以使用:squid -k parse(这个命令如果没消息提示,就证明没有配置文件没有语法错误)
调试好的话,可以使用命令squid -s变成服务守护进程,就是说开机自动启动,也可以使用sysv-rc-conf工具(需要下载)
下面在客户机调试下代理是否可行,配置客户机ip为:192.168.0.xx,子网掩码:255.255.255.0,网关:192.168.0.1
dns随便。
在浏览器中设置代理192.168.0.1:3128,然后测试下,如果可以下来就配置透明代理

-----------------------------------------------------------------------------------------------------
iptable设置:
在/etc/下建立文件firewall
命令:sudo touch /etc/firewall
然后给firewall的root用户加上x权限
sudo chmod u+x /etc/firewall
然后进入sudo vi /etc/rc.local文件,在最后一句前加入/etc/firewall语句,
意思开机启动firewall文件脚本
firewall文件内容:
#打开ip转发功能,让数据包可以在网卡间流动
echo "1" > /proc/sys/net/ipv4/ip_forward
#把所有流向53端口的udp与tcp请求转发到外网的DNS服务器地址,这里是我的DNS地址:61.232.202.158,你换成你的
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 61.232.202.158
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to 61.232.202.158
#把所有流向80端口的请求转发到3128端口,让squid处理
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
#对eth0进行欺骗,如果是ppp0上网就换成 -o ppp0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

保存后,修改权限,sudo chmod u+x /etc/firewall
然后重起服务器,让rc.local加载firewall脚本,再在客护端浏览器去掉代理,实验看能否上网,如果找不到网页,可以
实验在浏览器输入http://202.108.22.5 看是否可以进入百度首页,如果可以进去,就说明firewall脚本的DNS服务器转发
语句有错误,请仔细查看。

到这里就算结束了,还有更多细致与高极的就靠需要查找资料研究了,这是对照笔记与记忆写下的,难免出错,请见量!
最后祝大家一次成功!!!
上次由 angelus 在 2008-09-13 10:48,总共编辑 8 次。
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
cw0319
帖子: 23
注册时间: 2008-04-15 23:40

#2

帖子 cw0319 » 2008-04-24 9:25

支持原创,先顶再看
angelus
帖子: 445
注册时间: 2007-08-27 17:31

#3

帖子 angelus » 2008-05-03 20:30

多谢支持,没想到沉的这么快,没人学习squid的吗,,这应该是服务中最常用的啊!
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
头像
sonixrp
帖子: 505
注册时间: 2007-03-28 12:39

#4

帖子 sonixrp » 2008-05-13 14:32

晕,怎么弄还是不行呀?
目前研究自编译内核,有兴趣的朋友一起来吧~
angelus
帖子: 445
注册时间: 2007-08-27 17:31

#5

帖子 angelus » 2008-05-13 17:36

那块问题,你把你情况具体说下
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#6

帖子 oneleaf » 2008-05-13 18:58

上面的配置已经过时,是不对的。
httpd_accel_host virtval (虚拟加速主机)
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
新的squid的配置只要:

http_port 3128 transparent
angelus
帖子: 445
注册时间: 2007-08-27 17:31

#7

帖子 angelus » 2008-05-14 7:47

配置时候用的是6.06,可以实验下楼上说的
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
头像
xiehuipiaofeng
帖子: 85
注册时间: 2007-07-31 23:04

#8

帖子 xiehuipiaofeng » 2008-07-03 15:16

oneleaf 写了:上面的配置已经过时,是不对的。
httpd_accel_host virtval (虚拟加速主机)
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
新的squid的配置只要:

http_port 3128 transparent

http_port 3128 transparent 是2.6之后的透明代理配置方式,前面所说的是2.5的。还是建议看官方网站的wiki,比较容易懂。
angelus
帖子: 445
注册时间: 2007-08-27 17:31

#9

帖子 angelus » 2008-07-26 20:45

8.04的默认安装的squid2.6已经更新,在自己机器上正常运行
你能学会世界上所有语言来叫一种鸟的名字,当你知道所有这些名字叫法后,却对这种鸟一无所知~
理查德-费曼
cnelite
帖子: 15
注册时间: 2008-03-16 15:04

#10

帖子 cnelite » 2008-08-03 23:16

如何让外网的用户通过squid代理上网,就像ccproxy那样?
头像
sonixrp
帖子: 505
注册时间: 2007-03-28 12:39

#11

帖子 sonixrp » 2008-08-04 8:41

ccproxy 的确是个好东西 我也在寻找linux下面的 ccproxy
目前研究自编译内核,有兴趣的朋友一起来吧~
头像
happying
帖子: 37
注册时间: 2007-03-30 21:24

Re: [原创]squid透明代理实例(ubuntu8.04)

#12

帖子 happying » 2008-10-31 21:27

mark~~~~~~~~~~~~~~~~~~~~~~~~~~~
neo.chan
帖子: 23
注册时间: 2008-10-09 21:41
来自: 深圳
联系:

Re: [原创]squid透明代理实例(ubuntu8.04)

#13

帖子 neo.chan » 2008-10-31 21:29

Netkiller Linux 手札
Debian/Ubuntu Cookbook
Neo Chan



中国广东省深圳市宝安区龙华镇
518109
+86 755 29812080
+86 755 29812080
<openunix@163.com>
文档出处
http://netkiller.8800.org/
http://netkiller.hikz.com/
http://netkiller.mefound.com

版权 © 2006, 2007, 2008 Netkiller(Neo Chan). All rights reserved.

版权声明

你可以任意转载,转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

文档最近一次更新于 Fri Oct 31 13:07:29 UTC 2008

对初学Linux的爱好者忠告

玩Linux最忌reboot(重新启动)这是windows玩家坏习惯

Linux 只要接上电源你就不要再想用reboot,shutdown,halt,poweroff命令,Linux系统和应用软件一般备有 reload,reconfigure,restart/start/stop...不需要安装软件或配置服务器后使用reboot重新引导计算机

在 Linux系统里SIGHUP信号被定义为刷新配置文件,有些程序没有提供reload参数,你可以给进程发送HUP信号,让它刷新配置文件,而不用 restart.通过pkill,killall,kill 都可以发送HUP信号例如: pkill -HUP httpd


Squid作为反向代理Cache服务器(Reverse Proxy)

这里我们将apache和squid安装在一台服务器上

过程 13.1. 配置步骤

1.

配置Apache监听端口

netkiller@Linux-server:~$ cd /etc/apache2/
netkiller@Linux-server:/etc/apache2$ sudo cp ports.conf ports.conf.old
netkiller@Linux-server:/etc/apache2$ sudo vi ports.conf
Listen 8080
Listen 443
netkiller@Linux-server:/etc/apache2$ sudo /etc/init.d/apache2 restart
* Forcing reload of apache 2.0 web server... [ ok ]
netkiller@Linux-server:/etc/apache2$


restart/reload后测试一下

http://localhost:8080/
2.

squid 2.5 之前的版本

netkiller@Linux-server:/etc/apache2$ cd ../squid/
netkiller@Linux-server:/etc/squid$ sudo vi squid.conf
http_port 80
httpd_accel_host localhost
httpd_accel_port 8080
httpd_accel_single_host on
httpd_accel_with_proxy on
httpd_accel_uses_host_header off
netkiller@Linux-server:/etc/squid$ sudo /etc/init.d/squid reload
* Reloading Squid configuration files
...done.
netkiller@Linux-server:/etc/squid$


squid 2.5 之前的版本

对公网主机220.201.35.11:80做Cache

netkiller@Linux-server:/etc/apache2$ cd ../squid/
netkiller@Linux-server:/etc/squid$ sudo vi squid.conf
http_port 80
httpd_accel_host 220.201.35.11
httpd_accel_port 80
httpd_accel_single_host on
httpd_accel_with_proxy on
httpd_accel_uses_host_header off
netkiller@Linux-server:/etc/squid$ sudo /etc/init.d/squid reload
* Reloading Squid configuration files
...done.
netkiller@Linux-server:/etc/squid$


多台主机做Cache

netkiller@Linux-server:/etc/apache2$ cd ../squid/
netkiller@Linux-server:/etc/squid$ sudo vi squid.conf
http_port 80
httpd_accel_host virtual
httpd_accel_port 8080
httpd_accel_single_host on
httpd_accel_with_proxy on
httpd_accel_uses_host_header off
netkiller@Linux-server:/etc/squid$ sudo /etc/init.d/squid reload
* Reloading Squid configuration files
...done.
netkiller@Linux-server:/etc/squid$


3.

squid 2.6之后版本的配置

localhost

http_port 80 defaultsite=localhost vhost transparent
cache_peer localhost parent 8080 0 no-query originserver


其它主机

http_port 80 defaultsite=192.168.1.2 vhost transparent
cache_peer 192.168.1.2 parent 80 0 no-query originserver


4.

#squid.conf
#服务器IP 192.168.1.1
#监听服务器的80端口,透明代理,支持域名和IP的虚拟主机
http_port 192.168.1.1:80 transparent vhost vport

#限制同一IP客户端的最大连接数
acl OverConnLimit maxconn 16
http_access deny OverConnLimit

#防止天涯盗链,转嫁给百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info http://www.baidu.com/logs.gif tianya

#防止被人利用为HTTP代理,设置允许访问的IP地址
acl myip dst 192.168.1.1
http_access deny !myip

#防止百度机器人爬死服务器
acl AntiBaidu req_header User-Agent Baiduspider
http_access deny AntiBaidu

#允许本地管理
acl Manager proto cache_object
acl Localhost src 127.0.0.1 192.168.1.1
http_access allow Manager Localhost
http_access deny Manager

#仅仅允许80端口的代理
acl Safe_ports port 80 # http
http_access deny !Safe_ports
http_access allow all

#Squid信息设置
visible_hostname netkiller.8800.org
cache_mgr openunix@163.com

#基本设置
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes

#2.5的反向代理加速配置
#httpd_accel_host 127.0.0.1
#httpd_accel_port 80
#httpd_accel_single_host on
#httpd_accel_uses_host_header on
#httpd_accel_with_proxy on
#2.6的反向代理加速配置
#代理到本机的80端口的服务,仅仅做为原始内容服务器
cache_peer 127.0.0.1 parent 80 0 no-query originserver

#错误文档
error_directory /usr/local/squid/share/errors/Simplify_Chinese

#单台使用,不使用该功能
icp_port 0
wjjs
帖子: 145
注册时间: 2007-07-08 19:21

Re: [原创]squid透明代理实例(ubuntu8.04)

#14

帖子 wjjs » 2008-11-11 9:05

mark
xiaomagua
帖子: 13
注册时间: 2008-11-30 22:11
联系:

Re: [原创]squid透明代理实例(ubuntu8.04)

#15

帖子 xiaomagua » 2008-12-06 9:09

hello :em01
回复