顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [Linux] 防火牆 firewalld 安裝與設定
時間 2023-09-21 Thu. 17:33:23


舊版 CentOS Linux 的防火牆是用傳統的 iptables
但每次修改規則都清除原本的設定,再重新設定所有的規則
必需寫一個 shell script 檔來執行才行
所以從 CentOS 7 開始預設改用比較方便的 firewalld


安裝 firewalld

如果有使用 iptables 的話要先移除

檢查是否有使用 iptables
$ systemctl status iptables

有的話停止正在執行的 iptables
$ sudo systemctl stop iptables

將 iptables 永久關閉
$ sudo systemctl mask iptables

安裝 firwalld
$ sudo yum install firewalld

檢查 firewalld 執行狀態
$ systemctl status firewalld

啟動並設定開機自動執行
$ sudo systemctl start firewalld
$ sudo systemctl enable firewalld


firewalld 的區域設定

firewalld 的設定都是使用 firewall-cmd 指令

firewalld 對於不同的區域可以使用不同的設定

列出已經定義好的區域
$ sudo firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work

block: 阻檔所有與外部的連線
drop: 只允許連出去,阻檔所有進來的連線
home, work, internal: 家用、工作用、內部網路,比較不會有攻擊者
public: 公開網路,可能會有攻擊者,大部份的連線設定寫在這裡
trusted: 信任的網路,允許所有連線

列出所有區域與其設定
$ sudo firewall-cmd --list-all-zones

查詢某個區域的設定
$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

上面顯示的設定是目前使用的,若要查詢永久設定,使用
$ sudo firewall-cmd --zone=public --list-all --permanent

目前預設的區域,沒指定區域的話就會用預設的區域
$ sudo firewall-cmd --get-default-zone
public

更改預設的區域
$ sudo firewall-cmd --set-default-zone=work

查詢正在運作的區域
$ sudo firewall-cmd --get-active-zones
public
  interfaces: eth0

每個連線會依以下順序來選擇要套用哪個區域的規則
1. 首先看 IP 是否符合某個區域設定的 sources
2. 沒有的話看 interfaces
3. 都不符合的話就用預設的區域

例如要將某個IP的連線套用 trusted 區域的設定
$ sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.0.1
$ sudo firewall-cmd --reload

這樣與 192.168.0.1 的連線就會使用 trusted 區域的設定一律允許了


修改連線規則

要增加新的服務,例如 http 的話
$ sudo firewall-cmd --zone=public --add-service=http --permanent

--permanent 加這個代表寫入硬碟的永久設定,要 --reload 才會生效,沒寫的話就是暫時增加

要移除某個服務
$ sudo firewall-cmd --zone=public --remove-service=http --permanent


新增一個 port,例如 3306
$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent

要移除某個 port 的話
$ sudo firewall-cmd --zone=public --remove-port=3306/tcp --permanent

設定好要重載才會生效
$ sudo firewall-cmd --reload


允許或禁止特定的IP連線

可以將連線的IP加入 trusted 或 block 區域,
或是在 public 區域另外加上 rich-rule 設定

例如允許內部IP 192.168.0.1 的所有連線
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.1" accept'

允許內部IP 192.168.0.x 的所有連線
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'

例如禁止IP 192.168.0.1 的所有連線
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.1" reject'

設定好要重載才會生啟
$ sudo firewall-cmd --reload

查看設定好的 rich-rule
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
	
rule family="ipv4" source address="192.168.0.1" accept

要移除 rich-rule,就把上面的指令 --add-rich-rule 改成 --remove-rich-rule


參考
CentOS Linux 7 以 firewalld 指令設定防火牆規則教學



--
※ 作者: Knuckles 時間: 2023-09-21 17:33:23 (台灣)
※ 編輯: Knuckles 時間: 2023-09-21 22:50:36 (台灣)
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 29 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇