firewall-cmd 使用总结

 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报文.
    dom

    --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    #任何操做完成后,都必须刷新后,才能查看到。tcp

       注: 实际上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
      ui

    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’xml

      

 

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]

相关文章
相关标签/搜索