●RHEL7已经默认使用Firewalld作为防火墙,其他使用方式已经变化。

基于iptables的防火墙被默认不启动,但仍然可以继续使用

RHEL7中的共存防火墙有:firewalld、iptables、ebtables等

由于几种daemon是冲突的,所以建议禁用其他 几种服务

●firewalld提供了支持网络/防火墙区域(zone)定义网络连接以及接口安全等级的防火墙管理工具,拥有运行时配置和永久配置选项

●区域:网络区域定义了网络连接的可信等级

●一张网卡同时只能绑到一个zone

●预定义的服务:服务的端口和/或协议入口的组合

●断口和协议:定义了tcp或udp端口,端口可以是一个端口或者端口范围

●ICMP阻塞:可以选择Internet控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应

●伪装:私有网络地址可以被映射到公开的ip地址

●端口转发:端口可以映射到另一个端口以及/或者其他主机

█区域(zone)按照从不信任到信任的排序

●丢弃区域(Drop Zone):任何进入的数据包将被丢弃,即不存在响应

●阻塞区域(Block Zone):会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接

●公共区域(Public Zone):只接受那些被选中的连接,默认只允许ssh和dhcpv6-client。这个zone是缺省zone

●外部区域(External Zone):相当于路由器的启用伪装(masquerading)选项,只有指定的连接会被接受,即ssh,而其他的链接将会被丢弃或者不被接受

●隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。他也拥有只通过被选中连接的特性,即ssh

●工作区域(Work Zone):只能定义内部网络

●家庭区域(Hone Zone):专门用于家庭环境,他同样只允许被选中的连接,即ssh,ipp-client,mdns,samba-client和dhcpv6-client

●内部区域(Internal Zone):和工作区域类似,只用通过被选中的连接,和home区域一样

●信任区域(Trusted Zone):允许所有网络通信通过

█Firewalld的原则

●如果一个客户端数据包的源ip地址匹配zone的sources,那么该zone的规则就适用这个客户端(一个源只能属于一个zone,不能同时属于多个zone)

●如果一个客户端数据包进入服务器的某一个接口匹配zone的interfaces,那么该zone的规则就适用这个客户端

●如果上述两个原则都不满足,那么缺省的zone将被应用

█一般应用

●获取firewalld状态:firewall-cmd --state

●在不改变状态的条件下重新加载防火墙:firewall-cmd --reload

●获得支持的区域列表:firewall-cmd --get-zones

●获取所有支持的服务:firewall-cmd --get-services

 想要列出默认有效的服务,也可以进入/usr/lib/firewalld/services/目录获得

●获取所有支持的ICMP类型:firewall-cmd --get-icmptypes

●列出全部启用的区域的特性(即查询当前防火墙策略):firewall-cmd --list-all-zones

●输出区域全部启用的特性:firewall-cmd [--zone=区域名称] --list-all      #如果不指定区域,则显示默认区域的信息

●查看默认区域:firewall-cmd --get-default-zone     #public区域是默认区域,在/etc/firewalld/firewalld.conf文件中定义DefaultZone=public即可

●设置默认区域: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=接口名

●从区域中删除一个接口:firewall-cmd [--zone=区域名] --remove-interface=接口名

●查询区域中是否包含某接口:firewall-cmd [--zone=区域名] --query-interface=接口名

●列举区域中启用的服务:firewall-cmd [--zone=区域名] --list-services

●启用应急模式阻断所有网络连接:firewall-cmd --panic-on

●禁用应急模式:firewall-cmd --panic-off

●查询应急模式:firewall-cmd --query-panic

█处理运行时区域

●启用区域中的一种服务:firewall-cmd [--zone=区域] --add-service=服务 [--timeout=秒数]

●禁用区域中的某种服务:firewall-cmd [--zone=区域] --remove-service=服务

●查询区域中是否启用了特定服务:firewall-cmd [--zone=区域] --query-service=服务

●启用区域端口和协议组合:firewall-cmd [--zone=区域] --add-port=portid[-portid] / protocol [--timeout=seconds]

●禁用端口和协议组合:firewall-cmd [--zone=区域] --remove-port=portid[-portid] / protocol

●查询区域中是否启用了端口和协议组合:firewall-cmd [--zone=区域] --query-port=portid[-portid] / protocol

●启用区域中的IP伪装功能:firewall-cmd [--zone=区域] --add-masquerade

●禁用区域中的IP伪装功能:firewall-cmd [--zone=区域] --remove-masquerade

●查询区域的伪装状态:firewall-cmd [--zone=区域] --query-masquerade

★注:启用伪装功能的主机同时也需要开启转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward 或 在/etc/sysctl.conf文件中添加net.ipv4.ip_forward = 1

●启用区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --add-icmp-block=icmp类型

●禁用区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --remove-icmp-block=icmp类型

●查询区域的ICMP阻塞功能:firewall-cmd [--zone=区域] --query-icmp-block=icmp类型

●在区域中启用端口转发或映射:firewall-cmd [--zone=区域] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address [/mask]]

●禁用区域的端口转发或端口的映射:firewall-cmd [--zone=区域] --remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

●查询区域的端口转发或端口映射:firewall-cmd [--zone=区域] --query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

█处理永久区域

●获取永久选项所支持的服务:firewall-cmd --permanent --get-services

●获取永久选项所支持的ICMP类型列表:firewall-cmd --permanent --get-icmptypes

●获取支持的永久区域:firewall-cmd --permanent --get-zones

●配置防火墙在public区域打开http协议,并保存,以致重启生效:firewall-cmd --permanent --zone=public --add-service=http

●查看永久模式下public区域是否打开http服务:firewall-cmd --permanent --zone=public --query-service=http

●防火墙开放8080端口在public区域:firewall-cmd --permanent --zone=public --add-port=8080/tcp

●命令行配置富规则:

①查看富规则:firewall-cmd --list-rich-rules

②创建富规则:

firewall-cmd --add-rich-rule ‘rule family=ipv4 source address=ip/掩码 service name=ftp log prefix=“ftp”level=info accept’--permanent

firewall-cmd --add-rich-rule ‘rule family=ipv4 source address=ip/掩码 port port=portid protocol=protocol log prefix=“portid”level=info accept’--permanent

firewall-cmd --add-rich-rule rule family=“ipv4”source address=“ip/掩码”forward-port port=“portid”protocol=“protocol”to-port=“portid”to-addr=“ip”

③富规则中使用伪装功能可以更精确详细的限制:firewall-cmd --add-rich-rule ‘rule family=ipv4 source address=“ip/掩码”masquerade

④仅允许部分ip访问本机服务配置:firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=“ipv4”source address=“ip/掩码”service name=“http”accept”

●删除rich规则

firewall-cmd --permanent --zone=public --remove-rich-rule=‘rule family=ipv4 source address=ip/掩码 service name=服务名 reject’

●仅允许部分ip访问本机端口配置:firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=“ipv4”source address=“ip/掩码”port protocol=“protocol”port=“portid”accept”

●创建rich规则,可以指定日志的前缀和输出级别:firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=“ipv4”source address=“ip/掩码”port port=portid protocol=“protocol”log prefix=proxy level=warning accept”

●端口转发:firewall-cmd --permanent -add-rich-rule ‘rule family=ipv4 source address=ip/掩码 forward-port port=输入的端口 protocol=协议 to-port=访问到的端口’

●某网段内的客户端不能访问主机的某服务:firewall-cmd --permanent --add-rich-rule ‘rule family=“ipv4”source address=ip/掩码 service name=服务名 drop’

●通过配置/etc/firewall/zones/public.xml 文件,进行对防火墙的配置修改

█总结

●图形化配置工具

firewall daemon主要的配置工具是firewall-config。它支持防火墙的所有特性,管理员也可以用它来改变系统或用户策略

●命令行配置工具

firewall-cmd是命令行下提供大部分图形工具配置特性的工具