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]

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

  1. Red Hat Enterprise Linux7的安装与oracle 12c的安装

    Red Hat Enterprise Linux7的安装与oracle 12c的安装 本文档中用到的所有参数均位于文末附录 Red Hat Enterprise Linux7的安装 新建完虚拟机后,挂 ...

  2. 总zabbix配置-搭建-邮件报警-微信报警-监控mysql

    Centos7安装Zabbix4.0步骤 官方搭建zabbix4.0的环境要求: 1. 环境搭建LAMP 前提Centos系统安装完成:  确认一下: 1 2 cat /etc/redhat-rele ...

  3. linux vue项目+npm run build + nginx

    系统 环境 vue   nginx 步骤 1.打包vue项目 2.配置nginx 打包vue项目 1.项目配置   我们使用服务器的8000端口 2.打包 # npm run build 打包成功会创 ...

  4. 在linux上安装tomcat

    (1)主要参考https://jingyan.baidu.com/article/3065b3b6e0fad2becff8a419.html(这个看后基本知道怎么安装tomcat) 其次参考:http ...

  5. Centos7系统防火墙上开端口

    //permanent 永久生效 没有此参数重启失效 firewall -cmd --zone=public --add -port=80/tcp --permanent            //开 ...

  6. RHEL7、CentOS7防火墙管理

    经常start.stop.restart操作防火墙有两种方式: 1.service iptables stop 2./etc/init.d/iptables stop 但是经常会有这种错误,因为在RH ...

  7. 【原】【BG】-一次虚拟化环境实践简要记录

    部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...

  8. Linux下部署配置Nginx

    1.安装工具包 yum install -y wget 下载工具 yum install -y vim-enhanced vim编辑器 yum install -y make cmake gcc gc ...

  9. Linux下单机安装部署kafka及代码实现

    技术交流群:233513714 这几天研究了kafka的安装及使用,在网上找了很多教程但是均以失败告终,直到最后想起网络方面的问题最终才安装部署成功,下面就介绍一下kafka的安装部署及代码实现 一. ...

  10. CentOS 7 samba server 配置

    samba是linux上的文件共享服务软件,相当与Windows上的共享文件夹,当然也是要在同一网段上的. 当前用的版本是4.4.4,好吧!下面介绍怎么去安装配置它,here we go! 1. 安装 ...

随机推荐

  1. 如何给老婆解释什么是RESTful

    如何给老婆解释什么是RESTful Javdroider Hong 知乎专栏<Beautiful Java>的作者,一个热爱足球和健身的上进boy 1,543 人赞了该文章 老婆经常喜欢翻 ...

  2. register_shutdown_function函数详解

    设定错误和异常处理三函数 register_shutdown_function(array(‘Debug’,'fatalError’)); //定义PHP程序执行完成后执行的函数 set_error_ ...

  3. Page Design for Sexable Forum

    Design Demo 1. Home of Sexable Forum 1.1  home page not logined. 1,2 home page logined. 2. Pages wit ...

  4. mt7620 wifi driver

    <*> Ralink RT2860 802.11n AP support [*] LED Support [*] WSC (WiFi Simple Config) [*] WSC 2.0( ...

  5. openwrt 编译 gmediarender

    output_gstreamer.o: In function `my_bus_callback': output_gstreamer.c:(.text+0xf68): undefined refer ...

  6. 微软开源 Try .NET - 创建交互式.NET文档

    微软近日开源了一个新平台--Try .NET,该平台可以让开发者在线上编写并运行 .NET 代码.微软介绍,Try .NET 是一个可嵌入的代码运行器,不仅可以直接在线上对自己或者他人的代码进行编辑. ...

  7. H5新增表单属性

    一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ...

  8. Entity Framework 6 Code First系列1: 实体类1:1配置

    从4.1版本开始,EF开始支持Code First模式,值得注意的是Code First不是和DataBase First或Model First平级的概念,而是和EDM平级的概念.使用Code Fi ...

  9. MySQL基本语句优化10个原则

    在数据库应用中,程序员们通过不断的实践总结了很多经验,这些经验是一些普遍适用的规则.每一个程序员都应该了解并记住它们,在构造SQL语句时,养成良好的习惯.以下10条比较重要的原则供大家参考. 原则1: ...

  10. LIS n^2&nlogn模板

    LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950 #include <iostream> #include <st ...