2018年4月5日 星期四

解決「用 firewall-config 設定豐富規則 (Rich Rules) 失敗」的問題

為了電腦的安全,通常會啟動「防火牆」以防止外來者的入侵。但是當開啟某些服務時,又希望只有合法的使用者可以連入使用。因此,在「防火牆」開個洞讓這些電腦可以連入並使用服務,就變成必需的。
  簡單的「防火牆」設定,只是開個埠讓外界電腦可以連入,但是不能限制連入的電腦。以前有個軟體 FWBuilder 很好用,後來 Fedora 的「防火牆」改用 firewalld 以取代 IPTable 後,firewalld 附帶的編輯器愈來愈完整,設「分享器」也很方便。漸漸地 FWBuilder 也被從 Fedora 的「套件資料庫」中移除。
  最近,除了 SSH 的埠(也換了埠號)外,也要開其它埠給別的「服務」使用(給不會設定 SSH 隧道的使用者),就要限制連入電腦的網路位址(IP address)。在 fieewall-config 中有個「豐富規則」(Rich Rules)的設定分頁,就是為了這個用途。

一、開啟「防火牆」設定程式 firewall-config

由「程式選單」的《系統》→《管理》→點選「防火牆」開啟 firewall-config,若不是以 root 權限開啟需要經過認證程序。在「界域」(Zones)分頁中點選欲設定「豐富規則」的「界域」名稱,再在右方設定項目的分頁點選「豐富規則」的分頁。
  第一次設定時看到的應該是空白,按下方【加入(A)】鈕設定一個新的規則。

二、設定「豐富規則」

假設欲設定之規則為:『接受』由網路位址 123.45.67.80 ~ 123.45.67.87 這些電腦,使用 IPv4 連入 HTTP 伺服器 (網址 123.45.67.100) 的連線,連線時在 /etc/log/message 中會記錄一段訊息,其前綴為『HTTP: 』。

按【確定】鈕後,應該就會生效,但是仍無法連線。

三、設定成功,卻無作用?

剛開始以為是設定輸入時錯誤,所以不成功,用文字命令查詢「防火牆」的設定,
[root@Core-i7 ~]# firewall-cmd --list-all
public (active)
   target: default
   icmp-block-inversion: no
   interfaces: enp2s0
   sources:
   services: mdns
   ports: 5566/tcp
   protocols:
   masquerade: no
   forward-ports:
   source-ports:
   icmp-blocks:
   rich rules:
          rule family="ipv4" source address="123.45.67.80/24" destination address="123.45.67.100/32" service name="http" log prefix="HTTP: " level="info"
上例的查詢結果中,rich rules: 項目下所列的「豐富規則」並無 accept 這個字,也就是說剛才「豐富規則」設定畫面中的 accept 這個設定,並沒有被設定成功,可能是 firewall-config 的程式錯誤。用文字命令增加豐富規則,同樣的規則設定為
[root@Core-i7 ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="123.45.67.80/24" destination address="123.45.67.100/32" service name="http" log prefix="HTTP: " level="info" accept'
文字命令查詢結果為
[root@Core-i7 ~]# firewall-cmd --list-all
public (active)
   target: default
   icmp-block-inversion: no
   interfaces: enp2s0
   sources:
   services: mdns
   ports: 5566/tcp
   protocols:
   masquerade: no
   forward-ports:
   source-ports:
   icmp-blocks:
   rich rules:
          rule family="ipv4" source address="123.45.67.80/24" destination address="123.45.67.100/32" service name="http" log prefix="HTTP: " level="info" accept
在查詢結果中可以看到「豐富規則」的最後有 accept ,表示設定成功,而這時外界的電腦可以連入。

四、確認 firewall-config 的程式錯誤

為確認 firewall-config 的程式錯誤,將以文字命令設定成功的「豐富規則」,按 firewall-config 的【編輯】鈕以查詢設定內容,再按【確定】鈕儲存一次「豐富規則」,原本可以連線的設定又失效了。再用文字命令查詢,原本在「豐富規則」最後的 accept 這個設定又不見了。
  由這個測試可再一次確認這個 firewall-config 的程式錯誤,要設定「豐富規則 (Rich Rules)」只能暫時在「終端機」用「文字列命令」了。

已測試版本:

  • Fedora: 27
  • MATE 桌面: 1.19.3

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)