squid透明代理的步骤与语法
yuhongchun
|
1#
yuhongchun 发表于 2008-07-28 18:23
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 |