手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

svc.ipfd(1M)

名称

svc.ipfd - IP 过滤器防火墙监视守护进程

用法概要

/lib/svc/bin/svc.ipfd
svc:/network/ipfilter:default

描述

svc.ipfd 守护进程监视使用防火墙配置的服务操作,并启动更新服务的 IP 过滤器配置。此守护进程使得系统能够在每个服务级别以递增方式对系统的防火墙配置的变化作出反应。

服务被启用时,将激活服务的防火墙策略;服务被禁用时,将停用服务的防火墙策略;服务的配置属性组被修改时,将更新该服务的防火墙策略。svc.ipfd 监视服务管理工具 (Service Management Facility, SMF) 系统信息库以注意这些操作,并调用 IP 过滤器规则生成进程来实施服务的防火墙策略。

此守护进程由 network/ipfilter 服务通过 startrefresh 方法启动。因此,此守护进程继承相应方法的环境变量和凭证,并以具有所有区域特权的 root 用户身份运行。

防火墙静态配置

静态定义描述了服务用于生成特定于服务的 IPF 规则的网络资源配置。每个服务的 firewall_context 属性组包含服务的静态定义,类似于 inetd 管理的服务中的 inetd 属性组。该属性组支持:

firewall_context/name

适用于非 inetd 服务。IANA 名称或 RPC 名称,等同于 inetd/name 属性。

firewall_context/isrpc

适用于非 inetd 服务。布尔属性,其中 true 值表示 RPC 服务,等同于 inetd/isrpc 属性。对于 RPC 服务,firewall_context/name 的值不是 IANA 名称,而是 RPC 程序编号或名称。请参见 rpc(4)

另外,某些服务可能需要一种机制来生成和提供其自己的 IPF 规则。可选属性 ipf_method 提供了一种允许此类定制规则生成的机制:

firewall_context/ipf_method

一个命令。通常是一个用于为服务生成 IPF 规则的脚本。该框架不会为具有此属性定义的服务来生成规则。相反,该框架希望这些服务提供它们自己的规则。

服务的 ipf_method 指定一个命令,该命令接受一个附加参数、其自己的故障管理资源标识符 (fault management resource identifier, FMRI),生成服务的防火墙规则并将这些规则输出到 stdout。要为具有 ipf_method 属性的服务生成规则,该框架通过将服务 FMRI 传递为附加参数来执行 ipf_method 中指定的命令,并通过将命令输出、规则重定向到服务的规则文件来存储服务的规则。因为 ipf_method 是从 network/ipfilter startrefresh 方法进程上下文中执行的,因此它继承执行上下文并以 root 用户身份运行。

服务静态配置是由服务开发者提供的,用户不能修改。这些属性仅在安装更新的服务定义时进行修改。

防火墙策略配置

每个服务的属性组 firewall_config 存储服务的防火墙策略配置。因为 network/ipfilter:default 负责两个防火墙策略,即适用于整个系统范围的 Global Default(全局缺省值)和 Global Override(全局覆盖)策略(如 ipfilter(5) 中所述),因此它有两个属性组 firewall_config_defaultfirewall_config_override,分别存储适用于整个系统范围的这两个策略。

下面是属性、属性的可能值,以及相应的语义:

policy

policy 有以下模式:

none 策略模式

无访问限制。对于全局策略,此模式允许所有传入通信。对于服务策略,此模式允许发送到其服务的所有传入通信。

deny 策略模式

none 的限制性要强。此模式允许来自除 apply_to 中指定的源以外的所有源的传入通信。

allow 策略模式

限制性最强的模式。此模式阻止来自除 apply_to 中指定的源以外的所有源的传入通信。

custom 策略模式

ipfilter 服务将使用 custom_policy_file 属性中指定的 ipfilter 配置文件。

apply_to

一个多值属性,它列出了要实施所选的策略模式的网络实体。如果策略为 deny,则将拒绝 apply_to 属性中列出的实体;如果策略为 allow,则将允许列出的实体。可能值的语法如下:

host:           host:IP                 "host:192.168.84.14"
subnet:         network:IP/netmask      "network:129.168.1.5/24"
ippool:         pool:pool number        "pool:77"
interface:      if:interface_name       "if:e1000g0"
exceptions

一个多值属性,它列出了需要排除在 apply_to 列表之外的网络实体。例如,当向某个子网应用 deny 策略时,通过在 exceptions 属性中指定该子网中的某些主机,可对这些主机进行例外处理。此属性具有与 apply_to 属性相同的值语法。

仅适用于各个网络服务:

firewall_config/policy

还可以将服务的策略设置为 use_global。采用 use_global 策略模式的服务继承 Global Default(全局缺省值)防火墙策略。

仅适用于 Global Default(全局缺省值):

firewall_config_default/policy

Global Default(全局缺省值)策略,svc:/network/ipfilter:default 中的 firewall_config 属性组也可以设置为 custom。用户可将 policy 设为 custom 以使用预填充的 IP 过滤器配置,例如,现有的 IP 过滤器配置或框架无法提供的定制配置。此仅适用于 Global Default(全局缺省值)的策略模式允许用户提供一个包含完整的 IPF 规则集的文本文件。当选择了 custom 模式时,指定的 IPF 规则集是完整的,且框架不会基于所配置的防火墙策略生成 IPF 规则。

firewall_config_default/custom_policy_file

当 Global Default(全局缺省值)策略设为 custom 时要使用的文件路径。该文件包含用来提供所需的 IP 过滤器配置的 IPF 规则集。例如,在 /etc/ipf/ipf.conf 中具有现有 IPF 规则的用户可执行下列命令来使用现有的规则:

  1. 设置定制策略:

    # svccfg -s ipfilter:default setprop \
    firewall_config_default/policy = astring: "custom"
  2. 指定定制文件:

    # svccfg -s ipfilter:default setprop \
    firewall_config_default/custom_policy_file = astring: \
    "/etc/ipf/ipf.conf"
    
    
  3. 刷新配置:

    # svcadm refresh ipfilter:default
firewall_config_default/open_ports

要求允许其传入通信的非服务程序可以请求防火墙允许将通信流量发往其通信端口。此多值属性包含协议和端口元组,格式如下:

"{tcp | udp}:{PORT | PORT-PORT}"

初始状态下,适用于整个系统范围的策略设为 none,网络服务的策略设为 use_global。由于适用于整个系统范围的策略为 none 且所有服务均继承该策略,因此启用 network/ipfilter 将使用一组空的 IP 过滤器规则来激活防火墙。要配置更具限制性的策略,请使用 svccfg(1M) 来修改网络服务的策略和适用于整个系统范围的策略。

用户可通过修改服务的 firewall_config 属性组来配置防火墙策略。已创建了一个新的授权 solaris.smf.value.firewall.config,用以允许将防火墙管理特权委托给用户。具有 Service Operator(服务操作员)特权的用户需要具有该新的授权才能配置防火墙策略。

防火墙可用性

在引导过程中,将在启动已启用的服务之前为其配置防火墙。因此,在引导时服务是受保护的。当系统在运行时,在为服务配置防火墙期间运行服务时,诸如服务重新启动、启用和刷新之类的管理操作可能会导致服务在短暂时间内存在漏洞。

svc.ipfd 监视服务的启动和停止事件,并在 SMF 启动或停止服务的同时配置或取消配置服务的防火墙。因为两个操作同步进行,如果在防火墙配置完成前启动服务,可能会暴露窗口(小于一秒)。RPC 服务通常在临时地址上侦听,在服务实际运行前这些地址是未知的。RPC 服务会面临同样的暴露,因为在服务运行前不会配置防火墙。

开发者文档

建议将提供远程功能的服务加入到防火墙框架中以控制对服务的网络访问。虽然该框架集成不是强制性的,但如果配置了适用于整个系统范围的策略,对未集成到框架中的服务的远程访问可能无法正常进行。

将服务集成到框架中非常简便,仅需在服务清单中定义两个附加的属性组及其相应的属性。当用户启用服务时将生成的 IP 过滤器规则。需要使用 shell 脚本生成非琐碎的定制规则时,可以使用现有的一些脚本作为示例。

其他属性组(firewall_configfirewall_context)分别存储防火墙策略配置和提供静态防火墙定义。下面是新的属性组和属性及其相应的缺省值的摘要。

防火墙策略配置:

firewall_config

对系统的访问由一个新的授权定义和一个用户定义属性类型予以保护。应当以如下方式将新的授权分配给属性组 value_authorization 属性:

<propval name='value_authorization' type='astring'
value='solaris.smf.value.firewall.config' />

第三方应按照服务符号名称空间约定来生成用户定义类型。Sun 提供的服务可以使用 com.sun,fw_configuration 作为属性类型。

有关更多信息,请参见上文中的“防火墙策略配置”。

firewall_config/policy

此属性的初始值应为 use_global,因为缺省情况下服务会继承 Global Default(全局缺省值)防火墙策略。

firewall_config/apply_to

一个空属性,此属性没有初始值。

firewall_config/exceptions

一个空属性,此属性没有初始值。

防火墙静态定义:

firewall_context

第三方应按照服务符号名称空间约定来生成用户定义类型,Oracle 提供的服务可以使用 com.sun,fw_definition 作为属性类型。

有关更多信息,请参见上文中的“防火墙静态配置”。

firewall_context/name

具有大家熟知的由 IANA 定义的端口的服务,可通过 getservbyname(3SOCKET) 获取。服务的 IANA 名称存储在此属性中。对于 RPC 服务,RPC 程序编号存储在此属性中。

firewall_context/isrpc

对于 RPC 服务,创建此属性时应将其值设为 true

firewall_context/ipf_method

通常,指定的防火墙策略将用于生成服务的通信端口(派生自 firewall_context/name 属性)的 IP 过滤器规则。没有由 IANA 定义的端口且不是 RPC 服务的服务将需要生成其自己的 IP 过滤器规则。生成其自己的规则的服务可以选择不使用 firewall_context/namefirewall_context/isrpc 属性。有关指南,请参见以下服务:

svc:/network/ftp:default
svc:/network/nfs/server:default
svc:/network/ntp:default

...以及具有 ipf_method 的其他服务。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os、network/ipfilter
接口稳定性
Committed(已确定)

另请参见

svcprop(1)svcs(1)ipf(1M)svcadm(1M)svccfg(1M)getservbyname(3SOCKET)rpc(4)attributes(5)ipfilter(5)smf(5)