看板 KnucklesNote
作者 標題 [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:
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:
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
回列表(←)
分享