本文共 3529 字,大约阅读时间需要 11 分钟。
FirewallD是RHEL/CentOS 7+的一个防火墙服务的守护进程,对应系统的firewalld.service。其与iproute2软件包的iptables/ip6tables的关系如下,实质上都是通过iptables模块配置内核的netfilter模块:
在RHEL/CentOS 7中,iptables.service/ip6tables.service已经被firewalld.service所替代。
FirewallD引入zone和service的概念以方便进行网络流量的管理。一个zone就是一个预定义的规则集,定义了网络连接及涉及的网卡的可信任等级。一个service就是一种预定义的规则(可能包含一系列操作),只有被加入到一个zone中时,service中的规则才会虽则zone而生效。
FirewallD可以通过NetworkManager GUI工具操作Zones。设置一个网卡归属于一个Zone,可以使用NetworkManager,也可以使用firewall-config GUI工具或firewall-cmd命令。事实上,firewall-config或firewall-cmd命令也是在操作NetworkManager的配置文件,所以也就是使用NetworkManager。对于新加入到NetworkManager的网卡,其从属于默认Zone(即public)。
1. Zones
Zones是若干个预定义的规则集。可以将若干个网卡和sources端口纳入一个Zone。根据用户对网卡连接的网络的信任等级,将网卡或sources端口划分到不同的Zones。通过任何一个网卡的网络连接,都只能属于其中一个Zone。一个Zone可能包含多个网卡的网络连接。
FirewallD基于端口进行流量过滤。对于untrusted的Zones中的端口,firewalld默认拒绝任何流量通过该端口。对于trusted的Zones中的端口,firewalld默认运行任何流量通过该端口。
预定义的Zones文件位于目录/usr/lib/firewalld/zones/,一个zone对应一个这里的XML文件。这些Zones文件如果被修改,则会被复制到/etc/firewalld/zones/目录。
预定义的Zones:
FirewallD本质上是通过NetworkManager关联一个网卡到一个zone的。但是,可以通过NetworkManager.service配置网卡的zone,也可以通过FirewallD的命令工具配置网卡的zone。如果没有明确配置,新加入到NetworkManager的网卡连接从属于系统的默认zone(即public)。
2. Services
Services是预定义的规则(或者说操作),包含支持某特定服务所必需的所有必要的设置。只有被加入到一个zone中时,service中的规则才会有效。一个Service就是一个关于网络地址、端口、协议、source端口和目标地址的列表。使用Service的初衷就是简化用户的操作,能够一步实现打开端口、定义协议、开启包转发等功能。
Service的配置文件是类似service-Myname.xml的XML文件。/usr/lib/firewalld/services/目录中有大量系统预定义的Services配置文件,但是默认没有被启用。对于用户定制的service配置文件,位于/etc/firewalld/services/(初始没有任何文件)。
3. firewall-cmd命令
FirewallD运行期间的任何firewall-cmd命令操作,都只对当前运行时立刻生效,但重启后都将消失。
当firewall-cmd命令带--permanent选项时,该命令不会对当前运行时生效,而是在重启firewalld之后才生效。所以紧接着执行firewall-cmd --reload命令,才会生效。
当执行了firewall-cmd命令改变了firewalld运行时之后,紧接着执行firewall-cmd --runtime-to-permanent命令,则对当前firewalld运行时的命令立刻生效,而且重启firewalld之后仍然生效。
FirewallD的常见操作:
开机启动 systemctl enable firewalld 手工启动 systemctl unmask firewalld systemctl start firewalld 手工停止 systemctl stop firewalld 禁止开机启动 systemctl disable firewalld 禁止通过D-Bus接口启动 systemctl mask firewalld 查看状态 firewall-cmd --state systemctl status firewalld 查看配置参数 firewall-cmd --list-all firewall-cmd --list-all-zones firewall-cmd --list-all --zone=home firewall-cmd --list-ports 查看预定义的Zones firewall-cmd --get-zones 默认Zone firewall-cmd --get-default-zone firewall-cmd --set-default-zone <zone-name> 查看默认Zone中的网卡 firewall-cmd --get-active-zones firewall-cmd --zone=<<zone-name> --change-interface=<interface-name> 查看预定义的Services firewall-cmd --get-services 查看启用的Services firewall-cmd --list-services 在默认zone中,启用一个预定义的Service firewall-cmd --add-service=<service-name> firewall-cmd --add-service=ssh --zone=public 创建一个新的Service firewall-cmd --new-service=<service-name> 或 firewall-cmd --new-service-from-file=service-name.xml --name=service-name 将当前运行时的配置持久化,重启后继续生效 firewall-cmd --runtime-to-permanent 开放/关闭端口 firewall-cmd --add-port=<port-number>/<port-type> firewall-cmd --remove-port=<port-number>/<port-type> 其中,port-type可以是tcp, udp, sctp, dccp参考链接:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls
转载地址:http://uhlai.baihongyu.com/