转载请注明 原文:http://blog.csdn.net/xl_xunzhao/archive/2008/10/11/3057212.aspx
xunzhao的博客已搬家至:http://xunzhaoxz.itpub.net
关键字:linux服务器配置 代理服务器 透明代理 共享上网iptables Squid NAT
系统环境:
操作系统:UbuntuLTS 8.04服务器版
Squid:squid Version 2.6.STABLE18
iptables:Iptablesv1.3.8
内网网卡:eth0192.168.33.1/24
外网网卡:eth1 192.168.51.50/24
(一)安装Squid和Iptables,Squid版本2.6与2.5存在不少区别,所以二者在配置上有所差异,尤其在透明代理上的配置上。关于两个软件的下载和安装方法,网上已经有许多文章了,请根据自己的发行版本搜索查看,本文主要写如何配置以实现透明代理。
Squid下载地址:http://www.squid-cache.org
(二)配置iptables,实现NAT,关于iptables作为防火墙使用的安全配置,不是本文的重点。
#首先加载模块
modprobeip_tables
modprobeip_nat_ftp
modprobeip_nat_irc
modprobe-ip_conntrack
modprobe-ip_conntrack_ftp
modprobe-ip_conntrack_irc
#清空旧有配置
/sbin/iptables-F
/sbin/iptables-X
/sbin/iptables-Z
/sbin/iptables-F -t nat
/sbin/iptables-X -t nat
/sbin/iptables-Z -t nat
#设置默认策略
/sbin/iptables-P INPUT ACCEPT
/sbin/iptables-P OUTPUT ACCEPT
/sbin/iptables-P FORWARD ACCETP
echo"1" > /proc/sys/net/ipv4/ip_forward#启用iptbles的数据转发功能,重点步骤一!!
echo"1" > /proc/sys/net/ipv4/tcp_syncookies#安全措施,防syn攻击
iptables-t nat -A POSTROUTING -s 192.168.33.0/24 -o eth1 -j SNAT --to192.168.51.50#实现SNAT,即源地址转换(也称为IP隐藏)执行了这句以后,内网用户无需设置代理,只要把网关指向192.168.33.1就可以上网了,不过此时Squid还没有起作用,33.1只起到网关的作用。重点步骤二
也可使用下面命令实现上述功能,特别当主机采用ADSL等动态ip时,
iptables-t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables-t nat -A PREROUTING -s 192.168.33.0/24 -p tcp --dport 80 -jREDIRECT --to-ports 3128#端口重定向,实现透明代理的重点步骤一,有了这一步,客户端就不必设置代理了,服务器根据用户请求目标端口为80,则自动重定向到3128,交由squid处理,由此实现了http代理;同理,根据Squid的协议支持情况,也可设置ftp代理等。
(三)配置Squid
一些基本的配置这里就不再赘述了,几个关键点讲下。
http_port3128 transparent #配置Squid的监听端口,默认为3128,
#参数transparent是squid2.6版本与先前旧版本一个比较重要的区别,是实现透明代理的重点步骤二,没有该参数则无法实现透明代理,将出现以下错误
ERROR The requested URL could not be retrieved
截图如下
cache_dirufs /var/spool/squid 100 16 256 #设置缓存大小,一级目录、二级目录数量
cache_swap_low90
cache_swap_high95
access_log/var/log/squid/access.log #记录访问日志
cache_log/var/log/squid/cache.log#记录缓存日志
cache_store_log/var/log/squid/store.log
client_netmask255.255.255.255
cache_mgr abcdefg@gmail.com#设置管理员邮箱
cache_effective_userproxy #设置squid以proxy用户身份运行,这点涉及系统安全,具体参见“chroot技术或jail监禁、jail监牢”
cache_effective_groupproxy#功能同上
visible_hostnamesquid_ubuntuXZ #设置主机名
coredump_dir/var/spool/squid
aclbadurl1 dstdomain -i .qq.com
aclbadclient src 192.168.33.20
aclour_networks src 192.168.33.0/24#定义内网ip范围
http_accessdeny badclient #拒绝某些用户上网
http_accessdeny badurl1 #禁止用户访问某些网站
http_accessallow our_networks#允许内网用户使用
http_accessdeny all#拒绝所有未定义动作
(四)其他功能扩展配置
iptables-t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j DNAT--to-destination 192.168.51.55:80#端口重定向
iptables-t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT--to-destination 192.168.51.55:3389#端口重定向
iptables-t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 53 -j DNAT--to-destination 202.101.107.85:53#端口重定向,本句起到智能DNS的作用
iptables-t filter -A INPUT -i eth1 -p icmp -j DROP#禁用icmp
iptables-t filter -A FORWARD -i eth0 -d 192.168.33.20/31 -j DROP#禁止IP为192.168.33.20的客户端上网
iptables-t filter -A FORWARD -d 58.60.9.246 -j DROP#禁止所有用户访问某IP
注意:iptables的配置会在每次系统重启后被还原,因此需要设定自动导入配置文件,在/etc/rc.local中添加相应命令即可,用户可以先用iptables-save导出当前配置,然后用文本编辑器配置好后,再用iptables-restore导入配置即可,如我设定的开机自动导入配置文件为iptables-restore< /var/lib/iptables/saved.cfg 。
当然,iptables和Squid的功能还不只以上所述,关于其他方面的配置,还请关注网上的相关文章,我也将陆续整理一些自己使用中的经验笔记与大家分享,也欢迎大家批评指教,指出我文章中的缺点与不足,呵呵。
(五)缓存管理
对于一些涉及密码或者安全传输的网页内容,则不应当予以缓存,因此还须添加以下内容。
#禁止缓存某些内容
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:// ?
acl QUERY urlpath_regex -i cgi-bin /? /.asp /.php /.jsp /.cgi
acl denyssl urlpath_regex -i ^https://
no_cache deny QUERY
no_cache deny denyssl
#上面几个就是说遇到URL中有包含cgi-bin和以https://开头的都不要缓存,
#还有asp、cgi、php等动态脚本也不要缓存,
#因为这些脚本通常都是动态更新的,这样数据不同步。
http://blog.54master.com/html/24/t-264324.html
感谢zhangxiuyun,在他的文章(http://www.squid-cache.org/Versions/v2/2.6/cfgman/http_port.html)中写到
http_port3128transparent#红色部分是支持透明代理,这是squid新版本的改进。
-------------------------------------------------------------------------------------------------------------------------
延伸阅读:
xunzhao的博客已搬家至: http://xunzhaoxz.itpub.net
主机AIX:
【信息采集】IBM AIX系统硬件配置信息采集完整shell脚本V2.1(附脚本下载) (LU论坛精华帖)
【信息采集】IBM AIX系统硬件信息查看命令(shell脚本)(附截图PDF完整版下载)
操作规范(一)—— AIX rootvg mirror(附PDF下载)
AIX系统安全加固(一)限制密码重试次数,超过限制次数后锁定用户(附截图PDF完整版下载)
数据库Oracle:
新装Oracle11gR2 11.2.0.2重要说明——Patchsetp10098816(附补丁下载地址)
Attention:new installation of Oracle 11.2.0.2
AIX 5.3/6.1环境下安装Oracle10gR2 RAC常见报错(注意事项)
【数据迁移】Oracle10gR2 rman异机恢复实验(FS->RAW)(附截图PDF完整版下载)
【数据迁移】Oracle10gR2 rman异机恢复实验(FS-FS)(附截图PDF完整版下载)
操作规范(二)——RHEL5.4安装Oracle 10.2.0.4(附截图PDF完整版下载)
操作规范(三)——Linux5.4安装Oracle 11gR1(附截图PDF完整版下载)
操作规范(四)——Linux5.4安装Oracle 11gR2(附截图PDF完整版下载)
操作规范(五)——Linux5.4平台下Oracle 11.2.0.2安装指南(附截图PDF完整版下载)
Oracle RAC环境下重建ASM磁盘组(Re-create ASM diskgroup)(附截图PDF完整版下载)
Oracle RAC srv服务“首选”与“可用”状态的调整——srvctl modify service 的使用(附截图PDF完整版下载)
Linux+ASM+OCFS环境下增加ORACLE RAC联机重做日志文件(附截图PDF完整版下载)
备份还原Symantec Netbackup:
搭建NBU实验环境——解决虚拟带库vistor License过期问题(附截图PDF完整版下载)