今天來跟大家介紹防火牆。在日常生活中還是得設定防火牆確保陌生人不會隨意進入自己的主機中。在Debian 為底的系統中主要是以 ufw(簡易防火牆) 為主,但是在網站系統中我比較會以 firewalld 為主,畢竟在伺服器里都會有一個或是兩個以上的網段、網卡要管理。今天就介紹比較常用的設定方式。
另外在 debian 10 有安裝 KVM 或是 ubuntu 20.04 LTS 有安裝 docker 就不建議使用 firewalld ,因為當前版本會導致KVM 網路 或是 docker 網路異常。此問題在下一個發行版才有獲得解決。
firewalld 的概念事先將網卡劃分區塊(zone),每張網卡就好比是家裡的每一扇門,而區域就是主臥、客廳、室外。我舉幾個比較常用的區域:
顧名思義就是公眾區域,好比家裡的大門是通往外面的世界,逼安只會允許公開的服務接口通過,如:22
就像是自己房間區域一樣,可以允許所有的連線連接主機裡面的服務。
libvirt 是比校特殊的區域,主要是處理 KVM 的網路介面。而且只有 KVM 的網路介面可以到此區域,同時KVM 網路介面也無法加入到其他區域。原因可能是是過度
階段,未來版本可能就沒有了。
Debian 如果要使用firewalld 建議先將預設的防火牆移除在安裝 firewalld
apt remove ufw
apt install firewalld
yum install firewalld
firewall-cmd --version
firewall-cmd --list-all
firewall-cmd --get-active-zones
firewall-cmd --reload
下列範例我都會加 --permanent
永久設置選項,加了此選項必須重新讀取才會生效。如果不加永久選項,執行設定之後就會立刻生效,但是重新開機會是重新啟動 firewalld 就會回到設定前的狀態。
採用服務規則時要記住實際上只會開預設的port,例如http
預設是走 80
,如果網頁伺服器實際上是走 10010
一樣會被擋下來唷!
常見的連接埠可以參考linux 這份文件 /etc/services
當然更多資訊可以從這裡得知 Service Name and Transport Protocol Port Number Registry
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --remove-service=http
firewall-cmd --permanent --zone=public --add-port=4848/tcp
firewall-cmd --permanent --zone=public --remove-port=4848/tcp
這部份我是直接用 rich-rule
處理,因為我就是不想多記一點指令。
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.56.1" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.56.0/24" accept'
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.56.1" accept'
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.56.0/24" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="33899" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.0/24" port protocol="tcp" port="33899" accept'
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="33899" accept'
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.56.0/24" port protocol="tcp" port="33899" accept'
Red Hat Enterprise Linux 4: 安全性設定手冊 附錄 C. 常見的連接埠
Libvirt managed bridge won't use firewalld zone after reboot