Firewalld防火墙

firewalld 的作用是为包过滤机制提供匹配规则(或称为策略),通过各种不同的规则,告诉 netfilter对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式,并且拥有两种配置模式:运行时配置与永久配置

  • 内核态:netfilter
  • 用户态:iptables、firewalld
    • firewalld 白身并不具备防火墙的功能,而是和 iptables 一样需要通过内核的 netfilter 来实现。也就是说 firewalld 和 iptables 一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的 netfilter,只不过 firewalld 和iptabes 的结构以及使用方法不一样
    • 系统提供了图形化的配置工具 firewall-config、system-config-firewal,提供命令行客户端 firewall-cmd,用于配置 firewalld 永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信

  • firewalld与iptables service 的区别
    • iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld 将配置储存在/usr/lib/firewalld! 和 /etc/firewalld! 中的各种 XML 文件里
    • 使用iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables 里读取所有新的规则,然而使用 firewald 却不会再创建任何新的规则

一、Firewalld网络区域

  • firewalld 将所有的网络数据流量划分为多个区域,从而简化防火墙管理,根据数据包的源 IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则,对于进入系统的数据包,首先检查的就是其源地址
    • 若源地址关联到特定的区域,则执行该区域所制定的规则
    • 若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则
    • 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则
  • 默认区域不是单独的区域,而是指向系统上定义的某个其他区域,默认区域是 public,但是系统管理员可以更改默认区域

区域

说明

trusted(信任区域)

可接收所有的网络连接

public(公共区域)

除非与传出流量相关,或与ssh 或 dhcpv6-client 预定义服务匹配,否则拒绝流量传入,在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。并且,该区域是新添加网络接口的默认区域

work(工作区域)

除非与传出流量相关,或与 ssh、ipp-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于工作区。相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接

home(家庭区域)

除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于家庭网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

internal(内部区域)

除非与传出流量相关,或与ssh、ipp-client、mdns、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于内部网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

external(外部区域)

除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入。通过此区域转发的IPv4 传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络

dmz(隔离区域也称为非军事区域)

除非与传出的流量相关,或与ssh预定义服务匹配,否则拒绝流量传入

block(限制区域)

除非与传出流量相关,否则拒绝所有传入流量

drop(丢弃区域)

除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含ICMP(InternetControl Message Protocol,互联网控制报文协议)的错误响应

二、Firewalld防火墙的配置方法

  • 在 CentOS7 系统中,可以使用三种方式配置 firewalld 防火墙:
    • firewall-config 图形工具
      • 运行时:添加的策略立即生效,不用重载或重启防火墙,策略临时存在
      • 永久时:策略需要重载或重启后才能生效,策略永久存在
    • firewall-cmd 命令行工具
    • /etc/firewalld/中的配置文件

1:firewall-config 图形工具(区域)

firewall-config 图形化配置工具支持防火墙所有的特性,系统管理员可以通过它来改变系统或用户策略,可以实现配置防火墙允许通过的服务、端口、伪装、端口转发、ICMP 过滤器等功能,在 CentOS7 系统中单击“应用程序”中的“杂项”,选择“防火墙"即可

  • “区域”选项卡是一个主要设置的界面。“区域”选项卡下面还包含服务、端口、协议、源端口、伪装等一系列子选项卡

  • firewall-config 工作界面主要分为三个部分,上面是主菜单,中间是配置选项,下面是区域、服务、IPsets、ICMP 类型、直接配置、锁定白名单设置选项卡
  • 其中,ICMP 类型直接配置和锁定白名单选项卡只在从“査看"下拉菜单中选择之后才能看见
  • 最底部是状态栏从左到右显示了四个信息,依次是连接状态、默认区域、锁定状态、应急模式
    • firewall-config 主菜单包括四个菜单项:文件、选项、查看、帮助。其中,“选项”菜单是最重要的
      • 重新加载防火墙:重新加载防火墙规则,当前的永久配置将变成新的运行时配置。例如,所有的当前运行的配置规则如果没有在永久配置中操作,系统重新加载后就会丢失。更改连接区域:更改网络连接的所属区域和接口
      • 改变默认区域:更改网络连接的默认区域
      • 应急模式:表示丢弃所有的数据包
      • 锁定:可以对防火墙的配置进行加锁,只允许白名单上的应用程序进行修改
(1):“服务”子选项卡

“服务”子选项卡可以定义区域中哪些服务是可信的,可信的服务可以被绑定到该区域的任意连接、接口和源地址访问

(2):“端口”子选项卡

用于设置允许访问的主机或网络访问的端口范围

(3):“协议”子选项卡

用于添加所有主机或网络均可访问的协议

(4):“源端口"子选项卡

添加额外的源端口或范围,连接到这台主机的所有主机或网络均可访问,设置源端口时,可以设置某一个端口号或者是端口范围,同时还需要选择对应的 TCP 或 UDP 协议

(5):“伪装"子选项卡

用于把私有网络地址映射到公有的IP地址,该功能目前只适用于IPv4

(6):“端口转发"子选项卡

将指定端口映射到另一个端口或其他主机的指定端口,在设置端口转发时同样需要选择协议类型,且该功能也仅支持IPv4

(7):“ICMP"子选项卡

ICMP 主要用于在联网的计算机间发送出错信息,但也发送类似 ping 请求以及回应等信息。在“ICMP 过滤器”子选项卡中可以选择应该被拒绝的ICMP 类型,其他所有的ICMP 类型则被允许通过防火墙;默认设置是没有限制

2:firewall-config 图形工具(服务)

服务是端口、协议、模块和目标地址的组合,并且“服务"选项卡只能在“永久”配置视图中修改,“运行时”配置中的服务是不可以修改的,与“区域”选项卡不同,“服务”选项卡仅包含五个子选项卡。其中,“端口”“协议"“源端口”这些子选项卡的作用及配置方法与“区域”选项卡中的相同

(1):“模块”子选项卡

用于网络过滤的辅助模块

(2):“目标地址”子选项卡

如果某服务指定了目标地址,服务项目仅限于目标地址和类型如果 IPv4 与 IPv6 均为空,则没有限制

3:修改默认分区

要设定一个将要被分配新接口的分区作为默认值,则启动firewall-config,从菜单栏选择选项卡,由下拉菜单中选择修改默认区域

Firewalld防火墙(二)

一、Firewalld中理解直接规则

将 iptables 的规则插入到 firewalld 的管理区域中,这种方式写的规则叫直接规则

//举例:
//首先自定义一个叫 blacklist 的链,然后将所有来自 192.168.10.0/24 的数据包都指向了这个链,最后定义了这个链的规则:
首先进行记录,然后drop,记录的方法是使用“blacklisted:"前缀并且限制 1分钟记录一次

(1)创建一个黑名单,并为这个黑名单创建一个链,链名为 blacklist
[root@localhost ~]# firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
(2)将来自 192.168.10.0/24 的数据包指向这个链
[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist
(3)每分钟记录一次日志(-m limit --limit 1/min 每分钟记录一次日志)
[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -jLoG --log-prefix "blacklisted"
(4)设置这个链的规则为 DROP
[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
(5)重启 firewalld(重启或重载后生效)
[root@localhost ~]# systemctl restart firewalld
(6)查看直接规则
[root@localhost ~]# cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
    <chain table="raw" ipv="ipv4" chain="blacklist"/>
    <rule priority="0" table="raw" ipv="ipv4"chain="PREROUTING">-S 192.168.10.0/24 -j
blacklist</rule>
    <rule priority="1" table="raw" ipv="ipv4" chain="blacklist">-j DROP</rule>
</direct>

备注:用其他主机 ping 它,然后査看 messages 日志文件,会看到相关的日志条目
      清空直接规则:/etc/firewalld/direct.xml
  • Ipv4:这个属性非常简单,表示ip 的版本
  • table:chain 和 rule 节点中的 table 属性就是 iptables/ip6tables 中的 table
  • chain:chain 中的 chain 属性用于指定一个自定义链的名字,注意,不可与己有链重名;rule 中的 chain 属性既可以是内建的(也就是 iptables/ip6tables 中的五条链),也可以是在 direct中自定义的 chain
  • priority:优先级,用于设置不同rule 的优先级,就像iptables 中规则的前后顺序,数字越小优先级越高
  • args: rule 和 passthrough 中的 args 就是 iptables/ip6tables 中的一条具体的规则,不过他们可以使用我们自定义的 chain

二、使用富语言

不需要使用 iptables 语法,而是使用高级语言配置防火墙规则的机制成为富语言

//举例:
(1)为认证报头协议 AH 使用新的 IPv4 和 IPv6 连接
[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value=ah accept'
(2)允许新的IPv4和IPv6 连接 http,并使用审核每分钟记录一次
[root@locahost ~l# firewall-cmd --add-rich-rule='rule service name=http log prefix=httpaccess limit value=1/m audit accept'
//开启日志记录后:[root@localhost ~]# cat /var/log/messages

(3)允许来自 192.168.0.0/24 地址的 TFTP 协议的IPv4 连接,并且使用系统日志每分钟记录一次
[root@locahost ~]# firewall-cmd --add-rich='rule family="ipv4" source address="192.168.0.0/24'service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'
(4)为 RADIUS 协议拒绝所有来自 1:2:3:4:6::的新的IPv6 连接,日志前缀为“dns”,级别为info,并每分钟最多记录3次。接受来自其他发起段新的IPv6 连接
[root@locahost ~]# firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:6::service name="raduis" log prefix="dns" level="info" limit value="3/m" reject'
(5)将源 192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接
[]oot@localhost~]#firewall-cmd    --add-rich-rule='rule    family="ipv4"    sourceaddress="192.168.2.2" accept'
(6)拒绝(删除)来自 public 区域中 IP 地址为 192.168.0.11 的所有流量
root@localhost ~# firewall-cmd --zone=public    --add-rich-rule='rule     family=ipv4     sourceaddress=192.168.10.202/32 reject'
root@localhost ~# firewall-cmd --zone=public     --remove-rich-rule='rule     family=ipv4     sourceaddress=192.168.10.202/32 reject'
(7)丢弃来自默认区域中任何位置的所有传入的ipsecesp 协议包
[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value="esp" drop'
(8)在 192.168.1.0/24 子网的 dmz 区域中,接收端口 7900--1905 的所有 TCP 包
[root@localhost ~]#firewall-cmd --zone=dmz -add-rich-rule='rule  family=ipv4  sourceaddress=192.168.1.0/24  port  port=7900-1905  protocol=tcp accept'
(9)接受从 work 区域到 ssh 的新连接,以 notice 级别且每分钟最多三条信息的方式将新连接记录到 syslog
[root@localhost ~# firewall-cmd --zone=work  --add-rich-rule='rule  service  name=ssh  logprefix="ssh"  level="notice"  limit value="3/m" accept'
(10)在接下来的 5min 内,拒绝从默认区域中的子网 192.168.2.0/24 到 DNS 的新连接,并且拒绝的连接将记录到 audit 系统,且每小时最多一条消息
[root@localhost ~]# firewall-cmd --add-rich-rule='rule family=ipv4 sourceaddress=192.168.2.0/24 service name=dns audit limit value="1/h" reject' --timeout=300

 

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值