Firewalld概述

  • 动态防火墙管理工具

  • 定义区域与接口安全等级

  • 运行时和永久配置项分离

  • 两层结构

    • 核心层 处理配置和后端,如iptables、ip6tables、ebtables、ipset和模块加载器

    • 顶层D-Bus 更改和创建防火墙配置的主要方式。所有firewalld都使用该接口提供在线工具

原理图



Firewalld与iptables对比

  • firewalld 是 iptables 的前端控制器
  • iptables 静态防火墙 任一策略变更需要reload所有策略,丢失现有链接
  • firewalld 动态防火墙 任一策略变更不需要reload所有策略 将变更部分保存到iptables,不丢失现有链接
  • firewalld 提供一个daemon和service 底层使用iptables
  • 基于内核的Netfilter

配置方式

  • firewall-config 图形界面
  • firewall-cmd 命令行工具
  • 直接修改配置文件

    /lib/firewalld 用于默认和备用配置

    /etc/firewalld 用于用户创建和自定义配置文件 覆盖默认配置

    /etc/firewalld/firewall.conf 全局配置

运行时配置和永久配置

firewall-cmd –zone=public –add-service=smtp 运行时配置,重启后失效
firewall-cmd –permanent –zone=public –add-service=smtp 永久配置,不影响当前连接,重启后生效
firewall-cmd –runtime-to-permanent 将运行时配置保存为永久配置

Zone

网络连接的可信等级,一对多,一个区域对应多个连接

  • drop.xml 拒绝所有的连接
  • block.xml 拒绝所有的连接
  • public.xml 只允许指定的连接 *默认区域
  • external.xml 只允许指定的连接
  • dmz.xml 只允许指定的连接
  • work.xml 只允许指定的连接
  • home.xml 只允许指定的连接
  • internal.xml 只允许指定的连接
  • trusted.xml 允许所有的连接

    /lib/firewalld/zones 默认和备用区域配置

    /etc/firewalld/zones 用户创建和自定义区域配置文件 覆盖默认配置
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm yo
ur computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
</zone>
version="string" 版本
target="ACCEPT|%%REJECT%%|DROP" 默认REJECT 策略
short 名称
description 描述
interface 接口
name="string"
source 源地址
address="address[/mask]"
mac="MAC"
ipset="ipset"
service 服务
name="string"
port 端口
port="portid[-portid]"
protocol="tcp|udp"
protocol 协议
value="string"
icmp-block
name="string"
icmp-block-inversion
masquerade
forward-port
port="portid[-portid]"
protocol="tcp|udp"
to-port="portid[-portid]"
to-addr="address"
source-port
port="portid[-portid]"
protocol="tcp|udp"
rule
<rule [family="ipv4|ipv6"]>
[ <source address="address[/mask]" [invert="True"]/> ]
[ <destination address="address[/mask]" [invert="True"]/> ]
[
<service name="string"/> |
<port port="portid[-portid]" protocol="tcp|udp"/> |
<protocol value="protocol"/> |
<icmp-block name="icmptype"/> |
<masquerade/> |
<forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="address"]/> |
<source-port port="portid[-portid]" protocol="tcp|udp"/> |
]
[ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ]
[ <audit> [<limit value="rate/duration"/>] </audit> ]
[
<accept> [<limit value="rate/duration"/>] </accept> |
<reject [type="rejecttype"]> [<limit value="rate/duration"/>] </reject> |
<drop> [<limit value="rate/duration"/>] </drop> |
<mark set="mark[/mask]"> [<limit value="rate/duration"/>] </mark>
]
</rule> rich rule
<rule [family="ipv4|ipv6"]>
<source address="address[/mask]" [invert="True"]/>
[ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ]
[ <audit> [<limit value="rate/duration"/>] </audit> ]
<accept> [<limit value="rate/duration"/>] </accept> |
<reject [type="rejecttype"]> [<limit value="rate/duration"/>] </reject> |
<drop> [<limit value="rate/duration"/>] </drop>
</rule>

services

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MySQL</short>
<description>MySQL Database Server</description>
<port protocol="tcp" port="3306"/>
</service>
version="string"
short
description
port
port="string"
protocol="string"
protocol
value="string"
source-port
port="string"
protocol="string"
module
name="string"
destination
ipv4="address[/mask]"
ipv6="address[/mask]"

ipset配置

系统默认没有ipset配置文件,需要手动创建ipset配置文件

mkdir -p /etc/firewalld/ipsets/mytest.xml mytest就是ipset名称

根据官方手册提供的配置模板

<?xml version="1.0" encoding="utf-8"?>
<ipset type="hash:net">
<short>white-list</short>
<entry>192.168.1.1</entry>
<entry>192.168.1.2</entry>
<entry>192.168.1.3</entry>
</ipset>

entry也就是需要加入的IP地址

firewall-cmd --get-ipsets 显示当前的ipset

firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset="mytest" port port=80 protocol=tcp accept' 将ipset应用到策略中

服务管理

yum -y install firewalld firewall-config #安装firewalld
systemctl enable|disable firewalld #开机启动
systemctl start|stop|restart firewalld #启动、停止、重启firewalld

如果想使用iptables配置防火墙规则,要先安装iptables并禁用firewalld

yum -y install iptables-services #安装iptables
systemctl enable iptables #开机启动
systemctl start|stop|restart iptables #启动、停止、重启iptables

firewall-cmd常用命令

firewall-cmd --version 查看firewalld版本
firewall-cmd --help 查看firewall-cmd用法
man firewall-cmd
firewall-cmd --state #查看firewalld的状态
systemctl status firewalld #查看firewalld的状态,详细
firewall-cmd --reload 重新载入防火墙配置,当前连接不中断
firewall-cmd --complete-reload 重新载入防火墙配置,当前连接中断
firewall-cmd --get-services 列出所有预设服务
firewall-cmd --list-services 列出当前服务
firewall-cmd --permanent --zone=public --add-service=smtp 启用服务
firewall-cmd --permanent --zone=public --remove-service=smtp 禁用服务
firewall-cmd --zone=public --list-ports
firewall-cmd --permanent --zone=public --add-port=8080/tcp 启用端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp 禁用端口
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345 同服务器端口转发 80端口转发到12345端口
firewall-cmd --zone=public --add-masquerade 不同服务器端口转发,要先开启 masquerade
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1 不同服务器端口转发,转发到192.168.1.1的8080端口
firewall-cmd --get-zones 查看所有可用区域
firewall-cmd --get-active-zones 查看当前活动的区域,并附带一个目前分配给它们的接口列表
firewall-cmd --list-all-zones 列出所有区域的所有配置
firewall-cmd --zone=work --list-all 列出指定域的所有配置
firewall-cmd --get-default-zone 查看默认区域
firewall-cmd --set-default-zone=public 设定默认区域
firewall-cmd --get-zone-of-interface=eno222
firewall-cmd [--zone=<zone>] --add-interface=<interface> 添加网络接口
firewall-cmd [--zone=<zone>] --change-interface=<interface> 修改网络接口
firewall-cmd [--zone=<zone>] --remove-interface=<interface> 删除网络接口
firewall-cmd [--zone=<zone>] --query-interface=<interface> 查询网络接口
firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24 设置网络地址到指定的区域
firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24 删除指定区域中的网路地址
firewall-cmd --get-icmptypes

Rich Rules

firewall-cmd –list-rich-rules 列出所有规则

firewall-cmd [–zone=zone] –query-rich-rule=’rule’ 检查一项规则是否存在

firewall-cmd [–zone=zone] –remove-rich-rule=’rule’ 移除一项规则

firewall-cmd [–zone=zone] –add -rich-rule=’rule’ 新增一项规则

复杂规则配置案例

firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept' 允许来自主机 192.168.0.14 的所有 IPv4 流量

firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' 拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量

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' 许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上

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' 将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept' 允许192.168.122.0/24主机所有连接

firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' 每分钟允许2个新连接访问ftp服务

firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept' 同意新的IPv4和IPv6连接FTP ,并使用审核每分钟登录一次

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' 允许来自1192.168.122.0/24地址的新IPv4连接连接TFTP服务,并且每分钟记录一次

firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' 丢弃所有icmp包

firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10 当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除

firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300 拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept' 允许192.168.122.0/24网段中的主机访问ftp服务

firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"' 转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012

Linux Firewalld用法及案例的更多相关文章

  1. linux curl用法详解

    linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...

  2. [转载]expect spawn、linux expect 用法小记

    原文地址:expect spawn.linux expect 用法小记作者:悟世 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写 ...

  3. Linux firewalld 防火墙

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

  4. [转帖]linux lsof 用法简介

    linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...

  5. [转帖]Linux firewalld 防火墙使用

    Linux firewalld 防火墙使用 2018-06-19 19:26:08 蚩尤后裔 阅读数 2101  收藏 更多 分类专栏: Linux   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  6. [文章]Linux宕机故障分析案例

    [文章]Linux宕机故障分析案例 已采纳 收藏  0  1669 0 马化辉 2018-07-01发布 背景 在Linux系统环境下,服务器宕机发生的频率比较小,但是不少工程师或多或少都会遇到这 ...

  7. Bash 脚本进阶,经典用法及其案例

    前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神.虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加 ...

  8. 100个Linux Shell脚本经典案例(附PDF)

    转载自:https://mp.weixin.qq.com/s/tCKAM67_7K7q2vJthaIsDQ 原文链接:https://wenku.baidu.com/view/4f089430a116 ...

  9. Linux服务器宕机案例一则

    案例环境 操作系统 :Oracle Linux Server release 5.7 64bit 虚拟机 硬件配置 : 物理机型号为DELL R720 资源配置 :RAM 8G Intel(R) Xe ...

随机推荐

  1. 基于 HTML5 WebGL 构建 3D 智能数字化城市全景

    前言 自 2011 年我国城镇化率首次突破 50% 以来,<新型城镇化发展规划>将智慧城市列为我国城市发展的三大目标之一,并提出到 2020 年,建成一批特色鲜明的智慧城市.截至现今,全国 ...

  2. arima.predict()参数选择以及相关的一些问题

    在使用a ri ma进行模型建立时,需要注意以下几点 1.参数选择上predict必须起始时间在原始的数据及当中的,在下例中就是说2017必须在数据集里面,而2019不受限制,只哟在2017后面就好了 ...

  3. ORM基础4 跨表查询+原子性操作

    一.跨表查询 1.# # 正向查找 对象查找 # book_obj = models.Book.objects.get(id=3) # print(book_obj) # ret = book_obj ...

  4. Qt Installer Framework翻译(1)

    IFW概览 Qt Installer Framework 提供了一组工具和程序来创建安装程序,并在不重写源代码的情况下将它们部署到所有受支持的桌面 Qt 平台上.安装程序具有本地化外观,并且可以感知运 ...

  5. .net core webapi搭建(2)跨域

    Core WebAPI中的跨域处理 在使用WebAPI项目的时候基本上都会用到跨域处理 Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 如图所示 修改 Configure ...

  6. 学习 lind layerdiagram 第三弹

  7. 聊一聊 MySQL 数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...

  8. Vue 常用三种传值方式

    Vue常用的三种传值方式: 父传子 子传父 非父子传值 引用官网一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消 ...

  9. 最新2.7版本丨DataPipeline数据融合产品最新版本发布

    此次发布的2.7版本在进一步优化产品底层数据处理逻辑的同时更加注重提升用户在数据融合任务的日常管理.运行监控及资源分配等管理方面的功能增强与优化,力求帮助大家更为直观.便捷.稳定地管理数据融合任务,提 ...

  10. Linux系统之LAMP实现

    1.部署分离的LAMP,部署到二台服务器上,php加载xcache模块 首先准备LAMP环境,准备两台Linux主机,一台是192.168.0.10 ,这台上面主要跑apache httpd ,mar ...