天下風雲出我輩
一入江湖歲月催

Firewalld规则及使用方法

Firewalld – Dynamic Firewall Manager 是RedHat/Centos7系统用于管理主机级别防火墙的默认方法。Firewalld是一个服务,用于配置网络连接,从而哪些内外部网络的数据包可以允许穿过网络或阻止穿过网络,Firewalld服务与其他Iptables等服务有冲突,开启Firewalld服务的时候将iptableds其他服务禁用。

Firewalld服务管理命令:

systemctl (start|stop|restart|status|enable|disable) firewalld

Firewalld将所有传入流量划分成区域,每个区域都具有主机的一套规则。为检查哪个区域用于传入连接,Firewalld使用以下逻辑,第一个匹配的规则胜出:

  1. 如果传入包的原地址与区域的某个与源规则设置相匹配,该包将通过该区域进行路由。
  2. 如果包的传入接口与区域的过滤设置匹配,则将使用该区域。
  3. 否则将使用默认区域。默认区域不是单独的区域,而是指向系统上定义的某个其他区域。

除非被管理员NetworkManager配置所覆盖,否则,任何新网络接口的默认区域都将设置为Public区域。

Firewalld区域默认配置

区域名称 默认配置
trusted 允许所有传入流量
home 除非与传入流量相关,或与ssh、mdns、ipp-client、smaba-client、dhcpv6-client预定义服务匹配,否则拒绝传入流量。
internal 一开始与home区域相同
work 除非与传入流量相关,或与ssh、ipp-client、dhcpv6-client预定义服务匹配,否则拒绝传入流量。
public 除非与传入流量相关,或与ssh、、dhcpv6-client预定义服务匹配,否则拒绝传入流量。新添加的网络接口的默认区域。
external 除非与传入流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPV4传出流量将进行伪装,以使其看起来像是来自传出网络接口的IPv4地址。
dmz 除非与传入流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。
block 除非与传入流量相关,否则拒绝传入流量
drop 除非与传入流量相关,否则拒绝传入流量(甚至不产生包含ICMP错误的响应。)

 

三种管理Firewalld的方式:

  1. 使用命令行工具Firewalld-cmd
  2. 使用图形工具firewalld-config
  3. 使用/etc/firewalld/中打的配置文件

一般使用firewalld-cmd管理较为常用, –permanent为永久生效,如果在命令中省略–zone,则将使用默认区域。firewalld-cmd –reload 为激活更改生效。

Firewalld-cmd命令 说明
–get-default-zone 查询当前默认区域
–set-default-zone=<ZONE> 设置默认区域。此命令会同时更改运行时配置和永久配置。
–get-zones 列出所有可用区域
–get-services 列出所有预定义服务
–add-source=<CIDR> [–zone=<ZONE>] 将来自IP地址或网络/子网掩码<CIDR>的所有流量路由到指定区域,如果未提供–zone=选项,则将使用默认区域。
–reomve-source=<CIDR> [–zone=<ZONE>] 从指定区域中删除用于路由来自IP地址或网络/子网掩码<CIDR>的所有流量规则。如果未提供–zone=选项,则将使用默认区域。
–add-interface=<INTERFACE> [–zone=<ZONE>] 将来自<INTERFACE>网络接口的所有流量路由到指定区域。如果未提供–zone=选项,则将使用默认区域
–change-interface=<INTERFACE> [–zone=<ZONE>] 更改当前接口<INTERFACE>与<ZONE>的关联。如果未提供–zone=选项,则将使用默认区域
–list-all [–zone=<ZONE>] 列出<ZONE>的所有已配置的接口,源,服务和端口,如果未提供–zone=选项,则将使用默认区域
–list-all-zones 检索所有区域的所有信息(接口,源,服务和端口等)
–add-service=<SERVICE> 允许<SERVICE>的流量,如果未提供–zone=选项,则将使用默认区域。
–remove-service=<SERVICE> 从区域的允许列表中删除<SERVICE>.如果未提供–zone=选项,则将使用默认区域。
–add-port=<PORT/PROTOCOL> 允许到<PORT/PROTOCOL>端口的流量。如果未提供–zone=选项,则将使用默认区域。
–remove-port=<PROT/PROTOCAL> 从区域的允许列表中删除<PROT/PROTOCAL>端口。如果未提供–zone=选项,则将使用默认区域。
–reload 永久生效配置

 

实战案例:

#检索所有区域的所有信息
firewall-cmd --list-all-zones

#查看所有开放的端口 
firewall-cmd --list-ports

#添加ip或CIDR到默认区域
firewald-cmd --permanent --add-source=192.168.1.0/24

#允许80端口通过public
firewall-cmd --permanent  --add-port=80/tcp 

#添加服务,允许https访问,并永久生效:
firewall-cmd --permanent  --add-service=https 

#一下更改全部需要reload重新加载方可生效
firewall-cmd --reload

富规则

Firewalld富规则为管理员提供了一种表达性语言,通过这种可表达的firewalld基本语法中未涵盖的自定义防火墙规则;例如,仅允许从单个ip地址(而非通过某个区域路由的所有IP地址)连接到服务。

富规则可用于表达基本的允许/拒绝规则,但是也可以用于配置记录(面向syslog和auditd)以及端口转发、伪装和速率限制。

可以通过以下块来表达富规则的基本语法:

rule
[source]
[destination]
service|port|protocol|icmp=block|masquerade|forward-port 
[log]
[audit]
[accept|reject|drop]

规则的几乎每个单一元素都能够以option=value形式来采用附加参数。

使用富规则

firewall-cmd有四个选项可用于处理富规则,所有这些选项都可以与常规的–permanent或–zone=<ZONE>选项组合使用。

选项 说明
–add-rich-rule='<RULE>’ 向指定区域中添加<RULE>,如果未指定区域,则向默认区域中添加。
–remove-rich-rule='<RULE>’ 从指定区域中删除<RULE>,如果未指定区域,则从默认区域中删除。
–query-rich-rule='<RULE>’ 查询<RULE>是否添加到指定区域,如果未指定区域,则为默认区域,如果规则存在,则返回0,否则返回1.
–list-rich-rules 输出指定区域的所有富规则,如果未指定区域,则为默认区域。

任何已配置的富规则还将显示在firewalld-cmd –list-all和firewalld-cmd –list-all-zones的输出中。

Examples

#拒绝172.27.10.0/22网络用户访问ssh
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" 
source address="172.27.10.0/22" service name="ssh" reject"

#端口转发 :将来自172.25.0.0/24子网5432的端口流量转发到本地的80端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
 address=172.25.0.0/24 forward-port port=5423 protocol=tcp to-port=80'


#在默认区域中,允许每分钟对ftp有两次新连接,临时生效
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'


#丢弃来自默认区域中任何位置的所有传入IPsec esp协议包。
firewall-cmd --permanet --add-rich-rule='rule protocol value=esp drop'


#在192.168.10/24子网中的vnc区域,接受端口7900~7905上的所有TCP包。
firewall-cmd --permanent --zone=vnc --add-rich-rule='family-ipv4 
source address=192.168.1.0/24 port prt=7900-7905 protocol=tcp accept'


#允许172.25.1.0/32子网访问http,并记录此流量,但限制每秒3个新连接
firewall-cmd --permanet --add-rich-rle='rule familiy-ipv4 source address=172.25.0.0/32 
service name="http" log level=notice prefix="NEW HTTP" limit value="3/s" accept'


#以上永久性生效需执行以下reload指令
firewall-cmd --reload

更多Firewalld使用方法参考 man firewalld

 

赞(5) 打赏
未经允许不得转载:Anonym0x1 » Firewalld规则及使用方法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏