squid透明代理的步骤与语法

squid透明代理的步骤与语法


[root@CentOS5.1]#抚琴煮酒

1)编辑squid配置文件,在后面加上

httpd_accel_host virtual                      //由于要访问的外网主机有许多台,virtual,即为虚拟的主机,virtual指定了虚拟主机模式,采用这种模式时,squid就取取消了缓存及ICP功能.

httpd_accel_port 80                             //被加速主机的端口

httpd_accel_with_proxy   on             //选项定义为on后,squid既是Web请求的加速器,又是缓存代理服务器

httpd_accel_uses_host_header       //选项定义为on后,针对要访问的主机使用主机头,即通过主机头来区分不同的主机;这也是配置透明代时必须要配置的.

2)在代理服务器上,利用iptables配置端口重定向

#echo "1">/proc/sys/net/ipv4/ip_forward //让流量在不同网卡之间流动

#iptables -t nat -F


#iptables -t nat -O POSTROUTING -o ppp0 -j MASQUERADE

//这句话使iptables成为NAT服务器

#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport80 -j REDIRECT --to 3128

3)客户机网关必须配置成squid服务器的内网IP地址,DNS配置正确,另DNS也可以由iptables设置成智能DNS,减少客户机的工作量.

温馨小提示:

1.Squid不支持在透明代理模式下启用用户身份认证功能

2.透明代理是NAT和代理的完美结合,值得注意的是使用透明代理,因为浏览器不作任何设置,客户机通过域名访问某外网站时,首先通过DNS服务器查询哉名对应的iP地址,然后才会向linux主机发送web服务请求,所以客户机必须正确设置DNS服务器

3.相对而言,如果只要配置简单的正向代理服务,客户机只需配置网关即可通过squid代理上网,这点与透明代理不一样.

附:

squid透明代理实例(Ubuntu8.04,摘自Ubuntu论坛)

这是简单的实例配置,主要是记录自己学习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文件内容:
#加入需要模块
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#打开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 eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
#对eth0进行欺骗,如果是ppp0上网就换成 -o ppp0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
最后祝大家一次成功!!!

本文出自http://hi.baidu.com/yuhongchun027/blog/category/squid%C6%AA