centos 7 中防火墙是一个非常的强大的功能了,但对于 centos 7 中在防火墙中进行了升级了,下面我们一起来详细的看看关于 centos 7 中防火墙使用方法。
FirewallD 提供了支援互联网/防火墙区域 (zone) 定义互联网连结以及介面安全等级的动态防火墙管理工具。它支援 IPv4, IPv6 防火墙设定以及乙太网桥接,并且拥有执行时配置和永久配置选项。它也支援允许服务或者应用程式直接新增防火墙规则的介面。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括核心 netfilter 防火墙模组的解除安装和新配置所需模组的装载等。而模组的解除安装将会破坏状态防火墙和确立的连线。
相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要过载所有核心防火墙模组了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护程序来实现,以确保守护程序中的状态和核心里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令列工具新增的防火墙规则。
守护程序通过 D-BUS 提供当前启用的防火墙设定资讯,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。

“守护程序”
应用程式、守护程序和使用者可以通过 D-BUS 请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、埠和协议的组合、埠/资料包转发、伪装、 ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。

通过所谓的直接介面,其他的服务 (例如 libvirt ) 能够通过 iptables 变元 (arguments) 和引数 (parameters) 增加自己的规则。
amanda 、 ftp 、 samba 和 tftp 服务的 netfilter 防火墙助手也被 “守护程序” 解决了, 只要它们还作为预定义服务的一部分。附加助手的装载不作为当前介面的一部分。由于一些助手只有在由模组控制的所有连线都关闭后才可装载。因而,跟踪连线资讯很重要,需要列入考虑范围。

静态防火墙 (system-config-firewall/lokkit)
使用 system-config-firewall 和 lokkit 的静态防火墙模型实际上仍然可用并将继续提供,但却不能与 “守护程序” 同时使用。使用者或者管理员可以决定使用哪一种方案。

在站群软件安装,初次启动或者是首次联网时,将会出现一个选择器。通过它你可以选择要使用的防火墙方案。其他的站群解决方案将保持完整,可以通过更换模式启用。
firewall daemon 独立于 system-config-firewall,但二者不能同时使用。

使用 iptables 和 ip6tables 的静态防火墙规则
如果你想使用自己的 iptables 和 ip6tables 静态防火墙规则, 那么请安装 iptables-services 并且禁用 firewalld ,启用 iptables 和 ip6tables:

yum install iptables-services
systemctl mask firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
静态防火墙规则配置档案是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables .
注: iptables 与 iptables-services 站群软件包不提供与服务配套使用的防火墙规则. 这些服务是用来保障相容性以及供想使用自己防火墙规则的人使用的. 你可以安装并使用 system-config-firewall 来建立上述服务需要的规则. 为了能使用 system-config-firewall, 你必须停止 firewalld.
为服务建立规则并停用 firewalld 后,就可以启用 iptables 与 ip6tables 服务了:
systemctl stop firewalld.service
systemctl start iptables.service
systemctl start ip6tables.service

什么是区域?
互联网区域定义了互联网连线的可信等级。这是一个一对多的关系,这意味著一次连线可以仅仅是一个区域的一部分,而一个区域可以用于很多连线。

预定义的服务
服务是埠和/或协议入口的组合。备选内容包括 netfilter 助手模组以及 IPv4 、 IPv6 地址。

埠和协议
定义了 tcp 或 udp 埠,埠可以是一个埠或者埠范围。

ICMP 阻塞
可以选择 Internet 控制报文协议的报文。这些报文可以是资讯请求亦可是对资讯请求或错误条件建立的响应。

伪装
私有互联网地址可以被对映到公开的 IP 地址。这是一次正规的地址转换。

埠转发
埠可以对映到另一个埠以及/或者其他 WordPress 主机。

哪个区域可用?
由 firewalld 提供的区域按照从不信任到信任的顺序排序。

丢弃
任何流入互联网的包都被丢弃,不作出任何响应。只允许流出的互联网连线。

阻塞
任何进入的互联网连线都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的互联网连线。

公开
用以可以公开的部分。你认为互联网中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连线接入。(You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.)

外部
用在路由器等启用伪装的外部互联网。你认为互联网中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连线接入。

隔离区(dmz)
用以允许隔离区(dmz)中的电脑有限地被外界互联网访问。只接受被选中的连线。

工作
用在工作互联网。你信任互联网中的大多数计算机不会影响你的计算机。只接受被选中的连线。

家庭
用在家庭互联网。你信任互联网中的大多数计算机不会影响你的计算机。只接受被选中的连线。

内部
用在内部互联网。你信任互联网中的大多数计算机不会影响你的计算机。只接受被选中的连线。

受信任的
允许所有互联网连线。

我应该选用哪个区域?
例如,公共的 WIFI 连线应该主要为不受信任的,家庭的有线互联网应该是相当可信任的。根据与你使用的互联网最符合的区域进行选择。

如何配置或者增加区域?
你可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如 firewall-config 这样的图形介面工具, firewall-cmd 这样的命令列工具,以及 D-BUS 介面。或者你也可以在配置档案目录中建立或者拷贝区域档案。 @PREFIX@/lib/firewalld/zones 被用于预设和备用配置,/etc/firewalld/zones 被用于使用者建立和自定义配置档案。

如何为互联网连线设定或者修改区域
区域设定以 ZONE= 选项 储存在互联网连线的 ifcfg 档案中。如果这个选项缺失或者为空,firewalld 将使用配置的预设区域。

如果这个连线受到 NetworkManager 控制,你也可以使用 nm-connection-editor 来修改区域。

由 NetworkManager 控制的互联网连线
防火墙不能够通过 NetworkManager 显示的名称来配置互联网连线,只能配置互联网介面。因此在互联网连线之前 NetworkManager 将配置档案所述连线对应的互联网介面告诉 firewalld 。如果在配置档案中没有配置区域,介面将配置到 firewalld 的预设区域。如果互联网连线使用了不止一个介面,所有的介面都会应用到 fiwewalld 。介面名称的改变也将由 NetworkManager 控制并应用到 firewalld 。

为了简化,自此,互联网连线将被用作与区域的关系。
如果一个介面断开了,NetworkManager 也将告诉 firewalld 从区域中删除该介面。
当 firewalld 由 systemd 或者 init 指令码启动或者重启后,firewalld 将通知 NetworkManager 把互联网连线增加到区域。

由指令码控制的互联网
对于由互联网指令码控制的连线有一条限制:没有守护程序通知 firewalld 将连线增加到区域。这项工作仅在 ifcfg-post 指令码进行。因此,此后对互联网连线的重新命名将不能被应用到 firewalld 。同样,在连线活动时重启 firewalld 将导致与其失去关联。现在有意修复此情况。最简单的是将全部未配置连线加入预设区域。

区域定义了本区域中防火墙的特性:

使用 firewalld
你可以通过图形介面工具 firewall-config 或者命令列客户端 firewall-cmd 启用或者关闭防火墙特性。

使用 firewall-cmd
命令列工具 firewall-cmd 支援全部防火墙特性。对于状态和查询模式,命令只返回状态,没有其他输出。

一般应用
获取 firewalld 状态

firewall-cmd –state
此举返回 firewalld 的状态,没有任何输出。可以使用以下方式获得状态输出:
firewall-cmd –state && echo “Running” || echo “Not running”
在 Fedora 19 中, 状态输出比此前直观:
# rpm -qf $( which firewall-cmd )
firewalld-0.3.3-2.fc19.noarch# firewall-cmd –state
not running
在不改变状态的条件下重新载入防火墙:
firewall-cmd –reload
如果你使用–complete-reload,状态资讯将会丢失。这个选项应当仅用于处理防火墙问题时,例如,状态资讯和防火墙规则都正常,但是不能建立任何连线的情况。
获取支援的区域列表
firewall-cmd –get-zones
这条命令输出用空格分隔的列表。
获取所有支援的服务
firewall-cmd –get-services
这条命令输出用空格分隔的列表。
获取所有支援的 ICMP 型别
firewall-cmd –get-icmptypes
这条命令输出用空格分隔的列表。
列出全部启用的区域的特性
firewall-cmd –list-all-zones
输出格式是:

interfaces: ..
services: ..
ports: ..
forward-ports: ..
icmp-blocks: ….
输出区域 全部启用的特性。如果生略区域,将显示预设区域的资讯。
firewall-cmd [–zone=] –list-all
获取预设区域的互联网设定
firewall-cmd –get-default-zone
设定预设区域
firewall-cmd –set-default-zone=
流入预设区域中配置的介面的新访问请求将被置入新的预设区域。当前活动的连线将不受影响。
获取活动的区域
firewall-cmd –get-active-zones
这条命令将用以下格式输出每个区域所含介面:
: ..: ..
根据介面获取区域
firewall-cmd –get-zone-of-interface=
这条命令将输出介面所属的区域名称。
将介面增加到区域
firewall-cmd [–zone=] –add-interface=
如果介面不属于区域,介面将被增加到区域。如果区域被省略了,将使用预设区域。介面在重新载入后将重新应用。
修改介面所属区域
firewall-cmd [–zone=] –change-interface=
这个选项与 –add-interface 选项相似,但是当介面已经存在于另一个区域的时候,该介面将被新增到新的区域。
从区域中删除一个介面
firewall-cmd [–zone=] –remove-interface=
查询区域中是否包含某介面
firewall-cmd [–zone=] –query-interface=
返回介面是否存在于该区域。没有输出。
列举区域中启用的服务
firewall-cmd [ –zone= ] –list-services
启用应急模式阻断所有互联网连线,以防出现紧急状况
firewall-cmd –panic-on
禁用应急模式
firewall-cmd –panic-off

 程式码如下
复制程式码

应急模式在 0.3.0 版本中发生了变化
在 0.3.0 之前的 FirewallD 版本中, panic 选项是 –enable-panic 与 –disable-panic.

查询应急模式
firewall-cmd –query-panic
此命令返回应急模式的状态,没有输出。可以使用以下方式获得状态输出:
firewall-cmd –query-panic && echo “On” || echo “Off”

处理执行时区域
执行时模式下对区域进行的修改不是永久有效的。重新载入或者重启后修改将失效。

启用区域中的一种服务
firewall-cmd [–zone=] –add-service= [–timeout=]
此举启用区域中的一种服务。如果未指定区域,将使用预设区域。如果设定了超时时间,服务将只启用特定秒数。如果服务已经活跃,将不会有任何警告资讯。
例: 使区域中的 ipp-client 服务生效 60 秒:
firewall-cmd –zone=home –add-service=ipp-client –timeout=60
例: 启用预设区域中的 http 服务:
firewall-cmd –add-service=http
禁用区域中的某种服务
firewall-cmd [–zone=] –remove-service=
此举禁用区域中的某种服务。如果未指定区域,将使用预设区域。
例: 禁止 home 区域中的 http 服务:
firewall-cmd –zone=home –remove-service=http
区域种的服务将被禁用。如果服务没有启用,将不会有任何警告资讯。
查询区域中是否启用了特定服务
firewall-cmd [–zone=] –query-service=
如果服务启用,将返回 1, 否则返回 0 。没有输出资讯。
启用区域埠和协议组合
firewall-cmd [–zone=] –add-port=[-]/ [–timeout=]
此举将启用埠和协议的组合。埠可以是一个单独的埠 或者是一个埠范围 。协议可以是 tcp 或 udp 。
禁用埠和协议组合
firewall-cmd [–zone=] –remove-port=[-]/ 查询区域中是否启用了埠和协议组合
firewall-cmd [–zone=] –query-port=[-]/ 如果启用,此命令将有返回值。没有输出资讯。
启用区域中的 IP 伪装功能
firewall-cmd [–zone=] –add-masquerade
此举启用区域的伪装功能。私有互联网的地址将被隐藏并对映到一个公有 IP 。这是地址转换的一种形式,常用于路由。由于核心的限制,伪装功能仅可用于 IPv4 。
禁用区域中的 IP 伪装
firewall-cmd [–zone=] –remove-masquerade
查询区域的伪装状态
firewall-cmd [–zone=] –query-masquerade
如果启用,此命令将有返回值。没有输出资讯。
启用区域的 ICMP 阻塞功能
firewall-cmd [–zone=] –add-icmp-block=
此举将启用选中的 Internet 控制报文协议(ICMP)报文进行阻塞。 ICMP 报文可以是请求资讯或者建立的应答报文,以及错误应答。
禁止区域的 ICMP 阻塞功能
firewall-cmd [–zone=] –remove-icmp-block=
查询区域的 ICMP 阻塞功能
firewall-cmd [–zone=] –query-icmp-block=
如果启用,此命令将有返回值。没有输出资讯。
例: 阻塞区域的响应应答报文:
firewall-cmd –zone=public –add-icmp-block=echo-reply
在区域中启用埠转发或对映
firewall-cmd [–zone=] –add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
埠可以对映到另一台 WordPress 主机的同一埠,也可以是同一 WordPress 主机或另一 WordPress 主机的不同埠。埠号可以是一个单独的埠 或者是埠范围 。协议可以为 tcp 或 udp 。目标埠可以是埠号 或者是埠范围 。目标地址可以是 IPv4 地址。受核心限制,埠转发功能仅可用于 IPv4 。
禁止区域的埠转发或者埠对映
firewall-cmd [–zone=] –remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
查询区域的埠转发或者埠对映
firewall-cmd [–zone=] –query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
如果启用,此命令将有返回值。没有输出资讯。
例: 将区域 home 的 ssh 转发到 127.0.0.2
firewall-cmd –zone=home –add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

处理永久区域
永久选项不直接影响执行时的状态。这些选项仅在过载或者重启服务时可用。为了使用执行时和永久设定,需要分别设定两者。 选项 –permanent 需要是永久设定的第一个引数。

获取永久选项所支援的服务
firewall-cmd –permanent –get-services
获取永久选项所支援的 ICMP 型别列表
firewall-cmd –permanent –get-icmptypes
获取支援的永久区域
firewall-cmd –permanent –get-zones
启用区域中的服务
firewall-cmd –permanent [–zone=] –add-service=
此举将永久启用区域中的服务。如果未指定区域,将使用预设区域。
禁用区域中的一种服务
firewall-cmd –permanent [–zone=] –remove-service=
查询区域中的服务是否启用
firewall-cmd –permanent [–zone=] –query-service=
如果服务启用,此命令将有返回值。此命令没有输出资讯。
例: 永久启用 home 区域中的 ipp-client 服务
firewall-cmd –permanent –zone=home –add-service=ipp-client
永久启用区域中的一个埠-协议组合
firewall-cmd –permanent [–zone=] –add-port=[-]/ 永久禁用区域中的一个埠-协议组合
firewall-cmd –permanent [–zone=] –remove-port=[-]/ 查询区域中的埠-协议组合是否永久启用
firewall-cmd –permanent [–zone=] –query-port=[-]/ 如果服务启用,此命令将有返回值。此命令没有输出资讯。
例: 永久启用 home 区域中的 https (tcp 443) 埠
firewall-cmd –permanent –zone=home –add-port=443/tcp
永久启用区域中的伪装
firewall-cmd –permanent [–zone=] –add-masquerade
此举启用区域的伪装功能。私有互联网的地址将被隐藏并对映到一个公有 IP 。这是地址转换的一种形式,常用于路由。由于核心的限制,伪装功能仅可用于 IPv4 。
永久禁用区域中的伪装
firewall-cmd –permanent [–zone=] –remove-masquerade
查询区域中的伪装的永久状态
firewall-cmd –permanent [–zone=] –query-masquerade
如果服务启用,此命令将有返回值。此命令没有输出资讯。
永久启用区域中的 ICMP 阻塞
firewall-cmd –permanent [–zone=] –add-icmp-block=
此举将启用选中的 Internet 控制报文协议(ICMP)报文进行阻塞。 ICMP 报文可以是请求资讯或者建立的应答报文或错误应答报文。
永久禁用区域中的 ICMP 阻塞
firewall-cmd –permanent [–zone=] –remove-icmp-block=
查询区域中的 ICMP 永久状态
firewall-cmd –permanent [–zone=] –query-icmp-block=
如果服务启用,此命令将有返回值。此命令没有输出资讯。
例: 阻塞公共区域中的响应应答报文:
firewall-cmd –permanent –zone=public –add-icmp-block=echo-reply
在区域中永久启用埠转发或对映
firewall-cmd –permanent [–zone=] –add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
埠可以对映到另一台 WordPress 主机的同一埠,也可以是同一 WordPress 主机或另一 WordPress 主机的不同埠。埠号可以是一个单独的埠 或者是埠范围 。协议可以为 tcp 或 udp 。目标埠可以是埠号 或者是埠范围 。目标地址可以是 IPv4 地址。受核心限制,埠转发功能仅可用于 IPv4 。
永久禁止区域的埠转发或者埠对映
firewall-cmd –permanent [–zone=] –remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
查询区域的埠转发或者埠对映状态
firewall-cmd –permanent [–zone=] –query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}
如果服务启用,此命令将有返回值。此命令没有输出资讯。
例: 将 home 区域的 ssh 服务转发到 127.0.0.2
firewall-cmd –permanent –zone=home –add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

直接选项
直接选项主要用于使服务和应用程式能够增加规则。 规则不会被储存,在重新载入或者重启之后必须再次提交。传递的引数 与 iptables, ip6tables 以及 ebtables 一致。

选项–direct 需要是直接选项的第一个引数。
将命令传递给防火墙。引数 可以是 iptables, ip6tables 以及 ebtables 命令列引数。
firewall-cmd –direct –passthrough { ipv4 | ipv6 | eb }
为表

增加一个新链
firewall-cmd –direct –add-chain { ipv4 | ipv6 | eb }


从表

中删除链
firewall-cmd –direct –remove-chain { ipv4 | ipv6 | eb }


查询 链是否存在与表

. 如果是,返回 0, 否则返回 1.
firewall-cmd –direct –query-chain { ipv4 | ipv6 | eb }


如果启用,此命令将有返回值。此命令没有输出资讯。
获取用空格分隔的表

中链的列表。
firewall-cmd –direct –get-chains { ipv4 | ipv6 | eb }

为表

增加一条引数为 的链 ,优先顺序设定为
firewall-cmd –direct –add-rule { ipv4 | ipv6 | eb }


从表

中删除带引数 的链
firewall-cmd –direct –remove-rule { ipv4 | ipv6 | eb }


查询带引数 的链 是否存在表

中. 如果是,返回 0, 否则返回 1.
firewall-cmd –direct –query-rule { ipv4 | ipv6 | eb }


如果启用,此命令将有返回值。此命令没有输出资讯。
获取表

中所有增加到链 的规则,并用换行分隔。
firewall-cmd –direct –get-rules { ipv4 | ipv6 | eb }

当前的 firewalld 特性 
D-BUS 介面
D-BUS 介面提供防火墙状态的资讯,使防火墙的启用、停用或查询设定成为可能。

区域
互联网或者防火墙区域定义了连线的可信程度。 firewalld 提供了几种预定义的区域。区域配置选项和通用配置资讯可以在 firewall.zone(5) 的手册里查到。

服务
服务可以是一系列本读埠、目的以及附加资讯,也可以是服务启动时自动增加的防火墙助手模组。预定义服务的使用使启用和禁用对服务的访问变得更加简单。服务配置选项和通用档案资讯在 firewalld.service(5) 手册里有描述。

ICMP 型别
Internet 控制报文协议 (ICMP) 被用以交换报文和网际互联网协议 (IP) 的错误报文。在 firewalld 中可以使用 ICMP 型别来限制报文交换。 ICMP 型别配置选项和通用档案资讯可以参阅 firewalld.icmptype(5) 手册。

直接介面
直接介面主要用于服务或者应用程式增加特定的防火墙规则。这些规则并非永久有效,并且在收到 firewalld 通过 D-Bus 传递的启动、重启、过载讯号后需要重新应用。

执行时配置
执行时配置并非永久有效,在重新载入时可以被恢复,而系统或者服务重启、停止时,这些选项将会丢失。

永久配置
永久配置储存在配置档案种,每次机器重启或者服务重启、重新载入时将自动恢复。

托盘小程式
托盘小程式 firewall-applet 为使用者显示防火墙状态和存在的问题。它也可以用来配置使用者允许修改的设定。

图形化配置工具
firewall daemon 主要的配置工具是 firewall-config 。它支援防火墙的所有特性(除了由服务/应用程式增加规则使用的直接介面)。 管理员也可以用它来改变系统或使用者策略。

命令列客户端
firewall-cmd 是命令列下提供大部分图形工具配置特性的工具。

对于 ebtables 的支援
要满足 libvirt daemon 的全部需求,在核心 netfilter 级上防止 ip*tables 和 ebtables 间访问问题,ebtables 支援是需要的。由于这些命令是访问相同结构的,因而不能同时使用。

/usr/lib/firewalld 中的预设/备用配置
该目录包含了由 firewalld 提供的预设以及备用的 ICMP 型别、服务、区域配置。由 firewalld 站群软件包提供的这些档案不能被修改,即使修改也会随著 firewalld 站群软件包的更新被重置。 其他的 ICMP 型别、服务、区域配置可以通过站群软件包或者建立档案的方式提供。

/etc/firewalld 中的系统配置设定
储存在此的系统或者使用者配置档案可以是系统管理员通过配置介面定制的,也可以是手动定制的。这些档案将过载预设配置档案。
为了手动修改预定义的 icmp 型别,区域或者服务,从预设配置目录将配置拷贝到相应的系统配置目录,然后根据需求进行修改。
如果你载入了有预设和备用配置的区域,在 /etc/firewalld 下的对应档案将被重新命名为 .old 然后启用备用配置。

正在开发的特性 
富语言
富语言特性提供了一种不需要了解 iptables 语法的通过高阶语言配置复杂 IPv4 和 IPv6 防火墙规则的机制。

Fedora 19 提供了带有 D-Bus 和命令列支援的富语言特性第 2 个里程碑版本。第 3 个里程碑版本也将提供对于图形介面 firewall-config 的支援。
对于此特性的更多资讯,请参阅: firewalld Rich Language

锁定
锁定特性为 firewalld 增加了锁定本地应用或者服务配置的简单配置方式。它是一种轻量级的应用程式策略。

Fedora 19 提供了锁定特性的第二个里程碑版本,带有 D-Bus 和命令列支援。第 3 个里程碑版本也将提供图形介面 firewall-config 下的支援。
更多资讯请参阅: firewalld Lockdown

永久直接规则
这项特性处于早期状态。它将能够提供储存直接规则和直接链的功能。通过规则不属于该特性。更多关于直接规则的资讯请参阅 Direct options 。

从 ip*tables 和 ebtables 服务迁移
这项特性处于早期状态。它将尽可能提供由 iptables,ip6tables 和 ebtables 服务配置转换为永久直接规则的指令码。此特性在由 firewalld 提供的直接链整合方面可能存在局限性。
此特性将需要大量复杂防火墙配置的迁移测试。

计划和提议功能
防火墙抽象模型
在 ip*tables 和 ebtables 防火墙规则之上新增抽象层使新增规则更简单和直观。要抽象层功能强大,但同时又不能复杂,并不是一项简单的任务。为此,不得不开发一种防火墙语言。使防火墙规则拥有固定的位置,可以查询埠的访问状态、访问策略等普通讯息和一些其他可能的防火墙特性。

对于 conntrack 的支援
要终止禁用特性已确立的连线需要 conntrack 。不过,一些情况下终止连线可能是不好的,如:为建立有限时间内的连续性外部连线而启用的防火墙服务。

使用者互动模型
这是防火墙中使用者或者管理员可以启用的一种特殊模式。应用程式所有要更改防火墙的请求将定向给使用者知晓,以便确认和否认。为一个连线的授权设定一个时间限制并限制其所连 WordPress 主机、互联网或连线是可行的。配置可以储存以便将来不需通知便可应用相同行为。 该模式的另一个特性是管理和应用程式发起的请求具有相同功能的预选服务和埠的外部连结尝试。服务和埠的限制也会限制传送给使用者的请求数量。

使用者策略支援
管理员可以规定哪些使用者可以使用使用者互动模式和限制防火墙可用特性。

埠后设资料资讯 (由 Lennart Poettering 提议)
拥有一个埠独立的后设资料资讯是很好的。当前对 /etc/services 的埠和协议静态分配模型不是个好的站群解决方案,也没有反映当前使用情况。应用程式或服务的埠是动态的,因而埠本身并不能描述使用情况。

后设资料资讯可以用来为防火墙制定简单的规则。下面是一些例子:

允许外部访问档案共享应用程式或服务
允许外部访问音乐共享应用程式或服务
允许外部访问全部共享应用程式或服务
允许外部访问 torrent 档案共享应用程式或服务
允许外部访问 http 互联网服务

这里的后设资料资讯不只有特定应用程式,还可以是一组使用情况。例如:组 “全部共享” 或者组 “档案共享” 可以对应于全部共享或档案共享程式 (如:torrent 档案共享) 。这些只是例子,因而,可能并没有实际用处。
这里是在防火墙中获取后设资料资讯的两种可能途径:
第一种是新增到 netfilter (核心空间) 。好处是每个人都可以使用它,但也有一定使用限制。还要考虑使用者或系统空间的具体资讯,所有这些都需要在核心层面实现。
第二种是新增到 firewall daemon 中。这些抽象的规则可以和具体资讯 (如:互联网连线可信级、作为具体个人/WordPress 主机要分享的使用者描述、管理员禁止完全共享的应归则等) 一起使用。
第二种站群解决方案的好处是不需要为有新的后设资料组和纳入改变 (可信级、使用者偏好或管理员规则等等) 重新编译核心。这些抽象规则的新增使得 firewall daemon 更加自由。即使是新的安全级也不需要更新核心即可轻松新增。
sysctld
现在仍有 sysctl 设定没有正确应用。一个例子是,在 rc.sysinit 正执行时,而提供设定的模组在启动时没有装载或者重新装载该模组时会发生问题。
另一个例子是 net.ipv4.ip_forward ,防火墙设定、 libvirt 和使用者/管理员更改都需要它。如果有两个应用程式或守护程序只在需要时开启 ip_forwarding ,之后可能其中一个在不知道的情况下关掉服务,而另一个正需要它,此时就不得不重启它。
sysctl daemon 可以通过对设定使用内部计数来解决上面的问题。此时,当之前请求者不再需要时,它就会再次回到之前的设定状态或者是直接关闭它。

防火墙规则
netfilter 防火墙总是容易受到规则顺序的影响,因为一条规则在链中没有固定的位置。在一条规则之前新增或者删除规则都会改变此规则的位置。 在静态防火墙模型中,改变防火墙就是重建一个干净和完善的防火墙设定,且受限于 system-config-firewall / lokkit 直接支援的功能。也没有整合其他应用程式建立防火墙规则,且如果自定义规则档案功能没在使用 s-c-fw / lokkit 就不知道它们。预设链通常也没有安全的方式新增或删除规则而不影响其他规则。

动态防火墙有附加的防火墙功能链。这些特殊的链按照已定义的顺序进行呼叫,因而向链中新增规则将不会干扰先前呼叫的拒绝和丢弃规则。从而利于建立更为合理完善的防火墙配置。
下面是一些由守护程序建立的规则,过滤列表中启用了在公共区域对 ssh , mdns 和 ipp-client 的支援:
*filter
:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]:FORWARD_ZONES – [0:0]:FORWARD_direct – [0:0]:INPUT_ZONES – [0:0]:INPUT_direct – [0:0]:IN_ZONE_public – [0:0]:IN_ZONE_public_allow – [0:0]:IN_ZONE_public_deny – [0:0]:OUTPUT_direct – [0:0]-A INPUT -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES
-A INPUT -p icmp -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_ZONES
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
-A OUTPUT -j OUTPUT_direct
-A IN_ZONE_public -j IN_ZONE_public_deny
-A IN_ZONE_public -j IN_ZONE_public_allow
-A IN_ZONE_public_allow -p tcp -m tcp –dport 22 -m conntrack –ctstate NEW -j ACCEPT
-A IN_ZONE_public_allow -d 224.0.0.251/32 -p udp -m udp –dport 5353 -m conntrack –ctstate NEW -j ACCEPT
-A IN_ZONE_public_allow -p udp -m udp –dport 631 -m conntrack –ctstate NEW -j ACCEPT
使用 deny/allow 模型来构建一个清晰行为 (最好没有冲突规则) 。例如: ICMP 块将进入 IN_ZONE_public_deny 链 (如果为公共区域设定了的话),并将在 IN_ZONE_public_allow 链之前处理。
该模型使得在不干扰其他块的情况下向一个具体块新增或删除规则而变得更加容易。

原文连结:http://www.centoscn.com/CentOS/Intermediate/2015/0313/4879.html

2021-04-12T19:15:26+08:00发表于:2021-05-04|站群文章|
返回顶部