零零社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[UNIX 系统] FreeBSD 8.1 已可下载

[复制链接]
lijingjing 发表于 2014-3-21 17:36:12 | 显示全部楼层 |阅读模式
FreeBSD (官方网站 (中文), 维基百科) 是可以用于 x86 兼容机、amd64 兼容机、UltraspARC、IA-64、PC-98 以及 ARM 硬件架构上的一种先进的操作系统。它源于 BSD,由加州大学伯克利分校开发的 UNIX 版本。 目前由一支包含大量开发人员的团队维护。对于一些其它的硬件平台的支持,也正处于不同的开发阶段。尽管 FreeBSD 官方未宣布 FreeBSD 8.1 版正式发布,然而在其官方 FTP 上已经提供下载了。

I386 版的镜像可在 ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.1/ 获取。
AMD64 版的镜像可在 ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.1/ 获取。
其他版本可到 ftp://ftp.freebsd.org/pub/FreeBSD/releases/ 自行查找

或者可以单击如下链接直接下载:

I386 版:

  • FreeBSD-8.1-RELEASE-i386-bootonly.iso
    FreeBSD-8.1-RELEASE-i386-disc1.iso
    FreeBSD-8.1-RELEASE-i386-dvd1.iso.gz
    FreeBSD-8.1-RELEASE-i386-livefs.iso
    FreeBSD-8.1-RELEASE-i386-memstick.img
    CHECKSUM.SHA256

AMD64 版:

  • FreeBSD-8.1-RELEASE-amd64-bootonly.iso
    FreeBSD-8.1-RELEASE-amd64-disc1.iso
    FreeBSD-8.1-RELEASE-amd64-dvd1.iso.gz
    FreeBSD-8.1-RELEASE-amd64-livefs.iso
    FreeBSD-8.1-RELEASE-amd64-memstick.img
haoma1 发表于 2014-3-24 13:57:10 | 显示全部楼层

freebsd关闭ipfw防火墙

关闭防火墙的方法介绍如下:


一、重新编译内核,把关于IPFIREWALL项的都注释掉。这样彻底关掉IPFW。
二、重新编译内核,加上options    IPFIREWALL_DEFAULT_TO_ACCEPT,这样IPFW是打开的,但默认是通过所有的访问。
三、不用编译内核,建立一个IPFW规则文件,加一条规则,让所有的访问通过。
add 100 allow all from any to any
PS:建议用第三种方法。

第三种最好,最好是根据自己的实际需要设置规则

二.Freebsd 如何_打开_关闭_查看防火墙

在FreeBSD服务器上调试ipfw防火墙规则的时候,有时候需要临时关闭ipfw防火墙,可以使用如下命令来进行操作:

1)停止ipfw防火墙:
ipfw disable firewall  
/etc/rc.d/ipfw stop

2)开启ipfw防火墙:

ipfw enable firewall  
/etc/rc.d/ipfw start

3)如何查看ipfw是否在运行

方法一:通过ipfw -a list 不断的去看包的数量

方法二:sysctl -a | grep net.inet.ip.fw.enable

如果状态是1表示是开启,0为关闭

  1. 31.6. IPFW
  2. IPFIREWALL (IPFW) 是一个由 FreeBSD 发起的防火墙应用软件, 它由 FreeBSD 的志愿者成员编写和维护。 它使用了传统的无状态规则和规则编写方式, 以期达到简单状态逻辑所期望的目标。

  3. 标准的 FreeBSD 安装中, IPFW 所给出的规则集样例 (可以在 /etc/rc.firewall 和 /etc/rc.firewall6 中找到) 非常简单, 建议不要不加修改地直接使用。 该样例中没有使用状态过滤, 而该功能在大部分的配置中都是非常有用的, 因此这一节并不以系统自带的样例作为基础。

  4. IPFW 的无状态规则语法, 是由一种提供复杂的选择能力的技术支持的, 这种技术远远超出了一般的防火墙安装人员的知识水平。 IPFW 是为满足专业用户, 以及掌握先进技术的电脑爱好者们对于高级的包选择需求而设计的。 要完全释放 IPFW 的规则所拥有的强大能力, 需要对不同的协议的细节有深入的了解, 并根据它们独特的包头信息来编写规则。 这一级别的详细阐述超出了这本手册的范围。

  5. IPFW 由七个部分组成, 其主要组件是内核的防火墙过滤规则处理器, 及其集成的数据包记帐工具、 日志工具、 用以触发 NAT 工具的 divert (转发) 规则、 高级特殊用途工具、 dummynet 流量整形机制, fwd rule 转发工具, 桥接工具, 以及 ipstealth 工具。 IPFW 支持 IPv4 和 IPv6。

  6. 31.6.1. 启用 IPFW
  7. IPFW 是基本的 FreeBSD 安装的一部分, 以单独的可加载内核模块的形式提供。 如果在 rc.conf 中加入 firewall_enable="YES" 语句, 就会自动地加载对应的内核模块。 除非您打算使用由它提供的 NAT 功能, 一般情况下并不需要把 IPFW 编进 FreeBSD 的内核。

  8. 如果将 firewall_enable="YES" 加入到 rc.conf 中并重新启动系统, 则下列信息将在启动过程中, 以高亮的白色显示出来:

  9. ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled
  10. 可加载内核模块在编译时加入了记录日志的能力。 要启用日志功能, 并配置详细日志记录的限制, 需要在 /etc/sysctl.conf 中加入一些配置。 这些设置将在重新启动之后生效:

  11. net.inet.ip.fw.verbose=1
  12. net.inet.ip.fw.verbose_limit=5
  13. 31.6.2. 内核选项
  14. 把下列选项在编译 FreeBSD 内核时就加入, 并不是启用 IPFW 所必需的, 除非您需要使用 NAT 功能。 这里只是将这些选项作为背景知识来介绍。

  15. options    IPFIREWALL
  16. 这个选项将 IPFW 作为内核的一部分来启用。

  17. options    IPFIREWALL_VERBOSE
  18. 这个选项将启用记录通过 IPFW 的匹配了包含 log 关键字规则的每一个包的功能。

  19. options    IPFIREWALL_VERBOSE_LIMIT=5
  20. 以每项的方式, 限制通过 syslogd(8) 记录的包的个数。 如果在比较恶劣的环境下记录防火墙的活动可能会需要这个选项。 它能够避免潜在的针对 syslog 的洪水式拒绝服务攻击。

  21. options    IPFIREWALL_DEFAULT_TO_ACCEPT
  22. 这个选项默认地允许所有的包通过防火墙, 如果您是第一次配置防火墙, 使用这个选项将是一个不错的主意。

  23. options    IPDIVERT
  24. 这一选项启用 NAT 功能。

  25. 注意:
  26. 如果内核选项中没有加入 IPFIREWALL_DEFAULT_TO_ACCEPT, 而配置使用的规则集中也没有明确地指定允许连接进入的规则, 默认情况下, 发到本机和从本机发出的所有包都会被阻止。

  27. 31.6.3. /etc/rc.conf Options
  28. 启用防火墙:

  29. firewall_enable="YES"
  30. 要选择由 FreeBSD 提供的几种防火墙类型中的一种来作为默认配置, 您需要阅读 /etc/rc.firewall 文件并选出合适的类型, 然后在 /etc/rc.conf 中加入类似下面的配置:

  31. firewall_type="open"
  32. 您还可以指定下列配置规则之一:

  33. open ── 允许所有流量通过。

  34. client ── 只保护本机。

  35. simple ── 保护整个网络。

  36. closed ── 完全禁止除回环设备之外的全部 IP 流量。

  37. UNKNOWN ── 禁止加载防火墙规则。

  38. filename ── 到防火墙规则文件的绝对路径。

  39. 有两种加载自定义 ipfw 防火墙规则的方法。 其一是将变量 firewall_type 设为包含不带 ipfw(8) 命令行选项的 防火墙规则 文件的完整路径。 下面是一个简单的规则集例子:

  40. add deny in
  41. add deny out
  42. 除此之外, 也可以将 firewall_script 变量设为包含 ipfw 命令的可执行脚本, 这样这个脚本会在启动时自动执行。 与前面规则集文件等价的规则脚本如下:

  43. ipfw 命令是在防火墙运行时, 用于在其内部规则表中手工逐条添加或删除防火墙规则的标准工具。 这一方法的问题在于, 一旦您的关闭计算机或停机, 则所有增加或删除或修改的规则也就丢掉了。 把所有的规则都写到一个文件中, 并在启动时使用这个文件来加载规则, 或一次大批量地替换防火墙规则, 那么推荐使用这里介绍的方法。

  44. ipfw 的另一个非常实用的功能是将所有正在运行的防火墙规则显示出来。 IPFW 的记账机制会为每一个规则动态地创建计数器, 用以记录与它们匹配的包的数量。 在测试规则的过程中, 列出规则及其计数器是了解它们是否工作正常的重要手段。

  45. 按顺序列出所有的规则:

  46. # ipfw list
  47. 列出所有的规则, 同时给出最后一次匹配的时间戳:

  48. # ipfw -t list
  49. 列出所有的记账信息、 匹配规则的包的数量, 以及规则本身。 第一列是规则的编号, 随后是发出包匹配的数量, 进入包的匹配数量, 最后是规则本身。

  50. # ipfw -a list
  51. 列出所有的动态规则和静态规则:

  52. # ipfw -d list
  53. 同时显示已过期的动态规则:

  54. # ipfw -d -e list
  55. 将计数器清零:

  56. # ipfw zero
  57. 只把规则号为 NUM 的计数器清零:

  58. # ipfw zero NUM
  59. 31.6.4. IPFW 规则集
  60. 规则集是指一组编写好的依据包的值决策允许通过或阻止 IPFW 规则。 包的双向交换组成了一个会话交互。 防火墙规则集会作用于来自于 Internet 公网的包以及由系统发出来回应这些包的数据包。 每一个 TCP/IP 服务 (例如 telnet, www, 邮件等等) 都由协议预先定义了其特权 (监听) 端口。 发到特定服务的包会从源地址使用非特权 (高编号) 端口发出, 并发到特定服务在目的地址的对应端口。 所有这些参数 (例如: 端口和地址) 都是可以为防火墙规则所利用的, 判别是否允许服务通过的标准。

  61. 当有数据包进入防火墙时, 会从规则集里的第一个规则开始进行比较, 并自顶向下地进行匹配。 当包与某个选择规则参数相匹配时, 将会执行规则所定义的动作, 并停止规则集搜索。 这种策略, 通常也被称作 “最先匹配者获胜” 的搜索方法。 如果没有任何与包相匹配的规则, 那么它就会根据强制的 IPFW 默认规则, 也就是 65535 号规则截获。 一般情况下这个规则是阻止包, 而且不给出任何回应。

  62. 注意:
  63. 如果规则定义的动作是 count、 skipto 或 tee 规则的话, 搜索会继续。

  64. 这里所介绍的规则, 都是使用了那些包含状态功能的, 也就是 keep state、 limit、 in、 out 以及 via 选项的规则。 这是编写明示允许防火墙规则集所需的基本框架。

  65. 警告:
  66. 在操作防火墙规则时应谨慎行事, 如果操作不当, 很容易将自己反锁在外面。

  67. 31.6.4.1. 规则语法
  68. 这里所介绍的规则语法已经经过了简化, 只包括了建立标准的明示允许防火墙规则集所必需的那些。 要了解完整的规则语法说明, 请参见 ipfw(8) 联机手册。

  69. 规则是由关键字组成的: 这些关键字必须以特定的顺序从左到右书写。 下面的介绍中, 关键字使用粗体表示。 某些关键字还包括了子选项, 这些子选项本身可能也是关键字, 有些还可以包含更多的子选项。

  70. # 用于表示开始一段注释。 它可以出现在一个规则的后面, 也可以独占一行。 空行会被忽略。

  71. CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL

  72. 31.6.4.1.1. CMD
  73. 每一个新的规则都应以 add 作为前缀, 它表示将规则加入内部表。

  74. 31.6.4.1.2. RULE_NUMBER
  75. 每一条规则都与一个范围在 1 到 65535 之间的规则编号相关联。

  76. 31.6.4.1.3. ACTION
  77. 每一个规则可以与下列的动作之一相关联, 所指定的动作将在进入的数据包与规则所指定的选择标准相匹配时执行。

  78. allow | accept | pass | permit

  79. 这些关键字都表示允许匹配规则的包通过防火墙, 并停止继续搜索规则。

  80. check-state

  81. 根据动态规则表检查数据包。 如果匹配, 则执行规则所指定的动作, 亦即生成动态规则; 否则, 转移到下一个规则。 check-state 规则没有选择标准。 如果规则集中没有 check-state 规则, 则会在第一个 keep-state 或 limit 规则处, 对动态规则表实施检查。

  82. deny | drop

  83. 这两个关键字都表示丢弃匹配规则的包。 同时, 停止继续搜索规则。

  84. 31.6.4.1.4. LOGGING
  85. log or logamount

  86. 当数据包与带 log 关键字的规则匹配时, 将通过名为 SECURITY 的 facility 来把消息记录到 syslogd(8)。 只有在记录的次数没有超过 logamount 参数所指定的次数时, 才会记录日志。 如果没有指定 logamount, 则会以 sysctl 变量 net.inet.ip.fw.verbose_limit 所指定的限制为准。 如果将这两种限制值之一指定为零, 则表示不作限制。 如果达到了限制数, 可以通过将规则的日志计数或包计数清零来重新启用日志, 请参见 ipfw reset log 命令来了解细节。

  87. 注意:
  88. 日志是在所有其他匹配条件都验证成功之后, 在针对包实施最终动作 (accept, deny) 之前进行的。 您可以自行决定哪些规则应启用日志。

  89. 31.6.4.1.5. SELECTION
  90. 这一节所介绍的关键字主要用来描述检查包的哪些属性, 用以判断包是否与规则相匹配。 下面是一些通用的用于匹配包特征的属性, 它们必须按顺序使用:

  91. udp | tcp | icmp

  92. 也可以指定在 /etc/protocols 中所定义的协议。 这个值定义的是匹配的协议, 在规则中必须指定它。

  93. from src to dst

  94. from 和 to 关键字用于匹配 IP 地址。 规则中必须 同时 指定源和目的两个参数。 如果需要匹配任意 IP 地址, 可以使用特殊关键字 any。 还有一个特殊关键字, 即 me, 用于匹配您的 FreeBSD 系统上所有网络接口上所配置的 IP 地址, 它可以用于表达网络上的其他计算机到防火墙 (也就是本机), 例如 from me to any 或 from any to me 或 from 0.0.0.0/0 to any 或 from any to 0.0.0.0/0 或 from 0.0.0.0 to any 或 from any to 0.0.0.0 以及 from me to 0.0.0.0。 IP 地址可以通过 带点的 IP 地址/掩码长度 (CIDR 记法), 或者一个带点的 IP 地址的形式来指定。 这是编写规则时所必需的。 使用 net-mgmt/ipcalc port 可以用来简化计算。 关于这个工具的更多信息, 也可参考它的主页: http://jodies.de/ipcalc。

  95. port number

  96. 这个参数主要用于那些支持端口号的协议 (例如 TCP 和 UDP)。 如果要通过端口号匹配某个协议, 就必须指定这个参数。 此外, 也可以通过服务的名字 (根据 /etc/services) 来指定服务, 这样会比使用数字指定端口号直观一些。

  97. in | out

  98. 相应地, 匹配进入和发出的包。 这里的 in 和 out 都是关键字, 在编写匹配规则时, 必需作为其他条件的一部分来使用。

  99. via IF

  100. 根据指定的网络接口的名称精确地匹配进出的包。 这里的 via 关键字将使得接口名称成为匹配过程的一部分。

  101. setup

  102. 要匹配 TCP 会话的发起请求, 就必须使用它。

  103. keep-state

  104. 这是一个必须使用的关键字。 在发生匹配时, 防火墙将创建一个动态规则, 其默认行为是, 匹配使用同一协议的、从源到目的 IP/端口 的双向网络流量。

  105. limit {src-addr | src-port | dst-addr | dst-port}

  106. 防火墙只允许匹配规则时, 与指定的参数相同的 N 个连接。 可以指定至少一个源或目的地址及端口。 limit 和 keep-state 不能在同一规则中同时使用。 limit 提供了与 keep-state 相同的功能, 并增加了一些独有的能力。

  107. 31.6.4.2. 状态规则选项
  108. 有状态过滤将网络流量当作一种双向的包交换来处理。 它提供了一种额外的检查能力, 用以检测会话中的包是否来自最初的发送者, 并在遵循双向包交换的规则进行会话。 如果包与这些规则不符, 则将自动地拒绝它们。

  109. check-state 用来识别在 IPFW 规则集中的包是否符合动态规则机制的规则。 如果匹配, 则允许包通过, 此时防火墙将创建一个新的动态规则来匹配双向交换中的下一个包。 如果不匹配, 则将继续尝试规则集中的下一个规则。

  110. 动态规则机制在 SYN-flood 攻击下是脆弱的, 因为这种情况会产生大量的动态规则, 从而耗尽资源。 为了抵抗这种攻击, 从 FreeBSD 中加入了一个叫做 limit 的新选项。 这个选项可以用来限制符合规则的会话允许的并发连接数。 如果动态规则表中的规则数超过 limit 的限制数量, 则包将被丢弃。

  111. 31.6.4.3. 记录防火墙消息
  112. 记录日志的好处是显而易见的: 它提供了在事后检查所发生的状况的方法, 例如哪些包被丢弃了, 这些包的来源和目的地, 从而为您提供找到攻击者所需的证据。

  113. 即使启用了日志机制, IPFW 也不会自行生成任何规则的日志。 防火墙管理员需要指定规则集中的哪些规则应该记录日志, 并在这些规则上增加 log 动作。 一般来说, 只有 deny 规则应记录日志, 例如对于进入的 ICMP ping 的 deny 规则。 另外, 复制 “默认的 ipfw 终极 deny 规则”, 并加入 log 动作来作为您的规则集的最后一条规则也是很常见的用法。 这样, 您就能看到没有匹配任何一条规则的那些数据包。

  114. 日志是一把双刃剑, 如果不谨慎地加以利用, 则可能会陷入过多的日志数据中, 并导致磁盘被日志塞满。 将磁盘填满是 DoS 攻击最为老套的手法之一。 由于 syslogd 除了会将日志写入磁盘之外, 还会输出到 root 的控制台屏幕上, 因此有过多的日志信息是很让人恼火的事情。

  115. IPFIREWALL_VERBOSE_LIMIT=5 内核选项将限制同一个规则发到系统日志程序 syslogd(8) 的连续消息的数量。 当内核启用了这个选项时, 某一特定规则所产生的连续消息的数量将封顶为这个数字。 一般来说, 没有办法从连续 200 条一模一样的日志信息中获取更多有用的信息。 举例来说, 如果同一个规则产生了 5 次消息并被记录到 syslogd, 余下的相同的消息将被计数, 并像下面这样发给 syslogd:

  116. last message repeated 45 times
  117. 所有记录的数据包包消息, 默认情况下会最终写到 /var/log/security 文件中, 后者在 /etc/syslog.conf 文件里进行了定义。

  118. 31.6.4.4. 编写规则脚本
  119. 绝大多数有经验的 IPFW 用户会创建一个包含规则的文件, 并且, 按能够以脚本形式运行的方式来书写。 这样做最大的一个好处是, 可以大批量地刷新防火墙规则, 而无须重新启动系统就能够激活它们。 这种方法在测试新规则时会非常方便, 因为同一过程在需要时可以多次执行。 作为脚本, 您可以使用符号替换来撰写那些经常需要使用的值, 并用同一个符号在多个规则中反复地表达它。 下面将给出一个例子。

  120. 这个脚本使用的语法同 sh(1)、 csh(1) 以及 tcsh(1) 脚本兼容。 符号替换字段使用美元符号 $ 作为前缀。 符号字段本身并不使用 $ 前缀。 符号替换字段的值必须使用 "双引号" 括起来。

  121. 可以使用类似下面的规则文件:

  122. ############### start of example ipfw rules script #############
  123. #
  124. ipfw -q -f flush       # Delete all rules
  125. # Set defaults
  126. oif="tun0"             # out interface
  127. odns="192.0.2.11"      # ISP's DNS server IP address
  128. cmd="ipfw -q add "     # build rule prefix
  129. ks="keep-state"        # just too lazy to key this each time
  130. $cmd 00500 check-state
  131. $cmd 00502 deny all from any to any frag
  132. $cmd 00501 deny tcp from any to any established
  133. $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
  134. $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
  135. $cmd 00611 allow udp from any to $odns 53 out via $oif $ks
  136. ################### End of example ipfw rules script ############
  137. 这就是所要做的全部事情了。 例子中的规则并不重要, 它们主要是用来表示如何使用符号替换。

  138. 如果把上面的例子保存到 /etc/ipfw.rules 文件中。 下面的命令来会重新加载规则。

  139. # sh /etc/ipfw.rules
  140. /etc/ipfw.rules 这个文件可以放到任何位置, 也可以命名为随便什么别的名字。

  141. 也可以手工执行下面的命令来达到类似的目的:

  142. # ipfw -q -f flush
  143. # ipfw -q add check-state
  144. # ipfw -q add deny all from any to any frag
  145. # ipfw -q add deny tcp from any to any established
  146. # ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
  147. # ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
  148. # ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state
  149. 31.6.4.5. 带状态规则集
  150. 以下的这组非-NAT 规则集, 是如何编写非常安全的 '明示允许' 防火墙的一个例子。 明示允许防火墙只允许匹配了 pass 规则的包通过, 而默认阻止所有的其他数据包。 用来保护整个网段的防火墙, 至少需要有两个网络接口, 并且其上必须配置规则, 以便让防火墙正常工作。

  151. 所有类 UNIX® 操作系统, 也包括 FreeBSD, 都设计为允许使用网络接口 lo0 和 IP 地址 127.0.0.1 来完成操作系统内部的通讯。 防火墙必须包含一组规则, 使这些数据包能够无障碍地收发。

  152. 接入 Internet 公网的那个网络接口上, 应该配置授权和访问控制, 来限制对外的访问, 以及来自 Internet 公网的访问。 这个接口很可能是您的用户态 PPP 接口, 例如 tun0, 或者您接在 DSL 或电缆 modem 上的网卡。

  153. 如果有至少一个网卡接入了防火墙后的内网 LAN, 则必须为这些接口配置规则, 以便让这些接口之间的包能够顺畅地通过。

  154. 所有的规则应被组织为三个部分, 所有应无阻碍地通过的规则, 公网的发出规则, 以及公网的接收规则。

  155. 公网接口相关的规则的顺序, 应该是最经常用到的放在尽可能靠前的位置, 而最后一个规则, 则应该是阻止那个接口在那一方向上的包。

  156. 发出部分的规则只包含一些 allow 规则, 允许选定的那些唯一区分协议的端口号所指定的协议通过, 以允许访问 Internet 公网上的这些服务。 所有的规则中都指定了 proto、 port、 in/out、 via 以及 keep state 这些选项。 proto tcp 规则同时指定 setup 选项, 来区分开始协议会话的包, 以触发将包放入 keep state 规则表中的动作。

  157. 接收部分则首先阻止所有不希望的包, 这样做有两个不同的原因。 其一是恶意的包可能和某些允许的流量规则存在部分匹配, 而我们希望阻止, 而不是让这些包仅仅与 allow 规则部分匹配就允许它们进入。 其二是, 已经确信要阻止的包被拒绝这件事, 往往并不是我们需要关注的, 因此只要简单地予以阻止即可。 防火墙规则集中的每个部分的最后一条规则都是阻止并记录包, 这有助于为逮捕攻击者留下法律所要求的证据。

  158. 另外一个需要注意的事情是确保系统对不希望的数据包不做回应。 无效的包应被丢弃和消失。 这样, 攻击者便无法知道包是否到达了您的系统。 攻击者对系统了解的越少, 其攻击的难度也就越大。 如果不知道端口号, 可以查阅 /etc/services/ 或到 http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers 并查找一下端口号, 以了解其用途。 另外, 您也可以在这个网页上了解常见木马所使用的端口: http://www.sans.org/security-resources/idfaq/oddports.php。

  159. 31.6.4.6. 明示允许规则集的例子
  160. 下面是一个非-NAT 的规则集, 它是一个完整的明示允许规则集。 使用它作为您的规则集不会有什么问题。 只需把那些不需要的服务对应的 pass 规则注释掉就可以了。 如果您在日志中看到消息, 而且不想再看到它们, 只需在接收部分增加一个一个 deny 规则。 您可能需要把 dc0 改为接入公网的接口的名字。 对于使用用户态 PPP 的用户而言, 应该是 tun0。

  161. 这些规则遵循一定的模式。

  162. 所有请求 Internet 公网上服务的会话开始包, 都使用了 keep-state。

  163. 所有来自 Internet 的授权服务请求, 都采用了 limit 选项来防止洪水式攻击。

  164. 所有的规则都使用了 in 或者 out 来说明方向。

  165. 所有的规则都使用了 via 接口名 来指定应该匹配通过哪一个接口的包。

  166. 这些规则都应放到 /etc/ipfw.rules。

  167. ################ Start of IPFW rules file ###############################
  168. # Flush out the list before we begin.
  169. ipfw -q -f flush
  170. ​
  171. # Set rules command prefix
  172. cmd="ipfw -q add"
  173. pif="dc0"     # public interface name of NIC
  174.               # facing the public Internet
  175. ​
  176. #################################################################
  177. # No restrictions on Inside LAN Interface for private network
  178. # Not needed unless you have LAN.
  179. # Change xl0 to your LAN NIC interface name
  180. #################################################################
  181. #$cmd 00005 allow all from any to any via xl0
  182. ​
  183. #################################################################
  184. # No restrictions on Loopback Interface
  185. #################################################################
  186. $cmd 00010 allow all from any to any via lo0
  187. ​
  188. #################################################################
  189. # Allow the packet through if it has previous been added to the
  190. # the "dynamic" rules table by a allow keep-state statement.
  191. #################################################################
  192. $cmd 00015 check-state
  193. ​
  194. #################################################################
  195. # Interface facing Public Internet (Outbound Section)
  196. # Interrogate session start requests originating from behind the
  197. # firewall on the private network or from this gateway server
  198. # destined for the public Internet.
  199. #################################################################
  200. ​
  201. # Allow out access to my ISP's Domain name server.
  202. # x.x.x.x must be the IP address of your ISP.s DNS
  203. # Dup these lines if your ISP has more than one DNS server
  204. # Get the IP addresses from /etc/resolv.conf file
  205. $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
  206. $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
  207. ​
  208. # Allow out access to my ISP's DHCP server for cable/DSL configurations.
  209. # This rule is not needed for .user ppp. connection to the public Internet.
  210. # so you can delete this whole group.
  211. # Use the following rule and check log for IP address.
  212. # Then put IP address in commented out rule & delete first rule
  213. $cmd 00120 allow log udp from any to any 67 out via $pif keep-state
  214. #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
  215. ​
  216. # Allow out non-secure standard www function
  217. $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
  218. ​
  219. # Allow out secure www function https over TLS SSL
  220. $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
  221. ​
  222. # Allow out send & get email function
  223. $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
  224. $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
  225. ​
  226. # Allow out FBSD (make install & CVSUP) functions
  227. # Basically give user root "GOD" privileges.
  228. $cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root
  229. ​
  230. # Allow out ping
  231. $cmd 00250 allow icmp from any to any out via $pif keep-state
  232. ​
  233. # Allow out Time
  234. $cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
  235. ​
  236. # Allow out nntp news (i.e., news groups)
  237. $cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state
  238. ​
  239. # Allow out secure FTP, Telnet, and SCP
  240. # This function is using SSH (secure shell)
  241. $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
  242. ​
  243. # Allow out whois
  244. $cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state
  245. ​
  246. # deny and log everything else that.s trying to get out.
  247. # This rule enforces the block all by default logic.
  248. $cmd 00299 deny log all from any to any out via $pif
  249. ​
  250. #################################################################
  251. # Interface facing Public Internet (Inbound Section)
  252. # Check packets originating from the public Internet
  253. # destined for this gateway server or the private network.
  254. #################################################################
  255. ​
  256. # Deny all inbound traffic from non-routable reserved address spaces
  257. $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif  #RFC 1918 private IP
  258. $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif     #RFC 1918 private IP
  259. $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif          #RFC 1918 private IP
  260. $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif        #loopback
  261. $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif            #loopback
  262. $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif   #DHCP auto-config
  263. $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif       #reserved for docs
  264. $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster interconnect
  265. $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif         #Class D & E multicast
  266. ​
  267. # Deny public pings
  268. $cmd 00310 deny icmp from any to any in via $pif
  269. ​
  270. # Deny ident
  271. $cmd 00315 deny tcp from any to any 113 in via $pif
  272. ​
  273. # Deny all Netbios service. 137=name, 138=datagram, 139=session
  274. # Netbios is MS/Windows sharing services.
  275. # Block MS/Windows hosts2 name server requests 81
  276. $cmd 00320 deny tcp from any to any 137 in via $pif
  277. $cmd 00321 deny tcp from any to any 138 in via $pif
  278. $cmd 00322 deny tcp from any to any 139 in via $pif
  279. $cmd 00323 deny tcp from any to any 81 in via $pif
  280. ​
  281. # Deny any late arriving packets
  282. $cmd 00330 deny all from any to any frag in via $pif
  283. ​
  284. # Deny ACK packets that did not match the dynamic rule table
  285. $cmd 00332 deny tcp from any to any established in via $pif
  286. ​
  287. # Allow traffic in from ISP's DHCP server. This rule must contain
  288. # the IP address of your ISP.s DHCP server as it.s the only
  289. # authorized source to send this packet type.
  290. # Only necessary for cable or DSL configurations.
  291. # This rule is not needed for .user ppp. type connection to
  292. # the public Internet. This is the same IP address you captured
  293. # and used in the outbound section.
  294. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
  295. ​
  296. # Allow in standard www function because I have apache server
  297. $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
  298. ​
  299. # Allow in secure FTP, Telnet, and SCP from public Internet
  300. $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
  301. ​
  302. # Allow in non-secure Telnet session from public Internet
  303. # labeled non-secure because ID & PW are passed over public
  304. # Internet as clear text.
  305. # Delete this sample group if you do not have telnet server enabled.
  306. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2
  307. ​
  308. # Reject & Log all incoming connections from the outside
  309. $cmd 00499 deny log all from any to any in via $pif
  310. ​
  311. # Everything else is denied by default
  312. # deny and log all packets that fell through to see what they are
  313. $cmd 00999 deny log all from any to any
  314. ################ End of IPFW rules file ###############################
  315. 31.6.4.7. 一个 NAT 和带状态规则集的例子
  316. 要使用 IPFW 的 NAT 功能, 还需要进行一些额外的配置。 除了其他 IPFIREWALL 语句之外, 还需要在内核编译配置中加上 option IPDIVERT 语句。

  317. 在 /etc/rc.conf 中, 除了普通的 IPFW 配置之外, 还需要加入:

  318. natd_enable="YES"                   # Enable NATD function
  319. natd_interface="rl0"                # interface name of public Internet NIC
  320. natd_flags="-dynamic -m"            # -m = preserve port numbers if possible
  321. 将带状态规则与 divert natd 规则 (网络地址转换) 会使规则集的编写变得非常复杂。 check-state 的位置, 以及 divert natd 规则将变得非常关键。 这样一来, 就不再有简单的顺序处理逻辑流程了。 提供了一种新的动作类型, 称为 skipto。 要使用 skipto 命令, 就必须给每一个规则进行编号, 以确定 skipto 规则号是您希望跳转到的位置。

  322. 下面给出了一些未加注释的例子来说明如何编写这样的规则, 用以帮助您理解包处理规则集的处理顺序。

  323. 处理流程从规则文件最上边的第一个规则开始处理, 并自顶向下地尝试每一个规则, 直到找到匹配的规则, 且数据包从防火墙中放出为止。 请注意规则号 100 101, 450, 500, 以及 510 的位置非常重要。 这些规则控制发出和接收的包的地址转换过程, 这样它们在 keep-state 动态表中的对应项中就能够与内网的 LAN IP 地址关联。 另一个需要注意的是, 所有的 allow 和 deny 规则都指定了包的方向 (也就是 outbound 或 inbound) 以及网络接口。 最后, 请注意所有发出的会话请求都会请求 skipto rule 500 以完成网络地址转换。

  324. 下面以 LAN 用户使用 web 浏览器访问一个 web 页面为例。 Web 页面使用 80 来完成通讯。 当包进入防火墙时, 规则 100 并不匹配, 因为它是发出而不是收到的包。 它能够通过规则 101, 因为这是第一个包, 因而它还没有进入动态状态保持表。 包最终到达规则 125, 并匹配该规则。 最终, 它会通过接入 Internet 公网的网卡发出。 这之前, 包的源地址仍然是内网 IP 地址。 一旦匹配这个规则, 就会触发两个动作。 keep-state 选项会把这个规则发到 keep-state 动态规则表中, 并执行所指定的动作。 动作是发到规则表中的信息的一部分。 在这个例子中, 这个动作是 skipto rule 500。 规则 500 NAT 包的 IP 地址, 并将其发出。 请务必牢记, 这一步非常重要。 接下来, 数据包将到达目的地, 之后返回并从规则集的第一条规则开始处理。 这一次, 它将与规则 100 匹配, 其目的 IP 地址将被映射回对应的内网 LAN IP 地址。 其后, 它会被 check-state 规则处理, 进而在暨存会话表中找到对应项, 并发到 LAN。 数据包接下来发到了内网 LAN PC 上, 而后者则会发送从远程服务器请求下一段数据的新数据包。 这个包会再次由 check-state 规则检查, 并找到发出的表项, 并执行其关联的动作, 即 skipto 500。 包跳转到规则 500 并被 NAT 后发出。

  325. 在接收一侧, 已经存在的会话的数据包会被 check-state 规则自动地处理, 并转到 divert nat 规则。 我们需要解决的问题是, 阻止所有的坏数据包, 而只允许授权的服务。 例如在防火墙上运行了 Apache 服务, 而我们希望人们在访问 Internet 公网的同时, 也能够访问本地的 web 站点。 新的接入开始请求包将匹配规则 100, 而 IP 地址则为防火墙所在的服务器而映射到了 LAN IP。 此后, 包会匹配所有我们希望检查的那些令人生厌的东西, 并最终匹配规则 425。 一旦发生匹配, 会发生两件事。 数据包会被发到 keep-state 动态表, 但此时, 所有来自那个源 IP 的会话请求的数量会被限制为 2。 这一做法能够挫败针对指定端口上服务的 DoS 攻击。 动作同时指定了 allow 包应被发到 LAN 上。 包返回时, check-state 规则会识别出包属于某一已经存在的会话交互, 并直接把它发到规则 500 做 NAT, 并发到发出接口。

  326. 示范规则集 #1:

  327. #!/bin/sh
  328. cmd="ipfw -q add"
  329. skip="skipto 500"
  330. pif=rl0
  331. ks="keep-state"
  332. good_tcpo="22,25,37,43,53,80,443,110,119"
  333. ​
  334. ipfw -q -f flush
  335. ​
  336. $cmd 002 allow all from any to any via xl0  # exclude LAN traffic
  337. $cmd 003 allow all from any to any via lo0  # exclude loopback traffic
  338. ​
  339. $cmd 100 divert natd ip from any to any in via $pif
  340. $cmd 101 check-state
  341. ​
  342. # Authorized outbound packets
  343. $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks
  344. $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks
  345. $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
  346. $cmd 130 $skip icmp from any to any out via $pif $ks
  347. $cmd 135 $skip udp from any to any 123 out via $pif $ks
  348. ​
  349. ​
  350. # Deny all inbound traffic from non-routable reserved address spaces
  351. $cmd 300 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
  352. $cmd 301 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
  353. $cmd 302 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
  354. $cmd 303 deny all from 127.0.0.0/8     to any in via $pif  #loopback
  355. $cmd 304 deny all from 0.0.0.0/8       to any in via $pif  #loopback
  356. $cmd 305 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
  357. $cmd 306 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
  358. $cmd 307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
  359. $cmd 308 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast
  360. ​
  361. # Authorized inbound packets
  362. $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks
  363. $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1
  364. ​
  365. ​
  366. $cmd 450 deny log ip from any to any
  367. ​
  368. # This is skipto location for outbound stateful rules
  369. $cmd 500 divert natd ip from any to any out via $pif
  370. $cmd 510 allow ip from any to any
  371. ​
  372. ######################## end of rules  ##################
  373. 下面的这个规则集基本上和上面一样, 但使用了易于读懂的编写方式, 并给出了相当多的注解, 以帮助经验较少的 IPFW 规则编写者更好地理解这些规则到底在做什么。

  374. 示范规则集 #2:

  375. #!/bin/sh
  376. ################ Start of IPFW rules file ###############################
  377. # Flush out the list before we begin.
  378. ipfw -q -f flush
  379. ​
  380. # Set rules command prefix
  381. cmd="ipfw -q add"
  382. skip="skipto 800"
  383. pif="rl0"     # public interface name of NIC
  384.               # facing the public Internet
  385. ​
  386. #################################################################
  387. # No restrictions on Inside LAN Interface for private network
  388. # Change xl0 to your LAN NIC interface name
  389. #################################################################
  390. $cmd 005 allow all from any to any via xl0
  391. ​
  392. #################################################################
  393. # No restrictions on Loopback Interface
  394. #################################################################
  395. $cmd 010 allow all from any to any via lo0
  396. ​
  397. #################################################################
  398. # check if packet is inbound and nat address if it is
  399. #################################################################
  400. $cmd 014 divert natd ip from any to any in via $pif
  401. ​
  402. #################################################################
  403. # Allow the packet through if it has previous been added to the
  404. # the "dynamic" rules table by a allow keep-state statement.
  405. #################################################################
  406. $cmd 015 check-state
  407. ​
  408. #################################################################
  409. # Interface facing Public Internet (Outbound Section)
  410. # Check session start requests originating from behind the
  411. # firewall on the private network or from this gateway server
  412. # destined for the public Internet.
  413. #################################################################
  414. ​
  415. # Allow out access to my ISP's Domain name server.
  416. # x.x.x.x must be the IP address of your ISP's DNS
  417. # Dup these lines if your ISP has more than one DNS server
  418. # Get the IP addresses from /etc/resolv.conf file
  419. $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state
  420. ​
  421. ​
  422. # Allow out access to my ISP's DHCP server for cable/DSL configurations.
  423. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state
  424. ​
  425. # Allow out non-secure standard www function
  426. $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
  427. ​
  428. # Allow out secure www function https over TLS SSL
  429. $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
  430. ​
  431. # Allow out send & get email function
  432. $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
  433. $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
  434. ​
  435. # Allow out FreeBSD (make install & CVSUP) functions
  436. # Basically give user root "GOD" privileges.
  437. $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
  438. ​
  439. # Allow out ping
  440. $cmd 080 $skip icmp from any to any out via $pif keep-state
  441. ​
  442. # Allow out Time
  443. $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
  444. ​
  445. # Allow out nntp news (i.e., news groups)
  446. $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
  447. ​
  448. # Allow out secure FTP, Telnet, and SCP
  449. # This function is using SSH (secure shell)
  450. $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
  451. ​
  452. # Allow out whois
  453. $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
  454. ​
  455. # Allow ntp time server
  456. $cmd 130 $skip udp from any to any 123 out via $pif keep-state
  457. ​
  458. #################################################################
  459. # Interface facing Public Internet (Inbound Section)
  460. # Check packets originating from the public Internet
  461. # destined for this gateway server or the private network.
  462. #################################################################
  463. ​
  464. # Deny all inbound traffic from non-routable reserved address spaces
  465. $cmd 300 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
  466. $cmd 301 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
  467. $cmd 302 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
  468. $cmd 303 deny all from 127.0.0.0/8     to any in via $pif  #loopback
  469. $cmd 304 deny all from 0.0.0.0/8       to any in via $pif  #loopback
  470. $cmd 305 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
  471. $cmd 306 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
  472. $cmd 307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
  473. $cmd 308 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast
  474. ​
  475. # Deny ident
  476. $cmd 315 deny tcp from any to any 113 in via $pif
  477. ​
  478. # Deny all Netbios service. 137=name, 138=datagram, 139=session
  479. # Netbios is MS/Windows sharing services.
  480. # Block MS/Windows hosts2 name server requests 81
  481. $cmd 320 deny tcp from any to any 137 in via $pif
  482. $cmd 321 deny tcp from any to any 138 in via $pif
  483. $cmd 322 deny tcp from any to any 139 in via $pif
  484. $cmd 323 deny tcp from any to any 81  in via $pif
  485. ​
  486. # Deny any late arriving packets
  487. $cmd 330 deny all from any to any frag in via $pif
  488. ​
  489. # Deny ACK packets that did not match the dynamic rule table
  490. $cmd 332 deny tcp from any to any established in via $pif
  491. ​
  492. # Allow traffic in from ISP's DHCP server. This rule must contain
  493. # the IP address of your ISP's DHCP server as it's the only
  494. # authorized source to send this packet type.
  495. # Only necessary for cable or DSL configurations.
  496. # This rule is not needed for 'user ppp' type connection to
  497. # the public Internet. This is the same IP address you captured
  498. # and used in the outbound section.
  499. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state
  500. ​
  501. # Allow in standard www function because I have Apache server
  502. $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2
  503. ​
  504. # Allow in secure FTP, Telnet, and SCP from public Internet
  505. $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2
  506. ​
  507. # Allow in non-secure Telnet session from public Internet
  508. # labeled non-secure because ID & PW are passed over public
  509. # Internet as clear text.
  510. # Delete this sample group if you do not have telnet server enabled.
  511. $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2
  512. ​
  513. # Reject & Log all unauthorized incoming connections from the public Internet
  514. $cmd 400 deny log all from any to any in via $pif
  515. ​
  516. # Reject & Log all unauthorized out going connections to the public Internet
  517. $cmd 450 deny log all from any to any out via $pif
  518. ​
  519. # This is skipto location for outbound stateful rules
  520. $cmd 800 divert natd ip from any to any out via $pif
  521. $cmd 801 allow ip from any to any
  522. ​
  523. # Everything else is denied by default
  524. # deny and log all packets that fell through to see what they are
  525. $cmd 999 deny log all from any to any
  526. ################ End of IPFW rules file ###############################
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


小黑屋|手机版|Archiver|零零论坛 ( 豫ICP备09039788号 )

GMT+8, 2020-8-8 10:38 , Processed in 1.809072 second(s), 12 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表