RedHat Linux9下 squid+iptables 透明网关设置

我们在RedHat Linux9下,利用iptables和squid配合,来建立透明代理服务器

一、squid的安装配置
首先,我们在www.squid-cache.org下载squid的2.5稳定版(STABLE Version),squid-2.5.STABLE6.tar.gz,得到原文件后,开始我们的编译与配置:

tar xzvf squid-2.5.STABLE6.tar.gz # 解开压缩包到当前目录
cd squid-2.5.STABLE6 #改变路径到squid-2.5.STABLE6

vi src/dnsserver.c
编辑dnsserver.c文件,查找字符串"if (32 == i)",把32改成"64"
这样做的目的就是加大dnsserver子进程的最大并发数,如果不修改的话,默认的最大并发数为32,代理的机器较多的话,DNS的查询就会较变慢,影响访问速度。

编译squid
./configure --prefix=/usr/local/squid --enable-arp-acl --enable-default-err-language="Simplify_Chinese" --enable-snmp --enable-underscores --enable-ssl --enable-linux-netfilter --enable-icmp --disable-internal-dns

下面一个个来解释编译选项的作用
--prefix=/usr/local/squid --> 指定squid的安装路径为/usr/local/squid
--enable-arp-acl --> 打开地址解析协议(Address Resolution Protocol,ARP)支持,也就是把IP地址转换为相应的MAC地址的协议,这样我们就可以让squid基于MAC地址来做上网的控制,这个选项是关键
--enable-default-err-language="Simplify_Chinese" --> 把简体中文设置为默认的出错页面语言
--enable-snmp --> 打开squid的SNMP(简单网络管理协议)协议的支持
--enable-underscores --> 使squid支持带下划线的网址,默认的,squid是不支持类似于www.acx_cn.com这样的URL的
--enable-ssl --> 打开SSL的支持
--enable-linux-netfilter --> 使squid支持linux-netfilter,也就是iptables,不过这一项开不开似乎关系不大
--enable-icmp --> 打开icmp协议的支持
--disable-internal-dns --> 禁用squid内置的DNS支持

编译完成后,运行
make;make install

这样,squid就安装好了
为了配置成透明网关,我们需要修改squid的配置文件squid.conf
cd /usr/local/squid/etc
vi squid.conf

添加以下四行

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on


并且修改dns_children 5 为 dns_children 50
redirect_children 5 改为redirect_children 50 # redirect就是网页的重定向
dns_nameservers 202.96.209.5 202.103.96.133 #添加DNS服务器地址
保存退出

接下来,我们要开始运行squid了
cd /usr/local/squid
chown -R nobody.nobody var # 改变/usr/local/squid/var目录的用户及用户组为nobody,使得下面squid在创建cache目录的时候有相应的权限
/usr/local/squid/sbin/squid -z # 创建cache目录
/usr/local/squid/sbin/squid -D
而后,用netstat -ln查看系统的监听端口,出现如下两行,那么说明squid就运行起来了,3128是squid的默认监听端口,如果没有在squid.conf文件中修改http_port 3128的话
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:3130 0.0.0.0:*

二、iptables的修改
接着,我们来修改iptables规则,使之成为透明网关
在iptables的规则中添加一句
/sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
把来自eth1(内网)的目标端口为80的封包转发到本机的3128端口,也就是squid的监听端口,实现对http的控制与访问日志的纪录

编辑/etc/sysctl.conf,将net.ipv4.ip_forward=0 该为net.ipv4.ip_forward=1,保存修改。其目的是允许LINUX内核做IP包的转发:允许IP数据包从一个网络接口穿越到另一个网络接口,只有这样,系统才具有充当包过滤防火墙的条件

至此,我们完成了squid+iptables的透明代理的设置

三、访问控制
最后,我们开始squid的ACL(访问控制列表)的设置,即上网的权限控制
vi /usr/local/squid/etc/squid.conf
默认的是禁止一切访问
http_access deny all

我们来对ACL做修改
ACL的格式如下:

acl name type value1 value2 ...

For Example:

# time Control
acl working_time time MTWHF 7:00-11:00 # MTWHF 指周一到周五,MTWHF分别是周一(Monday)...周五(Friday)的英文名的首字母,7:00-11:00 就是上午7点到11点时间段
acl working_time time MTWHF 12:30-17:00 # time 部分指的是该acl类型为time类

#User Control
# acl name arp 是指该acl类型为arp,即MAC地址的控制,后面可跟00:E0:4C:46:73:28这样的MAC地址,也可以跟文本文件,文本文件中的MAC地址要一个一行。
acl PH-Advance arp '/usr/local/squid/etc/FN-Advance.txt' # FN-Advance.txt为财务部的开通上网机器的MAC地址列表文件
acl PH-Detail arp '/usr/local/squid/etc/FN-Detail.txt' # FN-Advance.txt为财务部一般人员机器的MAC地址列表文件
acl test arp 00:E0:4C:46:73:28 # 指定test的MAC地址

http_access allow FN-Advance #允许MAC地址符合FN-Advance中记载的机器可以不受限制地上网
http_acccess deny working_time # 禁止其他人员在上班时段上网
http_access allow FN-Detail !working_time # 允许其他人员在非上班时段上网
http_access deny all # 禁止其他所有访问

保存退出,重启squid使修改生效
/usr/local/squid/sbin/squid -k reconfigure

Leave a comment

Recent Entries

  • Lync Server 2010 发布架构报错

    昨天想试试在现有的 OCS 2007 R2 的基础上部署 Lync Server 2010 试试看,装好 Topology Builder 之后,新建了一个拓扑,然后把该填的都填了,发布的时候老是报SQL错,很是郁闷,后来终于在log中找到了错误原因:  Script result: ERROR_VALIDATE_BAD_SQL_VERSION Error: Script failed (code "ERROR_VALIDATE_BAD_SQL_VERSION") when installing "CentralMgmtStore" on "LyncServer01.mail2any.local"....

  • 使用 URL Rewrite 重定向 Http 请求至 Https

    公司部署了个新的 IIS 站点,需要强制在 Https 下面访问,但是又不希望关掉80端口的 Http 请求,这样对用户体验来讲不好,最好是能强制所有的 Http 请求都会被重定向到 Https 上面去,显然, IIS 自带的 "HTTP Redirect" 已经不能满足这个需求,我们这里使用 IIS 7.0 下面的重定向扩展 URL Rewrite Module 来做。1. http://www.iis.net/download/URLRewrite 到这里下载,有分...

  • How to remember your OC and Outlook password

    How to make your computer remember your Microsoft Communicator 2007 R2 and Outlook 2007 password (如何让你的电脑在非域环境中记住 OC 2007 R2 和 Outlook 的密码)我们知道,在域的环境中,使用 OC 和 Outlook...

  • 微软 CRM 2011 Beta 快速安装图解

    微软在9月17日在网站上放出了 CRM 2011 (也就是CRM5.0)的 beta 版本,我就先来个简单的快读安装图解,一睹为快,下个月会写点新版 CRM 的使用感受。 下载: Microsoft Dynamics CRM 2011 Beta Microsoft Dynamics CRM 2011 Software Development Kit (SDK)Microsoft Dynamics CRM 2011...

  • 升级到 Exchange 2010 SP1 后出现的2个小问题

    今天有空把所有的 Exchange 服务器从 2010 RTM 升级到了 2010 SP1 了, 升级完了后发现了2个小问题: OWA打开正常,但是点到 ECP 的时候报 403 访问拒绝错误 某台 Exchange 打开 EMS 时报错如下: [server.mydomain.local] Connecting to remote server failed...

Close