如何在 Armbian 或其他 Linux 中啟用 UFW

如果你跟我一樣需要用到防火牆,但是 iptables 對你而言又太難上手了,那我相信你一定不是第一次被推薦 UFW 這個工具。

簡單來說,全名 Uncomplicated FirewallUFW,是一個 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    # 執行編譯工具

ask for password

因為需要用到 root,請輸入密碼之後繼續

image type

接下來會問你,編譯之後要怎麼打包

U-boot and kernel packages 指的是只編譯 U-boot 和核心(kernel)的部份 Full OS image ffor flashing 則是整個 .img 檔案,可以用 Etcherdd 寫入 SD 卡

option switch

在某些板子的編譯選項中,會出現這樣的畫面,原因是 Armbian 提供的 .config 檔案,尚未涵蓋到新的選項,所以在選單(menuconfig)出來之前,會先逐一詢問,避免在編譯的時候沒有注意到新增的選項

kernel option

這邊提供一個小技巧: 在每一個選項後面都會有類似這樣的標示 [N/y/?]

  • Y 代表 Yes,會將這個功能直接編進核心
  • N 代表 No,不編譯
  • M 代表 Module,編譯成核心模組(Kernel Module)
  • ? 可以用來開啟這個選項的說明(非常推薦)

如果有餘力的話當然也可以逐一 Google 每一個選項的意思,但我作為一般人也有一般人的作法: 只要一路按 Enter 讓它全部都套用預設值即可 一般來說也不會出問題(不然哪叫預設值)

經過一番苦戰,我們總算設定完所有的新功能了,接下來就是 更多的設定

menuconfig

以 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)  --->

Networking options

  • 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

Network packet filtering framework

  • 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

IP: Netfilter Configuration

  • 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

IPv6: Netfilter Configuration

後記

好久不見啦!各位!最近工作的事情實在很忙,先是寫不完的報告,又是接連的硬體更換,連吃東西都快要沒有樂趣了… 還好在硬碟裡翻出這篇草稿,終於久違的上傳了一點東西!

參考資料

發表迴響