参考文章:https://linux.cn/article-8098-1.html

     https://linux.cn/article-9073-1.html   #多区域使用示例,重点参考

前言

防火墙基于源 IP、目标端口和协议来过滤入站包。因为这种方式中,仅有几个 IP/端口/协议的组合与系统交互,而其它的方式做不到过滤。

iptables 将包通过一系列的规则进行检查,如果包与特定的 IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是被通过、拒绝或丢弃。

firewalld和iptables service 之间最本质的不同是:

1、FirewallD 使用区域和服务而不是链式规则。
2、它动态管理规则集,允许更新规则而不破坏现有会话和连接。

  1. iptables /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在
  2. /usr/lib/firewalld/(不建议修改,后续升级会覆盖该区域) /etc/firewalld/ (这些文件将会覆盖默认配置)中的各种XML文件里.
  3.  
  4. iptables每一个单独更改意味着清除所有旧有的规则并/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规
  5. 则;仅仅运行规则中的不同之处。
  1. 因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。

一、firewalld的设计流程

firewalld 可以通过定义的源 IP 和/或网络接口将入站流量分类到不同区域(zone)。每个区域基于指定的准则按自己配置去通过或拒绝包。

注释:firewalld 通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用 samba 而不是使用 UDP 端口 137 和 138 和 TCP 端口 139 和 445。它进一步简化语法,消除了 iptables 中对语句顺序的依赖。

二、处理优先级

我们知道每个zone就是一套规则集,但是有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:

1、source,也就是源地址 优先级最高

2、interface,接收请求的网卡 优先级第二

3、firewalld.conf中配置的默认zone 优先级最低

这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是学生在前面给大家讲过的在firewalld.conf中配置的默认zone。

三、结构介绍

  1、区域

在 firewalld 中最上层的组织是区域。如果一个包匹配区域相关联的网络接口或源 IP/掩码 ,它就是区域的一部分。可用的几个预定义区域:

  1. [root@firewall ~]# firewall-cmd --get-zones
  2. block dmz drop external home internal public trusted work
    注释:默认是这九个区域

任何配置了一个网络接口和/或一个源的区域就是一个活动区域active zone

  firewall-cmd --get-default-zone  找到默认区域

  firewall-cmd --set-default-zone=internal   修改默认区域(修改默认区域为internal)

  firewall-cmd --list-all-zones   列出所有区域配置

列出活动的区域:

  1. [root@firewall ~]# firewall-cmd --get-active-zones
  2. public
  3. interfaces: ens33 ens34

注释:

Interfaces (接口)是系统中的硬件和虚拟的网络适配器的名字,所有的活动的接口都将被分配到区域,要么是默认的区域,要么是用户指定的一个区域。但是,一个接口不能被分配给多于一个的区域。

在缺省配置中,firewalld 设置所有接口为 public 区域,并且不对任何区域设置源。其结果是,public 区域是唯一的活动区域。

Sources (源)是入站 IP 地址的范围,它也可以被分配到区域。一个源(或重叠的源)不能被分配到多个区域。这样做的结果是产生一个未定义的行为,因为不清楚应该将哪些规则应用于该源。

因为指定一个源不是必需的,任何包都可以通过接口匹配而归属于一个区域,而不需要通过源匹配来归属一个区域。这表示通过使用优先级方式,优先到达多个指定的源区域,稍后将详细说明这种情况

  2、查看一个区域的配置信息

  1. [root@firewall ~]# firewall-cmd --zone=public --list-all
  2. public (active) 活动的区域
  3. target: default 默认启动的区域
  4. icmp-block-inversion: no
  5. interfaces: ens33 ens34 列出这个区域上关联的接口
  6. sources: 列出这个区域的源。现在这里什么都没有,如果这里有内容,它们应该是这样的格式 xxx.xxx.xxx.xxx/xx
  7. services: ssh dhcpv6-client 列出允许通过这个防火墙的服务。你可以通过运行 firewall-cmd --get-services 得到一个防火墙预定义服务的详细列表。
  8. ports: /tcp /tcp /tcp 列出允许通过这个防火墙的目标端口。(即 需要对外开放的端口)
  9. protocols: 协议值可以是一个协议 ID 数字,或者一个协议名
  10. masquerade: no 表示这个区域是否允许 IP 伪装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器。
  11. forward-ports: 列出转发的端口
  12. source-ports:
  13. icmp-blocks: 阻塞的 icmp 流量的黑名单。
  14. rich rules: 在一个区域中优先处理的高级配置。

四、常用命令

  1. 启动服务 systemctl start firewalld
  2. 开机自启 systemctl enable firewalld
  3.  
  4. 停止服务 systemctl stop firewalld
  5. 禁用服务 systemctl disable firewalld
  6.  
  7. 查看状态:systemctl status firewalld 或者 firewall-cmd --state
  8.  
  9. 查看活动的区域信息 firewall-cmd --get-active-zones
  10. 查看指定接口所属区域 firewall-cmd --get-zone-of-interface=eth0
  11.  
  12. 拒绝所有包:# firewall-cmd --panic-on
  13. 取消拒绝状态:# firewall-cmd --panic-off
  14. 查看是否拒绝:$ firewall-cmd --query-panic
  15.  
  16. 更新防火墙规则:# firewall-cmd --reload
  17.  
  18. 将接口添加到区域,默认接口都在public
  19. # firewall-cmd --zone=public --add-interface=eth0
  20. 永久生效再加上 --permanent 然后reload防火墙
  21.  
  22. 设置默认接口区域
  23. # firewall-cmd --set-default-zone=public
  24. 立即生效无需重启
  25.  
  26. 打开端口(貌似这个才最常用)
  27. 查看所有打开的端口:
  28. # firewall-cmd --zone=dmz --list-ports
  29. 允许12345端口的TCP流量
  30. firewall-cmd --zone=public --add-port=12345/tcp --permanent

四、常规配置示例

FirewallD 有两个配置集:“运行时”和“持久”。
运行时:在系统重新启动或重新启动 FirewallD时,不会保留运行时的配置更改;
持久: 持久配置集的更改不会应用于正在运行的系统。(重新加载配置可以生效)

默认情况下,firewall--cmd 命令适用于运行时配置,但使用 --permanent 标志将保存到持久配置中

  1. firewall-cmd --zone=public --add-service=ssh --timeout=5m

说明:该命令的有效期为5分钟(s 秒  m分  h时)

  1、启动或禁止http服务

  1. [root@text01 ~]# firewall-cmd --zone=public --add-service=http --permanent
  2. success
  3. [root@text01 ~]# firewall-cmd --zone=public --remove-service=http --permanent
  4. success

2、只允许指定IP地址访问ssh(端口修改成了20000)

  1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="116.255.126.42/" port protocol="tcp" port="" accept
  2.  
  3. firewall-cmd --permanent --remove-service=ssh
  4. firewall-cmd --reload

1、禁止ping主机

  1. firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'

2、允许或禁用12345端口的TCP流量

  1. firewall-cmd --zone=public --add-port=/tcp --permanent
  2. firewall-cmd --zone=public --remove-port=/tcp --permanent

  3、端口转发

  在用一台服务上将80端口的流量转发到12345端口上

  1. [root@text01 ~]# firewall-cmd --zone="public" --add-forward-port=port=:proto=tcp:toport=
  2. success

  将端口转发到另外一台服务器上:

    在需要的区域激活masquerade

  1. firewall-cmd --zone=public --add-masquerade

    将本地的80端口的流量转发到IP地址为:10.0.0.90的远程服务器上的8080端口上

  1. firewall-cmd --zone="public" --add-forward-port=port=:proto=tcp:toport=:toaddr=10.0.0.90

    4、删除规则,用--remove替换--add

  1. firewall-cmd --zone=public --remove-masquerade

五、高级配置示例

服务和端口适用于基本配置,但对于高级情景可能会限制较多。 丰富Rich规则和直接Direct接口允许你为任何端口、协议、地址和操作向任何区域 添加完全自定义的防火墙规则。

可以使用 nam firewalld.richlanguage

使用 --add-rich-rule--list-rich-rules 、 --remove-rich-rule 和 firewall-cmd 命令来管理它们。

常见例子:

  1、允许来自主机 192.168.0.14 的所有 IPv4 流量

  1. firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

  2、拒绝来自主机 192.168.1.14 到 22 端口的 IPv4 的 TCP 流量。

  1. firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.14" port port=22 protocol=tcp reject'

  3、允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。

  1. firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

   4、将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。

  1. firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

   5、列出你目前的丰富规则:

  1. firewall-cmd --list-rich-rules

6、指定一个固定IP访问指定端口

  1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="16.25.12.2" port protocol="tcp" port="" accept"

六、iptables的直接接口

FirewallD 提供了一个直接Direct接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 --permanent

要查看添加到 FirewallD 的所有自定义链或规则:

  1. firewall-cmd --direct --get-all-chains
  2. firewall-cmd --direct --get-all-rules

七、开放一定范围的端口

  1. Firewall开启常见端口命令:
  2. firewall-cmd --zone=public --add-port=/tcp --permanent
  3.  
  4. Firewall关闭常见端口命令:
  5. firewall-cmd --zone=public --remove-port=/tcp --permanent
  6.  
  7. 批量添加区间端口
  8. firewall-cmd --zone=public --add-port=-/udp --permanent
  9.  
  10. 重启防火墙命令:
  11. firewall-cmd --reload 或者 service firewalld restart
  12.  
  13. 查看端口列表:
  14. firewall-cmd --permanent --list-port
  15.  
  16. 对指定IP地址开放一定范围的端口
  1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="16.25.12.2" port protocol="tcp" port="10000-20000" accept"

firewalld防火墙简单理解总结(一)的更多相关文章

  1. CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用

    PermitRootLogin nosystemctl restart sshd.service; yum -y install firewalld; systemctl start firewall ...

  2. CentOS7、REHL7的firewalld防火墙使用简单说明

    title: CentOS7.REHL7的firewalld防火墙使用简单说明 categories: Linux tags: - Linux timezone: Asia/Shanghai date ...

  3. 第8章 Iptables与Firewalld防火墙

    章节简述: 红帽RHEL7系统已经用firewalld服务替代了iptables服务,新的防火墙管理命令firewall-cmd与图形化工具firewall-config. 本章节基于数十个防火墙需求 ...

  4. 第7章 Iptables与Firewalld防火墙。

    第7章 Iptables与Firewalld防火墙.     Chapter7_听较强节奏的音乐能够让您更长时间的投入在学习中. <Linux就该这么学> 00:00/00:00     ...

  5. 9.Iptables与Firewalld防火墙

    第9章 Iptables与Firewalld防火墙 章节简述: 保障数据的安全性是继保障数据的可用性之后最为重要的一项工作.防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用 ...

  6. Linux firewalld 防火墙

    Linux firewalld 防火墙  简介 RHEL 7 系统中集成了多款防火墙管理工具,其中 firewalld(Dynamic Firewall Manager of Linux system ...

  7. Ubuntu防火墙简单设置

    http://wiki.ubuntu.org.cn/UFW防火墙简单设置 http://wiki.ubuntu.org.cn/Ufw使用指南 Ubuntu默认安装内置ufw防火墙,简单使用如下: su ...

  8. 24.Firewalld防火墙

    1.Firewalld防火墙的概述 RHEL/CentOS 7系统中集成了多款防火墙管理工具,其中firewalld是默认的防火墙配置管理工具它拥有基于CLI(命令行界面)和基于GUI(图形用户界面) ...

  9. CentOS7 firewalld防火墙规则

    在CentOS7里有几种防火墙共存:firewalld.iptables.ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等. f ...

随机推荐

  1. 使用update_attribute和validation

    在使用update_attribute方法时,不走validation 走validation的方法: create create! save save! update update_attribut ...

  2. 消息管理-activemq

    1.ConnectionFactory("tcp://192.168.1.103:61616/"); 本机地址192.168.1.103 也 可以是localhost 消息的生产者 ...

  3. 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Latin1_General_100_CI_AS" 之间的排序规则冲突。

    问题 操作临时表时提示如下排序规则冲突错误 sql ....忽略...sql ..... 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 " ...

  4. php-fpm.conf 重要参数 max_children 和 request_terminate_timeout

    php-fpm.conf 重要参数 max_children 和 request_terminate_timeout php-fpm.conf有两个至关重要的参数:一个是”max_children”, ...

  5. data whitening

    http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

  6. 深入理解MyBatis的原理(三):配置文件用法(续)

    前言:前文讲解了 MyBatis 的配置文件一部分用法,本文将继续讲解 MyBatis 的配置文件的用法. 目录 1.typeHandler 类型处理器 2.ObjectFactory 3.插件 4. ...

  7. 使用EXCEL 完成分组统计

    表testTable 有以下数据,要统计各个电视剧的数量.在开发人员看来,使用sql操作完成select name,count(*) from TestTable where 1=1 group by ...

  8. 【PyQt5 学习记录】011:使用 QListWidet 创建列表

    使用 QListWidet 创建列表 作者: 八月未见 博客: https://www.cnblogs.com/jmtm/ 创建列表: list_widget = QListWidget() 插入项目 ...

  9. LeetCode 544----Output Contest Matches

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  10. CentOS7系列--1.1CentOS7安装

    CentOS7安装 1. 下载CentOS7 下载的网址为: http://isoredirect.centos.org/centos/7/isos/x86_64/ 2. CentOS7安装 2.1. ...