next up previous contents
Next: Masquerading and Port Forwarding Up: Netfilter Previous: firewall direct rules   Contents


firewall rich rules

  1. Rich rules 可以使用基本的 allow/deny rules,也可以設定為 syslog and auditd, port forwards, masquerading, 及 rate limiting。多條規則同時在同一個 zone,規則的順序對防火牆影響很大,其規則的順序如下:
    1. port forwarding and masquerading 規則
    2. logging 規則,匹配此規則封包會繼續被處理。
    3. allow 規則
    4. deny 規則
  2. 以上規則順序,先匹配先執行,如果一封包沒有匹配 zone 內的任何規則,基本上是被限制,但還是要看其他的 zone 是否接受。
  3. 基本語法:
    rule
      [source]
      [destination]
      service|port|protocol|icmp-block|masquerade|forward-port
      [log]
      [audit]
      [accept|reject|drop]
    
  4. 詳細語法說明:
    [root@kvm5 ~]# man 5 firewalld.richlanguage
    
  5. public zone 開放 ssh 服務,所以若要求 192.168.122.0/24 可以使用 SSH 連線, 而 192.168.111.0/24 不能使用 SSH 連線,則只需要設定限制的 rich rules。在預設的 public zone 限制 192.168.111.0/24 不可以使用 SSH 連線,其中 reject 必須小寫。
    [root@kvm5 ~]# firewall-cmd --permanent --zone=public --add-rich-rule \
    "rule family="ipv4" source address="192.168.111.0/24" port port="22" protocol="tcp" reject"
    success
    [root@kvm5 ~]# firewall-cmd --reload 
    success
    
  6. 查看 kvm5 防火牆狀態,新增了拒絕 192.168.111.0/24 使用 ssh 22 port 的規則。
    [root@kvm5 ~]# firewall-cmd --list-all
    public (default, active)
      interfaces: eth0
      sources: 
      services: dhcpv6-client kerberos ssh
      ports: 464/tcp 749/tcp
      masquerade: no
      forward-ports: 
      icmp-blocks: 
      rich rules: 
        rule family="ipv4" source address="192.168.111.0/24" port port="22" protocol="tcp" reject
    
  7. 要從主機 kvm7.deyu.wang 測試 kvm5.deyu.wang 防火牆環境,先在 kvm7.deyu.wang 主機上以 root 身份新增 eth0 網卡 IP 192.168.111.7/24。
    [root@kvm7 ~]# ifconfig eth0:1 192.168.111.7/24 up
    
  8. 查看主機 kvm7.deyu.wang 有 192.168.122.7 及 192.168.111.7 兩個 IP。
    [root@kvm7 ~]# ifconfig | grep -A1 eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.122.7  netmask 255.255.255.0  broadcast 192.168.122.255
    --
    eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.111.7  netmask 255.255.255.0  broadcast 192.168.111.255
    
  9. kvm5.deyu.wang 限制 192.168.111.0/24 ssh 連線,主機 kvm7.deyu.wang ssh 綁定 192.168.122.7 可以成功連線 kvm5.deyu.wang,但若綁定 192.168.111.7 則無法順利連線。
    [root@kvm7 ~]# ssh -b 192.168.122.7 kvm5.deyu.wang
    root@kvm5.deyu.wang's password: 
    Last login: Mon May 28 15:33:01 2018 from deyu.wang
    [root@kvm5 ~]# exit
    logout
    Connection to kvm5.deyu.wang closed.
    [root@kvm7 ~]# ssh -b 192.168.111.7 kvm5.deyu.wang
    ssh: connect to host kvm5.deyu.wang port 22: Connection refused
    
  10. 測試後 kvm7 馬上取消 eth0:1 網卡設定,以免影響後續測試。
    [root@kvm7 ~]# ifconfig eth0:1 down
    [root@kvm7 ~]# ifconfig | grep eth0 -A1
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.122.7  netmask 255.255.255.0  broadcast 192.168.122.255
    
  11. 如果設定沒錯,但 ssh 綁定 192.168.111.1 還是可以連線,要檢查 client 的 iptables 是否做 POSTROUTING?
    -A POSTROUTING -i virbr0 -j MASQUERADE
    



De-Yu Wang 2018-09-07