我的番茄炒蛋
生活如此精彩,挑战无处不在!

导航

 
在FreeBSD下搭建高性能企业级网关与代理服务器
FreeBSD+PF+Squid
1.内核编译
要让FreeBSD作为共享上网服务器,我们还需要编译一个新内核。
(1)编译内核配置文件
首先我们需要编译内核配置文件,使其支持pf和带宽控制。以root身份登录进系统之后,用ee编辑FreeBSD内核配置文件。
nat#ee /usr/src/sys/i386/conf/GENERIC
将光标移动到最后一行,并添加以下内容,保存退出(如图2)。
#提供内核级的pf支持
device pf
device pflog
device pfsync

#提供带宽控制功能
options ALTQ
options ALTQ_CBQ

(2)编译内核
现在执行以下指令,开始编译内核。
nat#cd /usr/src
nat#make kernel KERNCONF=GENERIC

重新编择操作系统内核是一个漫长的过程,你现在可以去喝杯咖啡......
当系统回到提示符下后,重新启动系统。
nat#reboot
(3)让系统自动加载pf
重新以root身份登录系统后,执行以下指令以ee编辑rc.conf文件,让系统开机后自动加载pf。
nat#ee /etc/rc.conf
以下为笔者的rc.conf相关的内容,请各位读者根据自身的需求判断取舍(如图3)。
# 首先设置服务器的主机名
hostname="nat.scetc.net"
# 然后设置服务器的默认网关
defaultrouter="218.6.165.1"
# 允许服务器充当网关的角色
gateway_enable="YES"
# 服务器的两块网卡配置
# bge0是Broadcom Gigabit NIC、接外部网络
# em0是Intel Gigabit NIC、接内部网络
ifconfig_bge0="inet 218.6.165.6 netmask 255.255.255.192"
ifconfig_em0="inet 192.168.0.254 netmask 255.255.0.0"

# 允许系统运行BIND以提供DNS服务
named_enable="YES"
# 允许系统运行squid作为代理服务器
squid_enable="YES"
squid_user="squid"

实现共享上网----最简单的pf配置
需要pf完成的功能都是通过编辑其配置文件来实现的。首先,我们可以写一个最简单的配置文件,让内网的机器没有任何限制地连接上互联网。
# 网卡、IP地址等定义、方便后文调用
ext_if="bge0"  # 外网网卡
int_if="em0"  # 内网网卡
noroute="{127.0.0.1/8,172.16.0.0/12,10.0.0.0/8,255.255.255.255/32}"
# 定义IP欺骗
routerip="192.168.0.254"  # 服务器内网IP
internal_net="192.168.0.0/16"  # 内网IP范围
ext_addr="218.6.165.6"  # 服务器外网IP
loop="lo0"  # 回路设备
# 以下语句用来实现透明共享上网
# 所有内部请求都通过外部网卡出去
nat on $ext_if from $internal_net to any ->($ext_if)
# 允许所有的访问都通过本网关
pass in all
pass out all

pf控制指令
当我们按照自己的需求重新配置了pf之后,难道就必须重新启动服务器才能让新规则生效?答案是否定的。我们可以通过pf控制命令来重新加载新的应用规则,或者帮助管理员随时了解pf的运作情况。
1.打开或者关闭pf
pf提供了pfctl指令来控制pf的运作。
pfctl -e  ;启动pf
pfctl -d  ;关闭pf
不过这里还需要说明的是,pfctl -e只是启用了pf,但是并没有加载任何规则。
2.重新加载pf配置
当我们修改了pf的配置文件pf.conf之后,可以通过以下命令,使用新的配置而无须重新启动pf服务。
pfctl -f /etc/pf.conf
如果我们仅仅只是想确认加载配置文件中的nat规则:
pfctl -nf /etc/pf.conf
甚至我们还可以只重新加载配置文件中的nat规则:
pfctl -Nf /etc/pf.conf
或者防火墙过滤规则:
pfctl -Rf /etc/pf.conf
3.查看服务器运作情况
为了让管理员更好地了解pf工作情况,pfctl还提供了以下几个十分有用的服务器壮态查看参数。
查看nat规则:pfctl -sn
查看过滤规则:pfctl -sr |more
另外,我们还可以通过以下指令查看服务器的工作壮态(如图4)
查看pf工作状态:pfctl -ss
查看pf过滤状态:pfctl -si
查看所有统计数据:pfctl -sa
小技巧:让网关工作更高效----优化pf
要使pf有更好的性能和稳定性,我们还需要对pf进行微观的调控。
pf的调控主要包括set timeout、set limit、set optimization和set block-policy等参数,下面为笔者的参数优化配置部分,各位可以参考。
set timeout{interval 10,frag 30}
set limit{states 10000,frag 5000}
set optimization aggressive        
set block-policy drop
scrub in all

pf进阶技巧
以上为pf最基本的设置以及监控命令,不同的企业肯定会根据自身的要求而制定不同的网关配置。
1.QQ止步
有的单位不希望某些计算机使用QQ,这个功能通过pf的过滤规则可以轻松实现。
(1)定义QQ服务器
我们首先将QQ服务器的IP地址定义为一个字符串(建议大家将所有的定义存放到配置文件的同一部分,方便以后调用,修改)。
# 定义QQ服务器的IP地址
QQServerIPs="{202.103.149.40,202.103.190.61,......,218.17.114.0/24}"
由于篇幅所限,本文的QQ服务器IP地址没有完全列举,有需要的朋友请到本刊网站online.cniti.com下载。
(2)定义禁止使用QQ者
现在我们来定义禁止使用QQ的计算机IP地址段,并为其取名“Book_lib”。
# 定义图书馆多媒体阅览室的IP范围
Book_Lib="{192.168.0.184/29,192.168.0.192/27,192.168.0.224/28,
192.168.200.128/25}"

(3)定义pf过滤规则
在pf.conf中再加入以下语句就可以防止多媒体阅览室使用者使用QQ了。
# 不允许图书馆的多媒体阅览室使用QQ
block quick on $ext_if from $QQServerIPs to $Book_Lib
block quick on $int_if from $Book_Lib to $QQServerIPs

所有规则指定完毕,执行"pfctl -f /etc/pf.conf使新规则生效。这样没有得到授权的用户就不能使用QQ了。
注意:有些用户还可能通过Squid提供的代理使用QQ。关于如何防止通过Squid代理使用QQ,我们在后文Squid配置中会进行相应的介绍。
至于禁止内部某一段风络玩联众游戏、ChineseGames、泡泡堂等网络游戏的实现方法,和QQ限制大同小异。请读者朋大自行配置。

2.我不要下载3721插件
我们这里的用户很反感3721,它占用了大量的网络带宽,所以,我的首要任务还包括如何禁止下载3721插件。
还要在pf.conf中加入相应的内容,然后设置为所有用户都不访问3721网站即可。
# 定义3721的IP地址段
Damn_3721="{218.244.45.0/24,......,218.224.44.5/32,202.165.102.158/32}"
# 不允许所有计算机访问3721
block quick on $ext_if from $Damn_3721 to any
block quick on $int_if from any to $Damn_3721

3.内网网站的发布
为了安全,管理员一般将Web服务器放到内网中。Internet上的计算机要访问pf后面的Web服务器,就需要我们在pf中进行相应设置。
假设内网Web服务器IP地址为192.168.0.10的工作端口为80。我们可以把pf服务器上的80端口影射到内网的Web服务器的80端口上去。
# 对pf服务器外网IP的80端口的访问转发到内部机器192.168.0.10的80端口
rdr on $ext_if proto tcp from any to $ext_addr port 80 ->192.168.0.10 port 80
4.禁止访问高危端口
作为企业网关,肯定是会受到无聊人的扫描以及入侵的,另外,冲击波等蠕虫病毒也可以通过网关入侵。如何防范这些攻击或者扫描成为pf管理员必须考虑的安全问题。
我们可以定义一些高危端口,然后对这些端口的访问进行特别的限制。
# 定义高危端口
Danger_Port="{445 135 139 593 5554 9995 9996}"
# 禁止内部网络和外部网络的机器访问服务器的135、139等高危端口
block quick on $int_if inet proto tcp from any to any port $Danger_Port
block quick on $ext_if inet proto tcp from any to any port $Danger_Port

在这个规则中我们使用了“from any to any”也就表示了,无论是内部网络还是外部网络,都无法访问这些被定义的端口。有的读者也许会问,为什么连内部也禁止掉了呢?这个问题我们需要解释一下。大家知道,对于一个企业网关来说,最大的威胁也许不是外部网络,而是内部网络,原因很简单----内部网络的带宽绝对比外部网络好。人人都可以高速(比如100Mb/s)向服务器发送和接收数据包。要是内部有两个人存心捣蛋的话,那么应该能够比得上外部的几十台计算机。
另外,这样也可以避免“冲击波”等病毒和网关发生任何不正常的关系......这对一个有VLAN的网络来说是尤其重要----在冲击波肆虐的时候,网关和不同VLAN的计算机可以正常地使用网络,而只有中了冲击波的电脑所在VLAN会比较不正常。这样就可以将损失降低到最低点。
5.防范扫描
同样的,网关肯定是经常会受到很多扫描的,而现在最流行,威力最强大扫描工具之一----nmap(已经有UNIX版和windows版多种版本了)会是网关的一个非常历害的敌人。我们必须要给nmap来点扫描难度......这样做虽然不能绝对让网关防止被扫描,但是至少可以更大程度地拒绝nmap这些可怕的扫描工具......
# 禁止使用nmap对服务器进行端口扫描
block log quick on $ext_if inet proto tcp from any to any flags FUP/FUP
block quick on $ext_if inet proto tcp from any to any flags SF/SFRA
block  quick on $ext_if inet proto tcp from any to any flags /SFRA
block quick on $ext_if on NMAP

6.防止IP欺骗
IP欺骗也是一个比较可恶的入侵手段,特别是对于拥有VPN的公司也说,防止IP欺骗非常有必要,我们可以通过以下定义和规则来解决掉一部分IP地址欺骗问题。
# 定义IP欺骗
noroute="{127.0.0.1/8,127.16.0.0/12,10.0.0/8,255.255.255.255/32}"
# 防止IP欺骗
antispoof quick for $int_if inet
block quick on $ext_if inet from $noroute to any
block quick on $ext_if inet from any to $noroute

本单位的服务器经常被很多无聊的人采用字典工具进行入侵。那么遇到了这样的情况之后,我们肯定是需要对这些IP进行封禁处理的。如何去做呢?通过以下的规则就可以很方便地解决这个问题。您所需要做的就是维护这个“Hack_IPs”地址表。
# 定义而已扫描以及入侵的IP地址
Hack_IPs="{220.166.11.92/32}"
# 不与恶意扫描、入侵IP发生任何关系
block quick on $ext_if from $Hack_IPs to any
block quick on $ext_if from any to $Hack_IPs

7.更安全的共享上网
到现在为止,过滤规则已经设置得差不多了,但是还记得我们开始设置的那两条危险的规则“pass in all”和“pass out all”吗?为了安全起见,我们必须要禁止掉这两条规则,然后让内网以安全方式访问Internet。
# 企业级安全网关的做法
# 先阻止所有进入网关/从网关出去的数据
block in all
block out all

# 再逐个开放需要的权限
# 允许回路网络进出网关
pass in quick on lo0 all keep state
pass out quick on lo0 all keep state

# 允许网络内部机器ping任何资源
# 不允许互联网机器ping服务器外部网卡
block in on $ext_if inet proto icmp all icmp-type 8 code 0
pass out on $ext_if inet proto icmp all icmp-type 8 code 0 keep state
pass in quick on $ext_if inet proto icmp all icmp-type 8 code 0

# 允许所有的UDP连接通过网关出去
# keep state
pass out on $ext_if proto udp all keep state

# 允许外部的DNS请求进入本网关,本网关提供DNS服务
pass in on $ext_if proto udp from any to any port=domain keep state
# 允许所有的TCP连接通过本网关出去
# modulate state
pass out on $ext_if proto tcp all modu-late state

# 允许外部访问前边定义的"tcp_services"
# 端口服务并keep state
pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services flags S/SA keep state
# 允许标记的TCP封包通地字根表网关外出
pass out on $ext_if proto tcp all modulate state flags S/SA
# 允许互联网计算机连接本网关的22端口提供给管理员ssh2管理权限
pass in on $ext_if proto tcp from any to $ext_if port 22 keep state
pass in on $int_if proto tcp from any to $int_if port 22 keep state

# 允许内部网络机器访问本网关的内部IP地址的8080端口(Squid代理端口)
pass in on $int_if inet proto tcp from any to $routerip port 8080 keep state
pf链中,每个数据包自上至下接受规则过滤。最后的匹配规则是“一家之主”----他说了算!不过quick关键字可以取消进一步往下处理。如果你希望阻止掉某个访问,就不要这样写:
block in on fxp0 proto tcp from any to any port ssh
pass in all

因为最后一行会允许所有的流量通过。应该修改成:
block in quick on fxp0 proto tcp from any to any port ssh
pass in all

到这里pf的常用规则应该都介绍完了。通过这些规则的组合,你一定能够写出适合自己企业使用的pf配置文件。
如果你想让pf搭配Squid实现一个性能更加强大的具备Cache功能的网关+代理服务器,请继续关注我们下期的相关内容。
本刊上期介绍了如何在FreeBSD下通过pf实现共享上网。但单纯通过pf实现的共享上网,由于没有缓存(代理机制),所以效率不是十分高。本文我们将用Squid来配合pf实现更高效率的共享上网。
开源代理服务器之王----Squid
Squid是Linux下最为流行的代理服务器软件。它功能强大,支持对HTTP、FTP、Gopher、SSL和WAIS等协议的代理;它的设置也很简单,只需对配置文件稍稍改动就可使代理服务器运转起来。Squid还具有页面缓存功能,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户要下载一个页面时,它向Squid发出一个申请,要Squid替它下载,Squid会获取所请求页面,将其传给用户同时保留一个备份。这样,当别的用户需要访问同样的页面时,Squid会把保存的备份立即传给用户,而不用重新到Internet服务器上获取,这样一则加快了访问速度,另外还可以节省有限的带宽。
如果你在通过Squid共享上网时使用信用卡网上消费,执行远方的Scripts,这些内容缓存起来是不太合适的。Squid可以智能选择需要缓存的内容,管理员也可以根据自己的需要设置Squid,使它不要缓存相关的内容。
Squid可以工作在众多的操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris和OS/2,也有不少人在其他操作系统中编译并运行过Squid。
安装Squid
好了废话不说了,我们现在就在 FreeBSD中安装Squid。接触过FreeBSD的朋友,应该都知道,FreeBSD下有一种非常方便的软件安装方法----ports安装。
小知识:Squid
FreeBSD下,我们也可以直接编择源代码来安装Squid这款开放源代码的代理服务器软件。Squid目前的最新版本为2.5 STABLE9,其官方网址为:http://www.squid-cache.org/。

如果你已经采用完全安装方式部署了FreeBSD系统,下面就可以跟着我很快完成Squid安装(采用ports方式安装的Squid为2.5 STABLE9)。
在通过ports方式安装之前,我们首先应该通过cvsup来更新FreeBSD的ports树目录,这样才能保证正确安装。由于篇幅所限,我们这里不能详细地介绍cvsup的使用方法,请大家参考相关文章进行ports目录树更新。
nat# cd /usr/ports/www/squid
nat# make install clean

此时,会弹出一个图形界面的Squid安装选项配置界面(如图1)。按照默认的选择,Squid已经可以很好地工作,读者朋友也可以根据自己的不同需求进行选项。全部选项,则可以让它支持更多的代理,身份认证并且能以通过SNMP方式进行管理。
以下是笔者的选项,仅供参考:
[  ]  SQUID_LDAP_AUTH
[ X ]  SQUID_DELAY_POOLS
[ X ]  SQUID_SNMP
[  ]  SQUID_CARP
[ X ]  SQUID_SSL
[  ]  SQUID_PINGER
[ X ]  SQUID_DNS_HELPER
[  ]  SQUID_HTCP
[ X ]  SQUID_VIA_DB
[ X ]  SQUID_CACHE_DIGESTS
[ X ]  SQUID_WCCP
[ X ]  SQUID_UNDERSCORES
[ X ]  SQUID_CHECK_HOSTNAME
[  ]  SQUID_STRICT_HTTP
[ X ]  SQUID_IDENT
[  ]  SQUID_USERAGENT_LOG
[ X ]  SQUID_ARP_ACL
[ X ]  SQUID_PF
[  ]  SQUID_FOLLOW_XFF
[  ]  SQUID_AUFS
[  ]  SQUID_COSS
[  ]  SQUID_STACKTRACES
[ X ]  SQUID_RCNG

根据自己的网络情况,Squid的源代码包会被服务器自动从网上下载下来,然后自动地进行编择并安装到计算机上(如图2)。
配置Squid
现在我们就来对squid进行配置。
nat# ee /usr/local/etc/squid/squid.conf
以下配置文件为本人的实例,大家可以根据自己的需要进行删改。
在具体使用时,由于服务器的配置不同,以及网络情况、连接情况都有不同,配置文件会有所差别。笔者对重要语句都进行了注释,方便读者根据实际情况进行修改。
# Squid的侦听IP以及端口(内网)
http_port 192.168.0.254:8080
# 额外使用内存量,可根据你的系统内存设定,一般为实际内存的1/3
cache_mem 256 MB
# 最低的缓存百分比
cache_swap_low 80
# 最高的缓存比率,超过此比例就开始删除旧缓存,直到满足最低缓存比率后停止删除
cache_swap_high 95
# 不缓存超过100MB的单个内容
maximum_obiect_size 100 MB
# 内存中单个文件最大容量
maximum_obiect_size_in_memory 512 KB
#      
# cache目录所在地与所占用的磁盘大小则请视主机情况而定,dir1是指在cache目录下建立dir1所设的数值个目录,dir2是指在每一个dir1目录下建立dir2个目录保存缓存。
cache_dir ufs /cache/squid 512 128 256
# 缓存的日志文件存放位置
# 如果不需要日志,可以设置为/dev/null
cache_access_log /data/log/squid/access.log
cache_store_log none
# DNS服务子进程,如果客户端出现无法解析域名错误,请酌情增加
dns_children 60
# 转向进程,不用SquidGuard可以注释掉
#redirect_children 10
# 超过5分种没反应则放弃访问
connect_timeout 5 minute
# 连接上层代理的超时时间
peer_connect_timeout 30 seconds
# 返回超时
request_timeout 2 minutes
# 持续连接时间
persistent_request_timeout 1 minute
read_timeout 5 minute
half_closed_clients off
pconn_timeout 300 seconds

# 访问控制列表
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563

# 加密端口
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563    # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535  # unregistered ports
# 未加密端口
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
acl CONNECT method CONNECT

# 定义http连接方式
# 定义内部网络IP地址
acl our_networks src 192.168.0.0/16
# 只允许cachemgr以localhost方式访问
http_access allow manager localhost
http_access deny manager

# 禁止所有以上未安义的端口通过Squid
http_access deny !Safe_ports
# 禁止连接非加密端口外的所有端口
http_access deny CONNECT !SSL_ports
# 允许LAN内所有机器通过squid访问
http_access allow our_networks
http_access deny all
http_reply_access allow all
icp_access allow all

# 管理员邮箱地址
cache_mgr webmaster@scetc.net
# 以squid身份运行squid
cache_effective_user squid
cache_effective_group squid

# 代理服务器名称
visible_hostname nat.scetc.net
# 设置透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

# 平均缓存目标大小
store_avg_object_size 64 KB
# 出错提示页面语言种类
error_directory /usr/local/etc/squid/errors/Simplify_Chinese
# 当Squid突然挂掉的时候,系统会将Squid内存中的资料写以硬盘中,一般不需要
coredump_dir none
ignore_unknown_nameservers off

初始化Squid
配置完成之后,应该检查目录权限是否正确,否则Squid无法启动。
1.目录权限设置
首先需要确定Squid本身的目录属性的User ID以及Group ID是否都是squid。如果您无法判断,那么请执行以下指令。把Squid的目录以及所有子目录的属主都给squid。
nat# chown -R squid:squid /usr/local/etc/squid
然后检查cache以及log目录的属主的User ID以及Group ID是否都是squid。或者直接执行以下指令设置其属主为squid。
nat# chown -R squid:squid /cache/squid
nat# chown -R squid:squid /data/log/squid

接下来我们开始初始化squid的cache目录。由于开始我们设置的cache目录结构为“cache_dir ufs /cache/squid 512 128 256”,所以系统将会在cache分区,或者是cache目录下建立“128*256=32768”个目录,这个过程可能会消耗掉30-40秒左右,其间您也可以看到硬盘灯会长亮这么久。
nat# squid -z
完成了这个命令以后,Squid就可以正常服务了。
Squid高级配置
以上的配置文件只包含了最基本的功能,而没有进行任何的优化,以下我们来对其进行一定的优化配置。
1.加快DNS解析速度
设置一个DNS缓存,将DNS正反解所得到的解析结果存在缓存区,可以加快解析速度。
ipcache_size 65535
ipcache_log 80
ipcache_high 95
fqdncache_size 32768

2.禁止缓存设置
我们前边提到过,信用卡账号,可以执行的scripts,经常变换主页等如果进行了缓存是不合适的也是不安全的。如果需要Squid自动处理,我们就需要用“禁止缓存规则”。
我们通过以下规则禁止squid对https站点、cgi、asp、php、jsp等脚本程序进行缓存。
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:// ?
acl QUERY urlpath_regex -i cgi-bin\? \.asp \.php \.jsp \.cgi
no_cache deny QUERY
acl denyssl urlpath_regex -i ^https://
no_cache deny denyssl

对我们不希望缓存的站点,可以建立一个NoCache文件,将不需要缓存的站点列表保存在里面,然后让squid禁止对NoCache文件中的站点进行缓存。
acl nocache url_regex -i "/usr/local/etc/squid/NoCache"
no_cache deny nocache

NoCache文件中,每一行一个站点。不要忘记将这个文件中的属主改为squid。
nat# chown -R squid:squid /usr/local/etc/squid/NoCache
3.访问控制
下面我们来看看Squid安全使用最重要的访问控制配置。大家还记得我们在pf的设置里禁止上QQ,但是QQ仍然可以通过Squid提供的http代理上线。如何杜绝这种非法网络访问呢?这就涉及到了Squid的访问控制。
首先,我们定义禁止使用QQ的IP地址段,以及QQ服务器的IP地址群。前者定义为src,后者定义为dst。
* 定义不允许使用QQ的IP地址段
acl book1 src 192.168.0.184/29
acl book2 src 192.168.0.192/27
acl book3 src 192.168.0.224/28
acl book4 src 192.168.200.128/25

* 定义QQ的服务器IP地址
需要注意的是QQ服务器IP地址段最好写在一行内,或者使用“\”符号分行书写。
acl QQ dst 202.103.149.40 202.103.190.61 ...... 219.129.21.0/24 202.94.140.0/24 218.17.114.0/24
* 访问限制
禁止多媒体阅览室机器通过http方式登陆QQ(补充pf的规则)
http_access deny book1 QQ
http_access deny book2 QQ
http_access deny book3 QQ
http_access deny book4 QQ

这样设置之后,内部禁止掉QQ的那些IP段就不可能通过Squid代理来进行QQ登陆了。
其实,还有更简单的实现方式。我们只需要定义一个源,一个目标,然后让源只能访问目标,其他的全部禁止掉就可以了。
# 定义终端查询机器(只能访问某些站点)
acl query_terminal src 192.168.200.96/28
# 定义单位对外的Web服务IP地址
acl school_ips dst 218.6.165.8 218.6.165.7
# 只允许查询终端访问单位的外部IP地址
http_access allow query_terminal school_ips
http_access deny query_terminal all

4.透明代理
如果你希望做透明代理,那么需要用到rdr。假设现在已经在服务器上做好了代理服务器,而希望所有的Web访问均通过代理服务器出去,而不是通过pf。这样Squid代理的高效率才能得到充分的体现。
假设Web代理服务器的端口为8080,那么我们可以通过以下规则来让所有的Web访问均通过代理服务器出去。
rdr on $int_if inet proto tcp from $internal_net to any www -> 192.168.0.254 port 8080
凡是对外80端口的访问,都统统转发到网关上Squid侦听端口。以后,客户端只需要将网关设置为nat的内部IP地址,不用在IE上设置代理服务器,实际上还是通过Squid代理进行Internet访问。
Squid加上以前配置的pf规则,我们已经实现了一个企业网关+透明代理了。现在,你就可以向内部网络发布你的网关使用方法了。
posted on 2008-07-14 14:36  bluesky  阅读(1324)  评论(0编辑  收藏  举报