如何在 Armbian 或其他 Linux 中啟用 UFW
如果你跟我一樣需要用到防火牆,但是 iptables
對你而言又太難上手了,那我相信你一定不是第一次被推薦 UFW
這個工具。
簡單來說,全名 Uncomplicated Firewall 的 UFW
,是一個 iptables
的設定工具。
除了常見的 Port 允許/阻擋 之外,還有一些 App 設定檔,方便使用者快速套用,對新手也相當友善!
發行版核心(distribution kernel)
一般來說,若你使用的是較為面向一般使用者的發行版,比如說是 Ubuntu 或 Mint,它們內建的 Kernel 應該都已經開啟了相關的功能,我們可以直接使用,不必擔心支援性的問題。
不過,為了避免出問題,我們還是可以先用下面這個指令測試一下:
sudo ufw --dry-run enable
如果成功的話,你應該會看到類似的訊息
Firewall is active and enabled on system startup
當然,有的時候就是會有那麼幾個例外,你可能遇到類似的錯誤訊息:
ERROR: problem running ufw-init
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.11.6-rockchip/modules.dep.bin'
modprobe: FATAL: Module nf_conntrack_ftp not found in directory /lib/modules/4.11.6-rockchip
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.11.6-rockchip/modules.dep.bin'
modprobe: FATAL: Module nf_nat_ftp not found in directory /lib/modules/4.11.6-rockchip
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.11.6-rockchip/modules.dep.bin'
modprobe: FATAL: Module nf_conntrack_netbios_ns not found in directory /lib/modules/4.11.6-rockchip
iptables-restore: line 77 failed
iptables-restore: line 30 failed
ip6tables-restore: line 138 failed
ip6tables-restore: line 30 failed
Problem running '/etc/ufw/before.rules'
Problem running '/etc/ufw/user.rules'
Problem running '/etc/ufw/before6.rules'
Problem running '/etc/ufw/user6.rules'
核心設定(kernel configuration)
如果你真的不幸在 dry-run
的階段就陣亡了,那我們就只能試著自己編譯核心了…
以 Armbian for Tinkerboard 為例
根據官方文件的敘述,我們只需要先安裝一些需要的工具,剩下的都可以交給 BuildTool 負責。
sudo apt install git
接下來就是下載 BuildTool
git clone --depth 1 https://github.com/armbian/build
開始編譯
cd build # 切換資料夾
./compile.sh # 執行編譯工具
因為需要用到 root
,請輸入密碼之後繼續
接下來會問你,編譯之後要怎麼打包
U-boot and kernel packages
指的是只編譯 U-boot 和核心(kernel)的部份Full OS image ffor flashing
則是整個 .img 檔案,可以用 Etcher 或dd
寫入 SD 卡
在某些板子的編譯選項中,會出現這樣的畫面,原因是 Armbian 提供的 .config 檔案,尚未涵蓋到新的選項,所以在選單(menuconfig)出來之前,會先逐一詢問,避免在編譯的時候沒有注意到新增的選項
這邊提供一個小技巧: 在每一個選項後面都會有類似這樣的標示
[N/y/?]
- Y 代表 Yes,會將這個功能直接編進核心
- N 代表 No,不編譯
- M 代表 Module,編譯成核心模組(Kernel Module)
- ? 可以用來開啟這個選項的說明(非常推薦)
如果有餘力的話當然也可以逐一 Google 每一個選項的意思,但我作為一般人也有一般人的作法: 只要一路按 Enter 讓它全部都套用預設值即可 一般來說也不會出問題(不然哪叫預設值)
經過一番苦戰,我們總算設定完所有的新功能了,接下來就是 更多的設定…
以 Ubuntu 16.04.3 LTS 為例
sudo apt-get
menuconfig
選項
- Networking options
[*] Networking support --->
Networking options --->
[*] TCP/IP networking
<*> IP: IPsec transport mode
<*> IP: IPsec tunnel mode
<*> INET: socket monitoring interface
<*> The IPv6 protocol --->
[*] Network packet filtering framework (Netfilter) --->
- Network packet filtering framework (Netfilter)
[*] Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
--- Network packet filtering framework (Netfilter)
Core Netfilter Configuration --->
<M> Netfilter LOG over NFNETLINK interface
<*> Netfilter connection tracking support
<M> FTP protocol support
<M> NetBIOS name service protocol support
-*- Netfilter Xtables support (required for ip_tables)
*** Xtables combined modules ***
<M> LOG target support
*** Xtables matchs ***
<*> "conntrack" connection tracking match support
<M> "hashlimit" match support
<M> "limit" match support
<M> "multiport" Miltiple port match support
- IP: Netfilter Configuration
[*] Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
--- Network packet filtering framework (Netfilter)
IP: Netfilter Configuration --->
<*> IPv4 connection tracking support (required for NAT)
<*> IP tables support (required for filtering/masq/NAT)
<*> Packet filtering
<*> REJECT target support
- IPv6: Netfilter Configuration
[*] Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
--- Network packet filtering framework (Netfilter)
IPv6: Netfilter Configuration --->
<*> IPv6 connection tracking support
-*- IPv6 tables support (required for filtering)
<M> "rt" Routing header match support
<M> "HL" hoplimit target support
<*> Packet filtering
<*> REJECT target support
後記
好久不見啦!各位!最近工作的事情實在很忙,先是寫不完的報告,又是接連的硬體更換,連吃東西都快要沒有樂趣了… 還好在硬碟裡翻出這篇草稿,終於久違的上傳了一點東西!