Linux 之 Firewalld

概述

image.png
  • 在CentOS 7中 默认的防火墙为firewalld。centos6默认防火墙为iptables;

  • 在CentOS 7中 有几种防火墙共存:firewalld、iptables、ebtables、TCP-Wrapper;

  • 在CentOS 7中 默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等;

  • Firewalld跟IPtables区别为:firewalld每个服务都需要去设置才能放行,因为默认是拒绝;而iptables里默认是每个服务是允许,需要拒绝的才去限制;

  • Firewalld与iptables的关系:

    1. firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
    2. firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
      注:firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

区域管理

  • firewalld将网卡对应到不同的区域(zone),zone 默认共有9个,不同的区域之间的差异是其对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在CentOS7系统中,默认区域被设置为public,通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流,例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化:
    1. block 2. dmz 3. drop 4. external 5. home 6. internal 7. public 8. trusted 9. work

  • 该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式,有如下几种不同的初始化区域:

    • 阻塞区域(block):任何传入的网络数据包都将被阻止;
    • 工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
    • 家庭区域(home):相信网络上的其他计算机,不会损害你的计算机;
    • 公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接;
    • 隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接;
    • 信任区域(trusted):所有的网络连接都可以接受;
    • 丢弃区域(drop):任何传入的网络连接都被拒绝;
    • 内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接;
    • 外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接;

注:FirewallD的默认区域是public

  • firewalld默认提供了九个zone配置文件:
    block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib/firewalld/zones/”目录下;

    默认情况下,在/etc/firewalld/zones下面只有一个public.xml。如果给另外一个zone做一些改动,并永久保存,那么会自动生成对应的配置文件.

    //比如给work zone增加一个端口:
     firewall-cmd --permanent --zone=work --add-port=1000/tcp
    

    此时就会生成一个work.xml的配置文件


  • 查看XX区域的永久配置文件:
    [root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml
    注意:防火墙配置文件也可以手动修改,修改后记得reload防火墙

  • 配置方法
    firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具。
    而对于linux来说大家应该更习惯使用命令行方式的操作,所以 firewall-config我们就不给大家介绍了。
    firewalld默认配置文件有两个:
    /usr/lib/firewalld/ (系统配置,尽量不要修改)
    /etc/firewalld/ (用户配置地址)


网络服务

  • 服务
    • 在 /usr/lib/firewalld/services/ 目录中,还保存了另外一类配置文件,每个文件对应一项具体的网络服务,如 ssh 服务等;
    • 与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口,在最新版本的 firewalld 中默认已经定义了 70+ 种服务供我们使用.
    • 当默认提供的服务不够用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在 /etc/firewalld/services/ 目录中.service 配置的好处显而易见:
      • 第一,通过服务名字来管理规则更加人性化,
      • 第二,通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。
  • 修改服务
    假如你服务器的ftp不使用默认端口,默认ftp的端口21改为1121,但想通过服务的方式操作防火墙。
    代码如下:
    复制模版到/etc,以便修改和调用
    [root@zcwyou ~]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/
    修改模版配置
    [root@zcwyou ~]# vim /etc/firewalld/services/ftp.xml
    把21改为1121
    [root@zcwyou ~]# vim /etc/firewalld/zones/public.xml
    public为默认zone,所以要编辑这个,增加一行,以下内容
    <service name="ftp"/>
    重新加载防火墙配置
    [root@zcwyou ~]# firewall-cmd --reload

安装、启用、关闭firewalld

  • 安装firewalld
    //Centos 默认已安装firewall-config
    [root@zcwyou ~]# yum install firewalld firewall-config
  • 启动服务
    [root@zcwyou ~]# systemctl start firewalld
  • 开机自动启动服务
    [root@zcwyou ~]# systemctl enable firewalld
  • 查看状态
    [root@zcwyou ~]# systemctl status firewalld
    [root@zcwyou ~]# firewall-cmd --state
  • 关闭服务
    [root@zcwyou ~]# systemctl stop firewalld
  • 取消开机启动
    [root@zcwyou ~]# systemctl disable firewalld
  • 弃用FirewallD防火墙,改用iptables (你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,但不建议:)
    [root@zcwyou ~]# yum install iptables-services
    [root@zcwyou ~]# systemctl start iptables
    [root@zcwyou ~]# systemctl enable iptables
  • 查看版本
    [root@zcwyou ~]# firewall-cmd --version
  • 查看帮助
    [root@zcwyou ~]# firewall-cmd --help
  • 显示状态
    [root@zcwyou ~]# firewall-cmd --state
    [root@zcwyou ~]# systemclt status firewalld
  • 查看活动区域信息
    [root@zcwyou ~]# firewall-cmd --get-active-zones
  • 查看XX接口所属区域
    [root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX
  • 拒绝所有包
    [root@zcwyou ~]# firewall-cmd --panic-on
  • 取消拒绝状态
    [root@zcwyou ~]# firewall-cmd --panic-off
  • 查看是否拒绝
    [root@zcwyou ~]# firewall-cmd --query-panic
  • 查看firewalld是否开启
    [root@zcwyou ~]# systemctl is-enabled firewalld
  • 重启加载防火墙(以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:)
    [root@zcwyou ~]# firewall-cmd --reload
  • 完全重启防火墙 (以 root 身份输入以下命令,重新加载防火墙并中断用户连接,即丢弃状态信息:)
    [root@zcwyou ~]# firewall-cmd --complete-reload
    注意:通常在防火墙出现严重问题时,这个命令才会被使用。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接。
    firewall-cmd --reload与firewall-cmd --complete-reload两者的区别就是:
    • 第一个无需断开连接,就是firewalld特性之一动态添加规则
    • 第二个需要断开连接,类似重启服务
  • 显示默认区域
    [root@zcwyou ~]# firewall-cmd --get-default-zone
  • 添加接口到区域(将接口添加到XX区域,如果不指定区域,则添加到默认区域)
    [root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0
    永久生效再加上--permanent 然后reload防火墙
  • 设置默认区域,立即生效无需重启
    [root@zcwyou ~]# firewall-cmd --set-default-zone=XX
  • 查看XX区域打开的端口
    [root@zcwyou ~]# firewall-cmd --zone=XX --list-ports
  • 查看XX区域加载的服务
    [root@zcwyou ~]# firewall-cmd --zone=XX --list-services
  • 临时加一个端口到XX区域
    [root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp
    若要永久生效方法加参数--permanent
  • 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,查看其它的xml文件以及参考前面说方法
    [root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp
  • 移除服务
    [root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp
  • 显示支持的区域列表
    [root@zcwyou ~]# firewall-cmd --get-zones
  • 列出全部区域启用的特性
    [root@zcwyou ~]# firewall-cmd --list-all-zones
  • 显示XX区域详情
    [root@zcwyou ~]# firewall-cmd --zone=XX --list-all
  • 查看当前活跃区域
    [root@zcwyou ~]# firewall-cmd --get-active-zones
  • 设置XX接口所属区域
    [root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX
  • 查询YY区域中是否包含XX接口
    [root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX
  • 删除指定XX网卡所在的zone(以YY为例)
    [root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX
    4.34 临时修改XX接口为YY区域(永久修改加参数--permanent)
    [root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX
  • 控制端口 / 服务
    可以通过两种方式控制端口的开放:
    1. 一种是指定端口号,另一种是指定服务名。
      虽然开放 http 服务就是开放了 80 端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;
    2. 通过指定端口号开放的就要通过指定端口号关闭。
    3. 还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp 还是 udp。
  • 富规则
    [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="5432" accept"
    [root@zcwyou ~]# systemctl restart firewalld.service
    image.png

firewalld服务管理

  • 显示支持的服务
    [root@zcwyou ~]# firewall-cmd --get-services
  • 临时允许Samba服务通过600秒
    [root@zcwyou ~]# firewall-cmd --add-service=samba --timeout=600
  • 显示默认区域开启的服务,如果要查某区域,加参数--zone=XX
    [root@zcwyou ~]# firewall-cmd --list-services
  • 添加HTTP服务到内部区域(internal),并保存到配置文件
    [root@zcwyou ~]# firewall-cmd --permanent --zone=internal --add-service=http
  • 在不改变状态的条件下重新加载防火墙
    [root@zcwyou ~]# firewall-cmd --reload
  • 开放mysql服务
    [root@zcwyou ~]# firewall-cmd --add-service=mysql
  • 阻止mysql服务
    [root@zcwyou ~]# firewall-cmd --remove-service=mysql
  • 端口管理,临时打开443/TCP端口,立即生效
    [root@zcwyou ~]# firewall-cmd --add-port=443/tcp
  • 永久打开3690/TCP端口
    [root@zcwyou ~]# firewall-cmd --permanent --add-port=3690/tcp
  • 永久打开端口需要reload一下,如果用了reload临时打开的端口就失效了
    [root@zcwyou ~]# firewall-cmd --reload
  • 查看防火墙所有区域的设置,包括添加的端口和服务
    [root@zcwyou ~]# firewall-cmd --list-all
  • 开放通过tcp访问3306
    [root@zcwyou ~]# firewall-cmd --add-port=3306/tcp
  • 阻止tcp80
    [root@zcwyou ~]# firewall-cmd --remove-port=80/tcp
  • 开放通过udp访问233
    [root@zcwyou ~]# firewall-cmd --add-port=233/udp
  • 查看开放的端口
    [root@zcwyou ~]# firewall-cmd --list-ports
  • 开放自定义的ssh端口号为12222 (--permanent参数可以将永久保存到配置文件)
    [root@zcwyou ~]# firewall-cmd --add-port=12222/tcp --permanent
    重启防火墙。永久打开端口需要reload一下,如果用了reload临时打开的端口就失效了
    [root@zcwyou ~]# firewall-cmd --reload
  • 添加端口范围
    [root@zcwyou ~]# firewall-cmd --add-port=2000-4000/tcp
  • 针对指定zone XX添加端口
    [root@zcwyou ~]# firewall-cmd --permanent --zone=XX --add-port=443/tcp

管理区域中的对象

image.png
  • 获取永久支持的区域
    [root@zcwyou ~]# firewall-cmd --permanent --get-zones
  • 启用区域中的服务(此举将永久启用区域中的服务。如果未指定区域,将使用默认区域。)
    firewall-cmd --permanent [--zone=] --add-service=
  • 临时开放mysql服务,立即生效
    [root@zcwyou ~]# firewall-cmd --add-service=mysql
  • public区域,添加httpd服务,并保存,但不会立即生效,需要reload防火墙
    [root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-service=httpd
  • public区域,禁用httpd服务,并保存,但不会立即生效,需要reload防火墙
    [root@zcwyou ~]# firewall-cmd --permanent --zone=public --remove-service=httpd

端口转发

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口;
转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口;
典型的做法:

  1. NAT内网端口映射
  2. SSH隧道转发数据
    如果配置好端口转发之后不能用,可以检查下面两个问题:
    • 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了;
    • 其次检查是否允许伪装 IP,没允许的话要开启伪装 IP;
  • 将80端口的流量转发至8080
    [root@zcwyou ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
  • 将80端口的流量转发至192.168.0.1
    [root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1
  • 将80端口的流量转发至192.168.0.1的8080端口
    [root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080
  • 禁止区域的端口转发或者端口映射
    firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
  • 查询区域的端口转发或者端口映射
    firewall-cmd [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
  • 在区域中永久启用端口转发或映射
    firewall-cmd --permanent [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
    • 端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。
    • 端口号可以是一个单独的端口 或者是端口范围 。
      协议可以为 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
    [root@zcwyou ~]# firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

伪装 IP

  • 检查是否允许伪装IP
    [root@zcwyou ~]# firewall-cmd --query-masquerade
  • 允许防火墙伪装IP
    [root@zcwyou ~]# firewall-cmd --add-masquerade
  • 禁止防火墙伪装IP
    [root@zcwyou ~]# firewall-cmd --remove-masquerade
  • 永久启用区域中的伪装
    firewall-cmd --permanent [--zone=] --add-masquerade
    此举启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。
    这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4。
  • 临时禁用区域中的 IP 伪装
    firewall-cmd [--zone=] --remove-masquerade
  • 永久禁用区域中的伪装
    firewall-cmd --permanent [--zone=] --remove-masquerade
  • 查询区域中的伪装的永久状态
    firewall-cmd --permanent [--zone=] --query-masquerade
    如果服务启用,此命令将有返回值。此命令没有输出信息。
  • 查询区域的伪装状态
    firewall-cmd [--zone=] --query-masquerade
    如果启用,此命令将有返回值。没有输出信息。

ICMP控制

  • 获取永久选项所支持的ICMP类型列表
    [root@zcwyou ~]# firewall-cmd --permanent --get-icmptypes
  • 获取所有支持的ICMP类型
    [root@zcwyou ~]# firewall-cmd --get-icmptypes
  • 永久启用区域中的ICMP阻塞,需要reload防火墙,
    firewall-cmd --permanent [--zone=] --add-icmp-block=
    此举将启用选中的 Internet 控制报文协议 (ICMP) 报文进行阻塞。ICMP 报文可以是请求信息或者创建的应答报文或错误应答报文。
  • 永久禁用区域中的ICMP阻塞,需要reload防火墙,
    firewall-cmd --permanent [--zone=] --remove-icmp-block=
  • 查询区域中的ICMP永久状态
    firewall-cmd --permanent [--zone=] --query-icmp-block=
    如果服务启用,此命令将有返回值。此命令没有输出信息。
    阻塞公共区域中的响应应答报文:
    [root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply
  • 立即启用区域的 ICMP 阻塞功能
    firewall-cmd [--zone=] --add-icmp-block=
    此举将启用选中的 Internet 控制报文协议 (ICMP) 报文进行阻塞。 ICMP 报文可以是请求信息或者创建的应答报文,以及错误应答。
  • 立即禁止区域的 ICMP 阻塞功能
    firewall-cmd [--zone=] --remove-icmp-block=
  • 查询区域的 ICMP 阻塞功能
    firewall-cmd [--zone=] --query-icmp-block=
    如果启用,此命令将有返回值。没有输出信息。
    例: 阻塞区域的响应应答报文:
    [root@zcwyou ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply

通过配置文件来使用Firewalld的方法

系统本身已经内置了一些常用服务的防火墙规则,存放在/usr/lib/firewalld/services/
注意!!!!!请勿编辑/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被编辑。
以下例子均以系统自带的public zone 为例子:

  • 案例1: 如果想开放80端口供外网访问http服务,操作如下:
    1. 将 http.xml复制到/etc/firewalld/services/下面,以服务形式管理防火墙, 系统会优先去读取 /etc/firewalld 里面的文件,读取完毕后,会去/usr/lib/firewalld/services/ 再次读取。为了方便修改和管理,强烈建议复制到/etc/firewalld:
      [root@zcwyou ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/
    2. 修改/etc/firewalld/zones/public.xml,加入http服务:
      vi /etc/firewalld/zones/public.xml
      Public For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.
      #加入这行,要匹配 /etc/firewalld/services/文件夹下的文件名
      ```
      //以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:
      [root@zcwyou ~]# firewall-cmd --reload
      
      
      

或者以 root 身份输入以下信息,重新加载防火墙并中断用户连接,即丢弃状态信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火墙出现严重问题时,这个命令才会被使用。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接。

10.2 案例2: SSH为非默认端口,要求能正常访问

[root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
[root@zcwyou ~]# vi /etc/firewalld/services/ssh.xml
把默认22修改为目前的SSH端口号

[root@zcwyou ~]# firewall-cmd --reload

10.3 案例3:修改区域配置文件只允许特定主机192.168.23.1连接SSH

[root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
[root@zcwyou ~]# vi /etc/firewalld/zones/public.xml

确保配置文件有以下内容

配置结束

重启防火墙后生效
[root@zcwyou ~]# firewall-cmd --reload


firewalld直接模式

  • 对于最高级的使用,或 iptables 专家,FirewallD 提供了一个Direct接口,允许你给它传递原始 iptables 命令,直接接口规则不是持久的,除非使用 --permanent;直接选项主要用于使服务和应用程序能够增加规则。 规则不会被保存,在重新加载或者重启之后必须再次提交。传递的参数 与 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 }
    以iptables的命令允许端口号,重启生效
    [root@zcwyou ~]# firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
    [root@zcwyou ~]# firewall-cmd --reload

添加富规则

  • 允许192.168.122.0/24主机所有连接。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'
  • 每分钟允许2个新连接访问ftp服务。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
  • 同意新的 IP v4 和 IP v6 连接 FT P ,并使用审核每分钟登录一次。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept'
  • 允许来自192.168.122.0/24地址的新 IPv4连接连接TFTP服务,并且每分钟记录一次。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
  • 丢弃所有icmp包
    [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
  • 当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10
  • 拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志。
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300
  • 允许192.168.122.0/24网段中的主机访问ftp服务
    [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept'
  • 转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
    [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'
  • 允许来自主机 192.168.0.14 的所有 IPv4 流量。
    [root@zcwyou ~]# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
  • 拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。
    [root@zcwyou ~]# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
  • 查看富规则
    [root@zcwyou ~]# firewall-cmd --list-rich-rules

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容