查看完整版本: 实例:配置OpenBSD 4.2为安全代理服务器

dual 2008-5-23 09:49

实例:配置OpenBSD 4.2为安全代理服务器

作者: 曹江华,  出处:IT专家网

  [font=Verdana]【[url=http://whatis.ctocio.com.cn/searchwhatis/250/6025750.shtml][color=#16387c]IT[/color][/url]专家网独家】[/font]与其它[url=http://whatis.ctocio.com.cn/searchwhatis/397/7493897.shtml][color=#16387c]BSD[/color][/url] 和大多数[url=http://whatis.ctocio.com.cn/searchwhatis/141/5949141.shtml][color=#16387c]Unix[/color][/url]的特点不同,[url=http://security.ctocio.com.cn/tips/186/5844686.shtml][color=#16387c][b]OpenBSD[/b] [/color][/url]安装了一切功能, 但是禁用了绝对重要的服务。习惯于在[url=http://whatis.ctocio.com.cn/searchwhatis/210/5948710.shtml][color=#16387c]Linux[/color][/url]安装之后就拥有[url=http://whatis.ctocio.com.cn/searchwhatis/417/6093417.shtml][color=#16387c]NFS[/color][/url]、Telnet、Finger、FTP和其它功能用户会发现, 必须要具体地启用而不是禁用[b][url=http://security.ctocio.com.cn/tips/186/5844686.shtml][color=#16387c]OpenBSD[/color][/url][/b]中的这些服务。[b]OpenBSD [/b]采取的这种设计是防止这些功能被意外打开, 从而造成潜在的安全突破。前面简单介绍OpenBSD 的时候已经提到,[b][url=http://security.ctocio.com.cn/tips/186/5844686.shtml][color=#16387c]OpenBSD[/color][/url][/b]默认安装已经非常安全,如果希望再进一步优化,可以考虑对内核进行精简,并重新编译。
  
      因为 OpenBSD 很小并且很安全,所以[b][url=http://security.ctocio.com.cn/tips/186/5844686.shtml][color=#16387c]OpenBSD[/color][/url]实现的最常见目标之一是用作防火墙和代理服务器[/b]。代理服务器从底层对大多数安全单元进行操作,并且 OpenBSD 的[url=http://whatis.ctocio.com.cn/searchwhatis/207/7352207.shtml][color=#16387c]包过滤[/color][/url]实现是非常优秀的。
  
      [b]一、相关知识点[/b]
  
      [b]1. pf[/b]
  
       pf是[url=http://whatis.ctocio.com.cn/searchwhatis/385/6025885.shtml][color=#16387c]packet[/color][/url] filter的缩写,中文翻译为包过滤(以下简称pf),它是openbsd系统上进行tcp/ 流量过滤和网络地址转换(nat)的软件系统。pf同样也能提供tcp/ip流量的整形和控制, 并且提供带宽控制和数据包优先级控制。硬件防火墙能完成的功能它几乎都能胜任,虽然一般只是用它来做nat,但绝不仅仅只能做nat。Packet Filter (PF),OpenBSD 开发社区设计的开放源代码解决方案,它是 OpenBSD 所选择的方法。与 OpenBSD 软件的其它许多部分一样,这种方法非常成功,以至于其它的 [url=http://whatis.ctocio.com.cn/searchwhatis/484/7493984.shtml][color=#16387c]BS[/color][/url]D 变种纷纷将其移植到自己的分发版中。OpenBSD 配置为缺省安全,所以在设置坚如盘石的防火墙时,您无需关闭过多的服务。您需要启用第二个 Ethernet 接口,并根据需要配置 PF。
  
      [b]2. Squid工作原理和流程图[/b]
  
      代理服务器的工作机制
  
      代理服务器的工作机制很象我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。
  
      squid[url=http://whatis.ctocio.com.cn/searchwhatis/261/7352261.shtml][color=#16387c]工作流[/color][/url]程:图1是Squid工作原理图。
  [img=420,300]http://security.ctocio.com.cn/imagelist/2008/142/gk22h1b8rb27.jpg[/img]
                                    图1 Squid工作原理图
  
      1.客户端计算机向 代理服务器 端发送一个数据需求封包;
  2.代理服务器 端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,那么代理服务器 端会预计开始替客户端计算机获取信息。
  3.代理服务器首先会到自己的硬盘里面,也就是所谓的 [url=http://whatis.ctocio.com.cn/searchwhatis/459/5946959.shtml][color=#16387c]cache[/color][/url] (缓存) 查看一下有没有 客户端计算机 端所需要的数据,如果有的话,那就将数据直接送到客户端计算机端,而不向互联网获取信息。
  4. 将数据传回给客户端计算机端使用。
  5.在经过以上三部查寻知道缓存没有数据,或者数据过期之后,代理服务器会向互联网上面的目标网站要求数据;
  6.在将数据取回之后,代理服务器会先将取得的数据储存一份到缓存当中。
  7.最后才将数据传回给客户端计算机 端使用。

      [b]二、配置pf[/b]
  
      安装好openbsd系统以后使用pf是个很简单的事情, 只需要在/etc/rc.conf.local里面加入“pf=yes” 一行即可。重启系统让配置生效。
  
      你也可以通过pfctl程序启动和停止pf
[table=95%][tr][td]      # pfctl -e
  # pfctl -d[/td][/tr][/table]
  注意这仅仅是启动和关闭pf,实际它不会载入规则集,规则集要么在系统启动时载入,要么在pf启动后通过命令单独载入。如果要记录日志,需要再加入下面两行: 
[table=95%][tr][td]      pflog_enable="yes"                  # 启动 pflogd(8)
  pflog_logfile="/var/log/pflog"    # pflogd 用于记录日志的文件名[/td][/tr][/table]
  openbsd系统安装以后使用pf成为nat的网络环境如图2:

  [img=499,264]http://security.ctocio.com.cn/imagelist/2008/142/h8t8956tb9nx.jpg[/img]
                                                  图 2 简单 网络环境
  
      基于openbsd 4.2 的代理服务器配置双网卡:fxp0 和fxp1 。fxp0网卡是公网的地址, 接外网出口, fxpl是rfc1918规定的私有地址, 接内网。
  
      配置文件如下:
[table=95%][tr][td]      /etc/hostname. fxp0:
  inet 10.0.0.254 255.255.255.0 none
  /etc/hostname. fxp1:
  inet 192.168.0.254 255.255.255.0 none[/td][/tr][/table]
  开始设定 桥接模式,让两网卡通透,并且各自设定一个 [url=http://whatis.ctocio.com.cn/searchwhatis/191/6025691.shtml][color=#16387c]IP[/color][/url] :
[table=95%][tr][td]#vi /etc/hostname.fxp0
inet 88.88.88.1 255.255.255.0 NONE     
  
#vi /etc/hostname. fxp1
inet 88.88.88.2 255.255.255.255 NONE    #  同一网段内的 IP ,第二片网卡的 IP Mask 不能设 255.255.255.0 要改 255.255.255.255
  
#vi bridgename.bridge0  
add fxp0
add fxp1
up[/td][/tr][/table]
  建立规则文件:
  
      [url=http://whatis.ctocio.com.cn/searchwhatis/420/6026420.shtml][color=#16387c]sudo[/color][/url] pfctl -ef /etc/pf.conf
  
      文件内容:
[table=95%][tr][td]      #################################################################
  # 宏定义
  ext_if = " fxp0"
  [url=http://whatis.ctocio.com.cn/searchwhatis/69/6025569.shtml][color=#16387c]int[/color][/url]_if = " fxp1"
  # rdr
  rdr on $int_if inet proto tcp from any to any [url=http://whatis.ctocio.com.cn/searchwhatis/199/6026199.shtml][color=#16387c]port[/color][/url] www -> 88.88.88.2 port 3128
  # [url=http://whatis.ctocio.com.cn/searchwhatis/408/5947908.shtml][color=#16387c]filter[/color][/url] rules
  pass in all
  pass out all
  #################################################################[/td][/tr][/table]
  因为要在两个网卡之间路由数据包,所以需要在/etc/sysctl.conf里加入如下代码:
[table=95%][tr][td]      [url=http://whatis.ctocio.com.cn/searchwhatis/325/6025825.shtml][color=#16387c]net[/color][/url].inet.ip.forwarding=1
  net.inet6.ip6.forwarding=1[/td][/tr][/table]
  说明:openbsd 有一个在系统引导时执行的配置文件。这使您可以更改运行中的内核,并将这些更改添加到配置文件,以便于在系统重新引导之后,这些更改仍然生效。该实用程序称为 sysctl ,在 sysctl(8) 的联机帮助页中,对这个实用程序进行了完整的文档说明。 sysctl 的配置文件是 /etc/sysctl.conf 。这些行是本来就存在的,但默认安装中被#前缀注释掉了。删除#,保存文件,IP转发在机器重启后就会发生作用。

      [b]2. 安装设置squid[/b]
  
      像[url=http://whatis.ctocio.com.cn/searchwhatis/69/7491069.shtml][color=#16387c]FreeBSD[/color][/url]和NetBSD一样,OpenBSD也有很多应用软件支持,它包含了许多免费软件包 (www.openbsd.[url=http://whatis.ctocio.com.cn/searchwhatis/20/6093020.shtml][color=#16387c]org[/color][/url]/ports.html)的定制版本。它的软件库没有FreeBSD中的那么大,但是包含了大多数你想给Unix服务器或者工作站安装的工具。OpenBSD的[url=http://whatis.ctocio.com.cn/searchwhatis/187/5949187.shtml][color=#16387c]x86[/color][/url]版本也能够 运行针对FreeBSD、Linux和Solaris创建的程序。OpenBSD支持10种计算机体系结构——比 FreeBSD还多,但是没有NetBSD多你可以通过网络来安装[url=http://whatis.ctocio.com.cn/searchwhatis/250/7333750.shtml][color=#16387c]操作系统[/color][/url],只不过安装者的用户界面没有 FreeBSD那么美观而已。使用 OpenBSD 的 pkg_add 应用程序可以很容易地对其进行安装。您可以在 OpenBSD 镜像的 /4.29/packages/i386/ 目录中找到完整的列表。pkg_add 应用程序接受包的名称作为输入,自动地确定依赖关系,并安装所需的全部包。使用pkg_add 在线安装squid:
[table=95%][tr][td]      #setenv PKG_PATH [url]ftp://ftp.eu.openbsd.org/pub/OpenBSD/4.2/packages/i386/[/url]
  #pkg_add ${PKG_PATH}squid-2.6.STABLE13-snmp.tgz        # squid 的主程序
  #pkg_add ${PKG_PATH}squid-2.6.STABLE13-[url=http://whatis.ctocio.com.cn/searchwhatis/314/6092814.shtml][color=#16387c]transparent[/color][/url]-snmp.tgz      # 安装透明代理软件[/td][/tr][/table]
  [b]3. 设置squid[/b]
  
      其中最重要的是squid.conf,squid.conf配置文件可以分为十三个部分,这十三个部分分别是:
  1)NETWORK OPTIONS (有关的网络选项)。
  2)OPTIONS WH[url=http://whatis.ctocio.com.cn/searchwhatis/411/6025411.shtml][color=#16387c]IC[/color][/url]H [url=http://whatis.ctocio.com.cn/searchwhatis/121/6025121.shtml][color=#16387c]AF[/color][/url]FECT THE NEIGHBOR SE[url=http://whatis.ctocio.com.cn/searchwhatis/89/5948589.shtml][color=#16387c]LEC[/color][/url]TION ALGORITHM (作用于邻居选择算法的有关选项)。
  3)OPTIONS WHICH AFFECT THE [url=http://whatis.ctocio.com.cn/searchwhatis/175/7785675.shtml][color=#16387c]CA[/color][/url]CHE [url=http://whatis.ctocio.com.cn/searchwhatis/57/5949057.shtml][color=#16387c]SI[/color][/url]ZE (定义cache大小的选项)。
  4)LOGFILE PATHNAMES AND CACHE D[url=http://whatis.ctocio.com.cn/searchwhatis/215/6025715.shtml][color=#16387c]IR[/color][/url]ECTOR[url=http://whatis.ctocio.com.cn/searchwhatis/201/5948201.shtml][color=#16387c]IE[/color][/url]S (定义日志文件的路径cache的目录)。
  5) OPTIONS FOR EXTERNAL SUPPORT PROG[url=http://whatis.ctocio.com.cn/searchwhatis/465/6028465.shtml][color=#16387c]RA[/color][/url]MS (外部支持程序选项)。
  6) OPTIONS FOR TUNING THE CACHE (调整cache的选项)。
  7) T[url=http://whatis.ctocio.com.cn/searchwhatis/460/6025460.shtml][color=#16387c]IM[/color][/url]EOUTS(超时)。
  8) ACCESS [url=http://whatis.ctocio.com.cn/searchwhatis/261/5947261.shtml][color=#16387c]CO[/color][/url]NTROLS (访问控制)。
  9) ADM[url=http://whatis.ctocio.com.cn/searchwhatis/260/5949260.shtml][color=#16387c]INI[/color][/url]STRATIVE PARAMETERS (管理参数)。
  10) OPTIONS FOR THE CACHE RE[url=http://whatis.ctocio.com.cn/searchwhatis/154/6093154.shtml][color=#16387c]GIS[/color][/url]TRATION SERVICE (cache注册服务选项)。
  11) HTTPD-ACCELERATOR OPTIONS (HTTPD加速选项)。
  12) [url=http://whatis.ctocio.com.cn/searchwhatis/277/5948777.shtml][color=#16387c]MIS[/color][/url]CEL[url=http://whatis.ctocio.com.cn/searchwhatis/435/7360935.shtml][color=#16387c]LAN[/color][/url]EOUS (杂项)。
  13) DELAY POOL PARAMETERS (延时池参数)。
  
      [b]理解squid的命令启动参数[/b]
  
      Squid有很多命令参数,见图3。

  [img=500,302]http://security.ctocio.com.cn/imagelist/2008/142/708vnj3k72lk.jpg[/img]
                                            图3 Squid命令选项
  
      对于Squid命令这里需要了解其参数,在开始其它事情之前,让我们先看一下squid 的命令行选项。这里的许多选项你会经常使用,另外有些仅仅在调试问题时有用。

     [b]Squid 命令行选项[/b]  
      -a port :指定新的http_port 值。该选项覆盖了来自squid.conf 的值。然而请注意,你能在quid.conf里指定多个值。-a 选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a 是因为在Harvest cache 里,HTTP 端口被叫做A[url=http://whatis.ctocio.com.cn/searchwhatis/415/5948915.shtml][color=#16387c]SCI[/color][/url]I 端口) 。
  -d level :让squid 将它的调试信息写到标准错误(假如配置了,就是cache.log 和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1 工作良好。
  -f [url=http://whatis.ctocio.com.cn/searchwhatis/398/5947898.shtml][color=#16387c]file[/color][/url] :指定另一个配置文件。
  -h :显示用法。
  -k function
  指示Squid 执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,[url=http://whatis.ctocio.com.cn/searchwhatis/174/6025674.shtml][color=#16387c]interrupt[/color][/url],kill,[url=http://whatis.ctocio.com.cn/searchwhatis/168/5947668.shtml][color=#16387c]debug[/color][/url],check,or [url=http://whatis.ctocio.com.cn/searchwhatis/424/6025924.shtml][color=#16387c]parse[/color][/url]。
  + reconfigure 导致运行中的squid 重新读取配置文件。
  + rotate导致squid *动它的日志,这包括了关闭日志,重命名,和再次打开它们。
  + shutdown 发送关闭squid [url=http://whatis.ctocio.com.cn/searchwhatis/292/7333792.shtml][color=#16387c]进程[/color][/url]的信号。
  + interrupt 立刻关闭squid,不必等待活动会话完成。
  + kill 发送KILL 信号给squid,这是关闭squid 的最后保证。
  + debug 将squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。
  + check 简单的检查运行中的squid 进程,返回的值显示squid 是否在运行。
  + 最后,parse 简单的解析squid.conf 文件,如果配置文件包含错误,进程返回非零值。
  -s :激活将日志记录到syslog 进程。squid 使用LOCAL4 syslog 设备。0 级别调试信息以优先级LOG_WARNING 被记录,1 级别消息以LOG_[url=http://whatis.ctocio.com.cn/searchwhatis/471/6093471.shtml][color=#16387c]NOT[/color][/url]ICE 被记录。更高级的调试信息不会被发送到syslogd.你可以在/etc/syslogd.conf 文件里使用如下接口:local4.warning /var/log/squid.log
  -u port: 指定另一个[url=http://whatis.ctocio.com.cn/searchwhatis/420/6025420.shtml][color=#16387c]ICP[/color][/url] 端口号,覆盖掉squid.conf 文件里的icp_port。
  -v :打印版本信息。
  -z :初始化cache,或者交换,目录。在首次运行squid,或者增加新的cache 目录时,你必须使用该选项。
  -C :阻止安装某些信号句柄,它们捕获特定的致命信号例如[url=http://whatis.ctocio.com.cn/searchwhatis/61/5949061.shtml][color=#16387c]SIG[/color][/url]BUS 和SIGSEGV。正常的,这些信号被squid 捕获,以便它能干净的关闭。然而,捕获这些信号可能让以后调试问题困难。使用该选项,致命的信号导致它们的默认动作,通常是coredump。
  -D :禁止初始化DNS 测试。正常情况下,squid 直到验证它的DNS 可用才能启动。该选项阻止了这样的检测。你也能在squid.conf 文件里改变或删除dns_testnames 选项。
  -F :让squid 拒绝所有的请求,直到它重新建立起存储元数据。假如你的系统很忙,该选项可以减短重建存储元数据的时间。然而,如果你的cache 很大,重建过程可能会花费很长的时间。
  -N :阻止squid 变成后台服务进程。
  -R :阻止squid 在绑定HTTP 端口之前使用SO_REUSEADDR 选项。
  -V :激活虚拟主机加速模式。类似于squid.conf 文件里的httpd_accel_[url=http://whatis.ctocio.com.cn/searchwhatis/128/5948128.shtml][color=#16387c]host[/color][/url] virtual 指令。
  -X :强迫完整调试模式,如你在squid.conf 文件里指定debug_options ALL,9 一样。
  -Y :在重建存储元数据时,返回ICP_M[url=http://whatis.ctocio.com.cn/searchwhatis/224/6025724.shtml][color=#16387c]IS[/color][/url]S_NOFETCH 代替ICP_MISS.忙碌的父cache 在重建时,该选项可以导致最少的负载。
  
      [b]设定 #vi /etc/squid.conf 的参数:[/b]
[table=95%][tr][td]      http_port 88.88.88.2:3128
  acl our_networks src 88.88.88.0/24
  http_[url=http://whatis.ctocio.com.cn/searchwhatis/215/6025215.shtml][color=#16387c]access[/color][/url] deny msn
  http_access allow our_networks
  visible_hostname OBSD.cjh[url=http://whatis.ctocio.com.cn/searchwhatis/261/5949261.shtml][color=#16387c].net[/color][/url]
  httpd_accel_host virtual
  httpd_accel_port [url=http://whatis.ctocio.com.cn/searchwhatis/293/5949293.shtml][color=#16387c]80[/color][/url]
  httpd_accel_with_[url=http://whatis.ctocio.com.cn/searchwhatis/351/6026351.shtml][color=#16387c]proxy[/color][/url] on
  httpd_accel_uses_host_header on[/td][/tr][/table]
  初始化 Squid 环境: #/usr/local/**in/squid -z
  重新读取加载 Squid 配置文件:#/usr/local/**in/squid -k reconfigure
  设定开机自动启动 Squid : # vi /etc/rc.local
[table=95%][tr][td]      if [ -x /usr/local/**in/squid ]; then
  echo -n ' squid'; /usr/local/**in/squid
  fi[/td][/tr][/table]
  [b]总结[/b]:[b][url=http://security.ctocio.com.cn/tips/186/5844686.shtml][color=#16387c]OpenBSD[/color][/url] [/b]很可能是世界上最安全的操作系统。在其之上的每一步开发过程都重点关注于构建一个安全、开放和免费的平台。在这三种免费BSD中,OpenBSD的开发成员最少并且对Unix新手来说是最难学的。[b][url=http://security.ctocio.com.cn/58/7124058.shtml][color=#16387c]OpenBSD 10年来的严重漏洞只有2个[/color][/url][/b],如果你确实需要一个牢靠的网络防火墙或者代理服务器的话,OpenBSD 正是合适的选择。
页: [1]
查看完整版本: 实例:配置OpenBSD 4.2为安全代理服务器