firewalld预定义的防火墙区域
firewalld 软件包在以下目录中包含一组预定义的网络区域:
# ls -lrt /usr/lib/firewalld/zones/ total 36 -rw-r----- 1 root root 342 Sep 15 2015 work.xml -rw-r----- 1 root root 162 Sep 15 2015 trusted.xml -rw-r----- 1 root root 315 Sep 15 2015 public.xml -rw-r----- 1 root root 415 Sep 15 2015 internal.xml -rw-r----- 1 root root 400 Sep 15 2015 home.xml -rw-r----- 1 root root 304 Sep 15 2015 external.xml -rw-r----- 1 root root 291 Sep 15 2015 drop.xml -rw-r----- 1 root root 293 Sep 15 2015 dmz.xml -rw-r----- 1 root root 299 Sep 15 2015 block.xml
区域文件包含可应用于网络接口的预设设置。
例如:
# grep -i service /usr/lib/firewalld/zones/public.xml <service name=“ssh”/> <service name=“dhcpv6-client”/>
在此示例中,绑定到公共区域的网络接口仅信任两个服务:ssh 和 dhcpv6-client。
每个区域的简要说明如下:
drop :任何传入的网络数据包都被丢弃,没有回复。
仅外发
网络连接是可能的。
block :任何传入的网络连接都被拒绝,IPv4 的 icmp-hostprohibited 消息和 IPv6 的 icmp6-adm-prohibited 消息。
只能从系统内部发起网络连接。
home : 用于家庭区域。
我们大多相信网络上的其他计算机不会损害计算机。
仅接受选定的传入连接。
public :用于公共区域。
我们不相信网络上的其他计算机不会损害计算机。
仅接受选定的传入连接。
work:用于工作区域。
我们大多相信网络上的其他计算机不会损害计算机。
仅接受选定的传入连接。
dmz :适用于非军事区中的计算机,这些计算机可公开访问,但对内部网络的访问受到限制。
仅接受选定的传入连接。
external :用于启用伪装的外部网络,尤其是路由器。
我们不相信网络上的其他计算机不会损害计算机。
仅接受选定的传入连接。
internal :用于内部网络。
我们大多相信网络上的其他计算机不会损害计算机。
仅接受选定的传入连接。
trusted:接受所有网络连接。
firewalld的配置文件
firewalld 的配置文件存在于两个目录中:
/usr/lib/firewalld :包含默认配置文件。
不要更改这些文件。
firewalld 软件包的升级会覆盖此目录。
/etc/firewalld :对默认配置文件的更改存储在此目录中。
此目录中的文件重载了默认配置文件。
防火墙服务
firewalld 服务是本地端口和协议以及目标地址的组合。
firewalld 服务还可以包含在启用服务时自动加载的 Netfilter 内核模块。
firewalld 软件包在以下目录中包含一组预定义的服务:
# ls -lrt /usr/lib/firewalld/zones/ total 36 -rw-r----- 1 root root 342 Sep 15 2015 work.xml -rw-r----- 1 root root 162 Sep 15 2015 trusted.xml -rw-r----- 1 root root 315 Sep 15 2015 public.xml -rw-r----- 1 root root 415 Sep 15 2015 internal.xml -rw-r----- 1 root root 400 Sep 15 2015 home.xml -rw-r----- 1 root root 304 Sep 15 2015 external.xml -rw-r----- 1 root root 291 Sep 15 2015 drop.xml -rw-r----- 1 root root 293 Sep 15 2015 dmz.xml -rw-r----- 1 root root 299 Sep 15 2015 block.xml
可以在运行时模式下为区域启用服务。
服务定义只能在永久模式下编辑。
防火墙区域
firewalld 服务允许我们根据我们希望在特定网络内的设备和流量上的信任级别将网络划分为不同的区域。
对于每个区域,我们可以定义以下功能:
服务(Service):要信任的预定义或者自定义服务。
可信服务是可从其他系统和网络访问的端口和协议的组合。
端口(Port):可从其他系统和网络访问的其他端口或者端口范围以及相关协议。
伪装(Masquerading):将 IPv4 地址转换为单个外部地址。
启用伪装后,私有网络的地址被映射到并隐藏在公共地址之后。
端口转发(Port Forwarding):将来自特定端口或者端口范围的入站网络流量转发到本地系统上的备用端口,或者转发到另一个 IPv4 地址上的端口。
ICMP 过滤器(ICMP Filter):阻止选定的 Internet 控制消息协议消息。
富规则(Rich Rules):扩展现有的 firewalld 规则以包括另外的源地址和目标地址以及日志记录和审计操作。
接口(Interface):绑定到区域的网络接口。
接口的区域使用 /etc/sysconfig/network-scripts/ifcfg 文件中的 ZONE=option 指定。
如果缺少该选项,则接口绑定到默认区域。
设置默认 firewalld 区域
初始安装后,公共区域是配置文件 /etc/firewalld/firewalld.conf 中指定的默认区域。
# grep -i defaultzone /etc/firewalld/firewalld.conf DefaultZone=public
网络接口绑定到默认区域,除非在 ifcfg 文件中使用 ZONE=[zone] 指定。
以下命令显示绑定到公共区域的接口:
# firewall-cmd --get-active-zone public interfaces: eth0 eth1
我们可以使用 firewall-cmd 命令更改默认区域:
# firewall-cmd --set-default-zone=work success
我们还可以使用 firewall-config GUI 来更改默认区域。
从菜单列中,选择选项->更改默认区域,然后从弹出列表中选择一个区域。
CentOS/RHEL 启动firewalld防火墙
启动 firewalld:
# systemctl start firewalld
要确保 firewalld 在启动时启动:
# systemctl enable firewalld
要检查 firewalld 是否正在运行:
# systemctl status firewalld # firewall-cmd --state
配置firewalld服务的三种方法:
- firewall-cmd :命令行界面
- firewall-config :图形用户界面
- 编辑各种 XML 配置文件。
firewalld配置选项
firewalld 服务有两种类型的配置选项:
运行时:对防火墙设置的更改会立即生效,但不是永久性的。
重新启动 firewalld 服务时,在运行时配置模式下所做的更改将丢失。永久:对防火墙设置的更改写入配置文件。
当 firewalld 服务重新启动时,将应用这些更改。
与 iptables 相比,firewalld的优势
firewalld 与 iptables 相比具有以下优势:
与 iptables 命令不同,firewall-cmd 命令不会重新启动防火墙并中断已建立的 TCP 连接。
firewalld 支持动态区域。
firewalld 支持 D-Bus 以更好地与依赖防火墙配置的服务集成。
firewall-cmd 实用程序
命令行工具 firewall-cmd 是 firewalld 应用程序的一部分,默认情况下安装。
要获得有关 firewall-cmd 命令的帮助:
# firewall-cmd --help
firewall-cmd 命令提供选项类别,例如 General、Status、Permanent、Zone、IcmpType、Service、Adapt 和 Query Zones、Direct、Lockdown、Lockdown Whitelist 和 Panic。
列出所有区域的信息:
# firewall-cmd --list-all-zones public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh ports: ...
允许 HTTP 客户端访问公共区域:
# firewall-cmd --zone=public --add-service=http success
列出公共区域允许的服务:
# firewall-cmd --zone=work --list-services dhcpv6-client http ssh
使用此命令只会更改运行时配置,不会更新配置文件。
重新启动 firewalld 服务时,在运行时配置模式下所做的配置更改将丢失:
# systemctl restart firewalld # firewall-cmd --zone=work --list-services dhcpv6-client ssh
要永久更改,请使用 -permanent 选项。
例子:
# firewall-cmd --permanent --zone=public --add-service=http success
在永久配置模式下所做的更改不会立即实施。
但是,在永久配置中所做的更改会写入配置文件。
重新启动 firewalld 服务读取配置文件并实施更改。
例子:
# systemctl restart firewalld # firewall-cmd --zone=work --list-services dhcpv6-client http ssh
CentOS/RHEL 防火墙
数据包过滤防火墙读取传入的网络数据包并根据数据包中的标头信息过滤(允许或者拒绝)每个数据包。
Linux 内核具有称为 Netfilter 的内置包过滤功能。
RHEL 7 中提供了两个服务来创建、维护和显示 Netfilter 存储的规则:
- firewalld
- iptables
在 RHEL 7 中,默认的防火墙服务是 firewalld。
firewalld 是一个动态防火墙管理器,支持防火墙(网络)区域。
firewalld 服务支持 IPv4. IPv6 和以太网桥。
firewalld 服务还提供了一个 D-BUS 接口。
已经使用 D-BUS 的服务或者应用程序可以直接通过 D-BUS 接口添加或者请求更改防火墙规则。