firewall-cmd 使用总结

2023-05-16

firewalld的简要说明:
    firewalld 、firewall-cmd 、firewall-offline-cmd它们Python脚本,通过定义的在/usr/lib/firewalld下面的xml配置信息,
  在启动时自动载入默认iptables配置,并应用到系统中,当使用firewalld-cmd添加防火墙规则时,它实际是转换成
  iptables规则后,在应用到系统中。
  

  firewalld定义了几个概念:
    zone: 它是安全域的范围,就类似于Window上的域网络,工作网络,家庭网络,Internet网络等,不同的安全作用域
        其安全级别不同,安全程度不同,家庭zone的安全规则就是最宽松的。
    service: 它是zone里面的定义一个规则集,它将iptables中单独根据 入接口,出接口,源目端口,协议等定义单独规则
        整合为一个规则集合,方便识别和管理。
    protocol: 定义协议规则
    port,source-port :基于端口定义规则,port我的理解:定义源和目标为指定端口的规则。
    source: 定义源地址规则
    interface: 定义基于出入接口的规则。
    direct: 直接定义原始iptables规则。

  白名单控制谁能操作firewalld 对规则做增删改:
    注: firewalld的白名单机制是控制,谁能操纵firewall-cmd来对现有规则进行增删改等操作。
    此选项支持四种控制方式:
    1. context : 根据SELinux的进程domain(域)的安全上下文类型来定义Whitelist(白名单)
    2. command: 根据命令的绝对路径做Whitelist.
    3. uid
    4. user: 可以使用用户名 或 UID来做Whitelist

  全局选项:
    --state   #显示当前firewalld服务的运行状态。
    --runtime-to-permanent    #将运行时配置保存为永久配置。


  全局刷新配置:
    --reload    #重新加载防火墙permanent(永久的)的规则配置,覆盖当前运行时配置,
          在运行时添加的非permanent规则,都将丢失。
    --complete-reload    #完全重新加载防火墙,甚至netfilter内核模块。这很可能会终止活动连接,
              因为状态信息会丢失。此选项仅在出现严重防火墙问题时使用。
              例如,如果存在状态信息问题,则无法使用正确的防火墙规则建立连接。

  全局开启日志记录功能:
    --get-log-denied    #查看是否启用了在所有规则中启用拒绝日志记录。
    --set-log-denied=[all |unicast |broadcast |multicast |off]
        #设置启用或禁用在所有规则添加拒绝或删除日志记录功能。

  在进行一下操作前需要知道:
    增删查改:
      增: --add- 或 --new- #注: add:新增子选项 ; new:新建新项目
      删: --remove- 或 --delete-
      查: --query-
      改: --change-
    查看修改前: firewall-cmd --reload
    然后查看:
      --info-[zone |service |ipset |icmptype |helper]=[zone |service |ipset |icmptype |helper]


      --path-[zone |service | icmptype |helper |ipset]=[zone |service | icmptype |helper |ipset]


      --list-[all-zones |services |ports |protocols |source-ports |icmp-blocks |forward-ports |interfaces |sources]


      --get-[zones |services |icmptypes ]=[zones |services |icmptypes]

      --get-zone-of-interface=网卡接口 #查看此网卡接口当前被附加到那个zone
      --get-zone-of-source=<source>[/<mask>]|<MAC>|ipset:<ipset>

      --get-[default-zone |active-zones |target |ipsets |ipset-types |descripton |short |helpers]


  zone选项:
    注:
     zone可设置target,即iptables的动作,默认public的动作是仅允许icmp报文.
    

    --set-default-zone=<zone>         #设置默认zone, 默认为:public

    创建zone有两种方法:
      --new-zone=<zone> #直接指定zone名称创建.
      --new-zone-from-file=<filename> [--name=<zone>]
    #根据/etc/firewalld/zones/ 或 /usr/lib/firewalld/zones/下已有的zone.xml来创建.
      例:
       firewall-cmd --new-zone=test --permanent  
       firewall-cmd --reload    #任何操作完成后,都必须刷新后,才能查看到。

       注: 实际上firewalld也采用了多层结构来管理iptables规则,--permanent实际上是将当前在内存
        中的修改刷写到磁盘的配置文件中,这个配置文件就是默认zone的配置文件,默认在
          /etc/firewalld/zone/public.xml 
        --reload则是将内存中的数据同步到运行时的firewalld管理的runtime数据结构中。

在默认zone 或 指定zone下可做的操作:
    --add-port=<portid>[-<portid>]/<protocol>
    --add-source-port=<portid>[-<portid>]/<protocol>
    --add-protocol=<protocol>
    --add-service=<service>
    注:
       service就相当于port,source-port,protocol的集合,可将这些单独的元素,打包成一个服务来通过     调用它,一并创建port,source-port,protocol规则。
      创建服务和创建zone一样,也是两种方式:
    --new-service=<service>     #指定服务名称来创建
    --new-service-from-file=<filename> [--name=<service>]    #根据已有xml文件来创建

在服务下可做的操作:
    --service=<service> --add-port=<portid>[-<portid>]/<protocol>
    --service=<service> --add-source-port=<portid>[-<portid>]/<protocol>
    注:
     port 和 source-port都可以定义多个,但是测试发现,定义多个后,仅第一个会在iptables中的filter表中
    创建允许规则。
    若需要定义多个自定义端口,最好使用范围来创建允许一个端口范围的规则。
    --service=<service> --add-protocol=<protocol>      #它可以被创建为单独的一条运行某协议的iptables规则.
    --service=<service> --add-module=<module>        #不知道如何使用
    --service=<service> --set-description=<description>      #定义一个具体功能描述说明
    --service=<service> --set-short=<description>       #定义一个简短描述名
    --service=<service> --set-destination=<ipv>:<address>[/<mask>]    #定义目标地址. 因为对于服务来说,它的源只能是自己。

   例:
    #创建服务的示例:
    firewall-cmd --new-service=test --permanent
    firewall-cmd --service=test --add-port=9090/tcp --permanent
    firewall-cmd --service=test --add-source-port=10001-10003/tcp --permanent
    firewall-cmd --service=test --add-protocol=udp --permanent
    firewall-cmd --service=test --set-description='This is a test service !' --permanent
    cat /etc/firewalld/services/test.xml
      

    firewall-cmd --add-service=test --premanent #这样就执行创建iptables规则了。
    firewall-cmd --reload
    iptables -n -v -L

    在默认zone 或 指定zone下,添加网卡接口 和 源地址规则:
   --add-interface=<interface>
    注:
          将指定物理网卡的接口添加到zone中.默认是添加到public zone中.
     firewalld执行此操作后,会在INPUT链 和 FORWARD链中添加入站 和 转发规则。
      firewall-cmd --add-interface=eth1 --permanent
      firewall-cmd --reload
      iptables -v -n -L |grep -C3 'eth1‘

        

      --add-source=<source>[/<mask>]|<MAC>|ipset:<ipset>
    注:
        将指定源地址添加到指定zone中,默认:public.
    firewalld 执行此操作后, 会在INPUT链 和 FORWARD链中添加入站 和 转发规则.
    firewall-cmd --add-source=10.0.0.0/24 --permanent
    firewall-cmd --reload
    iptables -v -n -L |grep -B3 ‘10.0.0.0/24’

      

 

ICMP相关的规则:
    --add-icmp-block=<icmptype>
    --add-icmp-block-inversion

    在默认zone 或 指定zone下启用NAT功能:
    注:
        它支持DNAT(端口转发) 和 SNAT(源地址转换)
       --add-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]
    例:
     firewall-cmd  --add-forward-port=port=10003:proto=tcp:toport=22:toaddr=192.168.0.12
       注:
      添加一条临时规则,若--reload将被删除.
      此规则创建一个DNAT规则,将访问防火墙10003端口的报文转发给192.168.0.12的22号端口上。
      firewall-cmd执行此命令,实现DNAT的步骤如下:
      1.在mangle中添加一条规则去匹配目标端口是10003的报文,然后将其打上标记。
      2.在nat条中添加一条DNAT规则,通过匹配标记,将其源地址修改为192.168.0.12后,从转发filter表.
      3.在filter表中添加一条转发规则,只要匹配指定标记,就直接转发。
      4.开启系统的转发功能。

   

  #启用IPv4的动态IP伪装(即动态SNAT),它仅在POST_public_allow 链中添加了一条出接口非环回口的SNAT规则.
    --add-masquerade  


direct选项:
    注:
      此选项支持直接编写iptables规则.
      --add-chain {ipv4|ipv6|eb} <table> <chain>
      --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...
     注:
       priority: 就是规则插入的行号,越靠前越优先。
       arg: iptables相关规则选项。

     Whitelist选项:
    firewall-cmd --lockdown-on      #先开启功能,在设置谁能操纵firewall-cmd.
    firewall-cmd --add-lockdown-whitelist-command=<command>
          --add-lockdown-whitelist-context=<context>
          --add-lockdown-whitelist-uid=<uid>
          --add-lockdown-whitelist-user=<user>


rich富语言选项用法:
  firewall-cmd [--zone=zone] [--add|--list|--query|--remove]-rich-rule='rule' [--timeout=seconds]
      注:
       --timeout: 设置规则超时时间,若超时则自动删除,单位:秒

    rule: 简略版
      [source]
      [destination]
      service|port|protocol|icmp-block|masquerade|forward-port
      [log]
      [audit]
      [accept|reject|drop]

      rule:详细版
      [family="ipv4|ipv6"]
      [source |destination] address="address[/mask]" [invert="True|yes"]
      [[service name="service name" ]| [port port="number_or_range" protocol="tcp|udp"] | [protocol value="协议名"] ]
      [ icmp-block name="icmptype name" ]
      [masquerade]
      [forward-port port="number_or_range" protocol="tcp|udp" to-port="number_or_range" to-addr="address"]
      [log [prefix=prefix text] [level=log level] limit value=rate/duration]
      [audit]
      [accept | reject [type="reject type"] | drop]


masquerade:创建动态SNAT
  【即:自动判断用户要去的网络,查询路由后,将SNAT用户的源地址转换为可去往该网络的IP】
  创建SNAT:
    firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 masquerade accept"
    注:
     更简单的动态SNAT配置:
      firewall-cmd --permanent --add-masquerade
      firewall-cmd --permanent --query-masquerade   #可查看是否启动成功.
                若内部有多个网段时,它可自动识别不同网段,并完成SNAT.
        跟它类似的SNAT配置为:
      firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=1.1.1.0/24 invert=yes"
        注:
         invert=yes: 表示反转的意思,即只要不是1.1.1.0/24网络的都做SNAT.和直接写--add-masquerade类似.
      验证:
        #查看自动配置的转发规则,即SNAT回来的数据包,给予转发放行.
          iptables -vnL |grep -C5 192.168.0.0/24
        #查看自动配置的NAT表中的POSTROUTING链的的转化记录.
          iptables -vnL -t nat |grep -C5 192.168.0.0/24

    客户端:
      #客户端与SNAT服务器之间是192.168.0.0/24网络,SNAT端连接Internet.
      #注意添加默认路由时,一定要指明是global,或使用via关键字,指明下一跳.
      #否则创建的路由将是link类型的,系统将认为,我们其实是在一个网络中.于是
      #当我们ping 1.1.1.2时,系统将认为,客户端和1.1.1.0/24在一个局域网中,
      #于是发生ARP查询,这样肯定是查不到1.1.1.2的MAC的,就导致不通!
      ip route default via 192.168.0.1 dev eth0
      ping 1.1.1.2

端口转发:
  #将源地址是172.24.8.0/24网络的,访问我的5432端口,则将其转发到我的22号端口.并记录日志,日志前缀为[ADMIN LOGIN]
  #而且限制每分钟只记录一条日志.
  firewall-cmd --add-rich-rule="rule family=ipv4 source address=172.24.8.0/24 forward-port port=5432 \
         protocol=tcp to-port=22 log prefix='[ADMIN LOGIN]' limit value=1/m accept"

  简单的允许对任意源做端口转发:
    firewall-cmd --add-forward-port=port=5432:proto=tcp:toport=22 --timeout=100
      注:
      格式:
        [--permanent] [--zone=zone]  \
        --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] \
        [--timeout=seconds]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

firewall-cmd 使用总结 的相关文章

  • 使用命令行查找 Windows 上给定日期之后修改的文件

    我需要使用命令行搜索磁盘上在给定日期之后修改的文件 例如 dir S B WHERE modified date gt 12 07 2013 The forfiles该命令无需借助 PowerShell 即可运行 文章在这里 根据修改时间查
  • 如何在执行android仪器测试时在cmd控制台中打印日志

    我在windows系统上打开cmd 然后输入 adb shell am instrument w com demo uia test android support test runner AndroidJUnitRunner 运行 And
  • 通过静默安装将 Java 安装到带有空格的目录中

    我正在尝试使用静默模式安装 Java 并指定包含空格的安装目录 当我执行此操作时 会弹出 Windows Installer 对话框 指示其中一个参数不正确 如果我使用短路径名 它可以正常工作 但我真的不想使用短目录名 因为这是存储在注册表
  • 有没有类似 sed 的 cmd.exe 实用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用 Windows 命令行以编程方式编辑文件内容 cmd exe http en wikiped
  • Powershell命令:rm -rf

    rm是删除item 但是参数是多少 rf做或表示 每当我输入 help rf 时 它都会打印 powershell 中可用命令的完整列表 如果您输入会发生什么rm rf在 powershell 中 通过阅读周围的资料 我发现它会删除驱动器上
  • 文件类型 .pl 关联并使用 cmd.exe 运行脚本

    我创建了一个新的文件类型 pl 资源管理器 gt 工具 gt 文件夹选项 gt 文件类型 现在我想创建一个新的操作 它将调用 cmd exe 并自动运行 PERL 脚本 我不知道在 用于执行操作的应用程序 下要写什么 我必须向 cmd ex
  • VS Code 终端无法识别 PATH 变量

    我在 PATH 中添加了一个目录 但 VS Code 中的终端无法识别我尝试从该目录运行的命令 exe 终端使用 cmd 而不是 power shell 我缺少什么 重新启动我的计算机 它就工作了 显然 VS Code 无法识别这些更改
  • 批处理文件中的 %* 是什么意思?

    我见过的用法 在批处理文件和命令行中 有人可以解释一下的典型用法吗 有一个例子吗 它的意思是 命令行中的所有参数 例如 当您想要将命令行从批处理文件转发到另一个程序时 它非常有用 REM mybatchfile cmd echo You c
  • 以管理员身份从 cmd 批处理运行 PowerShell 脚本

    我有一个 PowerShell 设置 我想在执行策略可能受到限制并且需要管理员权限的计算机上执行 理想情况下 我可以将其包装在 cmd 批处理中 如下所示 powershell Command Start Process powershel
  • 批量设置变量=%变量:~1%是什么意思

    谁能解释一下是什么 1 在批处理文件中的以下语句中 我分配的值 variable到服务器名称并尝试过echo variable 我得到与输出相同的服务器名称 谁能解释一下下面的语句是如何工作的 set variable variable 1
  • 使用命令提示符查找 CPU 数量和每个 CPU 的核心数

    我正在尝试使用命令提示符检索 CPU 数量和每个 CPU 的核心数 我已经执行了以下命令 wmic cpu get NumberOfCores NumberOfLogicalProcessors Format List 我收到此错误 wmi
  • 如何使用java与防火墙(路由器)建立ssh连接?

    由于某种原因 我需要连接到防火墙 基于Linux 并使用Java添加一些规则 用google搜索了一段时间后 我发现jsch是我最好的选择 但是当我 用它来执行命令 显示主机名 例如 返回错误 如果我 执行类似命令 ls l and who
  • Windows 控制台“ESC[2J”并没有真正“清除”屏幕

    我知道这类问题经常被问到 但我认为这个问题有点不同 需要被问到 新的 Windows 控制台支持 ANSI VT100 控制代码 ANSI VT100 控制代码 http www termsys demon co uk vtansi htm
  • 在没有窗口的情况下从 C# 运行命令行并获取输出[重复]

    这个问题在这里已经有答案了 我正在尝试从 C 运行命令行脚本 我希望它在没有 shell 的情况下运行并将输出放入我的字符串输出中 它不喜欢 p StartInfo 行 我究竟做错了什么 我没有运行像 p StartInfo FileNam
  • 如何在Windows 8上执行“jps”命令?

    我想查看我的工作 java 进程 所以我想执行jps m 但在我的新 Windows 8 机器上出现此错误消息 Microsoft Windows Version 6 3 9600 c 2013 Microsoft Corporation
  • Powershell:启动进程不将参数传递给 cmd.exe

    这些是在 powershell 控制台 Windows 10 中运行的命令 username Username password Password securePassword ConvertTo SecureString password
  • 如何获取Windows服务的动态PID然后杀死它?

    我有自己的Windows服务 我想获取服务的PID 然后在cmd中杀死它 哪个命令可以为我执行此操作 你可以使用tasklist枚举进程 echo off for f tokens 2 p in tasklist fi imagename
  • 比较批处理文件中的两个数字

    我在这个网站上搜索了我的问题 但没有找到解决我问题的方法 系统为玩家和计算机提供一个从 2 到 12 的随机数 这有 3 部分 X 大于 Y 如果 X 小于 Y 以及当 X 与 Y 相同 当我开始 bat 效果很好 我选择Play Game
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • Flask 环境变量被忽略(FLASK_ENV 和 FLASK_APP)WINDOWS 10

    After setting the environment variables FLASK ENV and FLASK APP running flask run will give me this error 该代码片段显示了命令提示符

随机推荐

  • 九、设置元素等待

    转载于 xff1a http www testclass net selenium python element wait WebDriver提供了两种类型的等待 xff1a 显式等待和隐式等待 显式等待 显式等待使WebdDriver等待
  • Unity Tweak Tool使用

    这年头 xff0c 都讲究个性 Unity刚出来的时候 xff0c 就觉着新奇 xff0c 其他也没啥 xff0c 就是有些小不顺手 最开始使用的Ubuntu Tweak到后来的Gnome Tweak Tool都有点偏 xff0c ubun
  • MYSQL–my.cnf配置中文详解

    basedir 61 path 使用给定目录作为根目录 安装目录 character sets dir 61 path 给出存放着字符集的目录 datadir 61 path 从给定目录读取数据库文件 pid file 61 filenam
  • vscode中C/C++的Clang-format的使用

    一 介绍 Clang format是一个功能强大的格式化工具 在vs code通过C C 43 43 扩展后即可使用Clang format工具进行代码的格式化 其自带的排版格式主要有 xff1a LLVM Google Chromium
  • ShardingJDBC核心概念与快速实战

    目录 ShardingSphere介绍 ShardingSphere特点 ShardingSphere简述 ShardingSphere产品区分 ShardingJDBC实战 核心概念 实战 ShardingJDBC的分片算法 Shardi
  • 野火嵌入式学习笔记:第47讲 按键检测输入

    野火 第一期 Linux系列教学视频之 零基础入门 篇 xff0c 手把手教学 xff0c 从0开始 xff0c 基于野火i MX6ULL Pro MINI开发板 第47讲 检测按键输入 哔哩哔哩 bilibili 检测用户按键3 key按
  • 学习野火嵌入式笔记 第48讲:进程的由来

    野火 第二期 Linux系列教学视频之 内核编程 篇 xff0c 手把手教学 xff0c 硬件基于野火i MX6ULL Pro MINI开发板 野火 第二期 Linux系列教学视频之 内核编程 篇 xff0c 手把手教学 xff0c 硬件基
  • 学习野火嵌入式笔记:第68讲 I.MX^ULL 启动方式

    野火 第三期 Linux系列教学视频之 裸机开发 篇 xff0c 手把手教学 xff0c 基于野火i MX6ULL Pro MINI开发板 哔哩哔哩 bilibili 先了解其芯片手册以及linux开发板的原理图 全篇就在讲启动方式的引脚设
  • C语言 字符串-字符串的匹配

    字符串匹配函数 const char strstr const char str1 const char str2 搜索字符串在另一个字符串中首次出现的位置 const char p 61 strstr 34 how are you 34
  • Lambda表达式

    什么是Lambda表达式 Lambda 表达式是 Java8 新增的重要特性 xff0c Lambda 使 Java 具有了函数式编程的思想 xff0c 它的实质也是由编译器根据表达式推断最终生成原始语法的字节码方式 函数式编程思想是 强调
  • MPU6050多次发送数据,但第一次读取的数据为0

    实际现象并不是第一次数据为0 xff0c 一直读取数据 xff0c 中间也会出现数据为0的现象 xff0c 原因是 xff1a 跟采样频率有关 xff0c 如果采样频率为50Hz xff0c 那么读取数据间隔时间必须大于20ms xff0c
  • gazebo多机仿真时出现的问题解决方法

    多机仿真过程中出现的飞机不动的情况是 xff1a 下面几个步骤要严格执行 xff1a cd PX4 span class token operator span Autopilot git submodule update span cla
  • Linux c多线程与c++多线程的基础写法

    最近工作需要 xff0c 对多线程做了一点了解 xff0c 现在将多线程的创建 xff0c 函数传参做个小结 一 linux c多线程 1 头文件 xff1a include lt pthread h gt 2 创建线程 xff1a pth
  • 姿态误差问题

    前段同学问了一个关于飞机姿态误差的问题 xff0c 将飞机姿态直接做差与px4里面先z轴对齐然后将过渡矩阵的姿态量赋值给滚转俯仰姿态误差对比 xff0c 发现直接做差后在飞机做大的机动时误差量会变大 xff0c 曲线的拟合非常不好 xff0
  • px4 avoidance笔记

    最近在用px4官方的avoidance代码跑硬件避障 xff0c 官方介绍了只要生成符合sensor msgs PointCloud2点云信息就能使用 xff0c 因此为了应用长基线双目 xff0c 没有使用realsense的相机 xff
  • PX4源代码下载编译

    sudo git clone https github com PX4 PX4 Autopilot git recursivegit submodule update init recursivegit submodule update r
  • 踩坑记录

    ERROR Session line number was not unique in database History logging moved to new session 66 在生成tfrecord时 总报如下错误 找了很长时间
  • git强制覆盖本地代码

    git强制覆盖本地 xff1a git fetch all 拉取所有更新 git reset hard origin master 本地代码同步线上最新版本 会覆盖本地所有与远程仓库上同名的文件 git pull git强制覆盖本地命令 x
  • 【毕业设计】基于STM32及OpenMV的云台追踪装置

    目录 修改记录1 摘 要2 整体功能分析3 硬件选型3 1 OpenMV4 Cam H73 2 STM32F103ZET63 3 DS3120舵机3 4 LED补光板3 5 供电及稳压3 6 硬件连接 4 软件功能实现4 1 OpenMV部
  • firewall-cmd 使用总结

    firewalld的简要说明 firewalld firewall cmd firewall offline cmd它们Python脚本 xff0c 通过定义的在 usr lib firewalld下面的xml配置信息 xff0c 在启动时