如何在 Ubuntu 18.04 上設置 UFW 防火牆

在本文中,我將向您展示如何在 Ubuntu 18.04 上設置 UFW 防火牆。 在 Ubuntu 中,默認防火牆是 UFW,縮寫為 簡單的防火牆. 它自 Ubuntu 18.04 發布以來一直存在,旨在簡化相當複雜的 iptables 配置。

在使用任何操作時,就係統安全而言,防火牆是必須考慮的最重要的功能之一。 防火牆是存在於您的 PC 和 Internet 之間的屏蔽或屏障,可阻止未經授權的流量(例如遠程訪問您的系統),並有助於防止惡意代碼不斷通過 Internet 傳播。 防火牆可以是硬件也可以是軟件。 硬件防火牆是一種獨立的防火牆系統,它放置在網絡中,通過控制進出網絡的流量以及阻止用戶訪問不需要的站點來添加保護層。 軟件防火牆內置於 Linux 和 Windows 等操作系統中,有助於保護您的系統免受外部攻擊。

另請閱讀:

  • 如何在 Ubuntu UFW 防火牆上啟用、拒絕、允許、刪除規則

UFW的安裝

默認情況下,Ubuntu 18.04 安裝了 ufw。 但是,對於較早的系統,您必須運行以下命令

apt-get install ufw

要檢查 ufw 是否正在運行,請運行

systemctl status ufw

如果它正在運行,你應該得到下面的輸出

● ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enab
   Active: active (exited) since Tue 2018-04-10 22:03:30 UTC; 4min 1s ago
  Process: 376 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=0/SU
 Main PID: 376 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0
   CGroup: /system.slice/ufw.service

Apr 10 22:03:30 ip-172-31-41-251 systemd[1]: Started Uncomplicated firewall.
Warning: Journal has been rotated since unit was started. Log output is incomple

檢查它是活動的還是非活動的運行

ufw status

如果它處於非活動狀態,您將獲得以下輸出

Status: inactive

使用運行的默認規則集打開 UFW

ufw enable

禁用防火牆運行

ufw disable

設置默認 ufw 規則

要設置允許所有傳出協議的默認規則,請以 root 身份登錄並運行

ufw default allow outgoing

輸出

Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

要拒絕所有傳入連接,請運行

ufw default deny incoming

輸出

Default outgoing policy changed to 'deny'
(be sure to update your rules accordingly)

上述命令將允許所有傳出連接並拒絕或阻止所有傳入連接。
此時,您可能希望啟用防火牆,但在啟用之前,請先允許 ssh。 這可以防止與服務器斷開連接,因為我們之前指定了拒絕所有傳入連接。

要允許 ssh,請運行

ufw allow 22/tcp

外出

Skipping adding existing rule
Skipping adding existing rule (v6)

也可以通過服務名稱允許 ssh 訪問,

ufw allow ssh

如果要刪除規則運行

ufw delete allow 22/ssh

按名稱拒絕服務運行

ufw deny service-name

例如

ufw deny ssh

要查看系統中可以允許或拒絕的所有服務,請查看 /etc/services 文件。

cat /etc/services | less

樣本輸出

ftp-data        20/tcp
ftp             21/tcp
fsp             21/udp          fspd
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp
telnet          23/tcp
smtp            25/tcp          mail
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116
whois           43/tcp          nicname
tacacs          49/tcp                          # Login Host Protocol (TACACS)
tacacs          49/udp
re-mail-ck      50/tcp                          # Remote Mail Checking Protocol
re-mail-ck      50/udp
domain          53/tcp                          # Domain Name Server
domain          53/udp

啟動 ufw 防火牆

要以 root 身份激活防火牆登錄並運行以下命令:

 ufw enable

您可能會收到以下警告提示

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

如果你選擇是,你會得到下面的輸出

Firewall is active and enabled on system startup

防火牆現在處於活動狀態,它將在每次啟動時啟動。 我們可以再看看防火牆規則:

ufw status

現在的輸出將顯示防火牆的狀態以及允許的服務/端口

輸出

ufw status active
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22                         ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)

允許 ufw 中的連接

您可以輕鬆地允許 ufw 中端口/範圍、應用程序名稱、IP 地址/子網的傳入連接。
查看下面的示例。

a) 按名稱或端口號/範圍允許應用程序

ufw allow service-name

或者

ufw allow port/tcp

為了 example

 ufw allow ssh or  ufw allow 22/tcp
 ufw allow ftp or ufw allow 21/tcp

sudo ufw 允許 1500:2000/tcp

b) 允許 IP 地址/子網

下面的命令允許來自特定 IP 或子網的連接,我們也可以使用特定的端口號。
允許來自特定 IP 地址的連接

ufw allow from 10.200.20.45

指定允許連接到特定端口的 IP 運行

ufw allow from 10.200.20.45 to any port 22

以上只允許IP地址10.200.20.45通過ssh連接

要允許特定的 IP 子網連接到系統,請使用 CIDR 表示法指定網絡掩碼

ufw allow from 192.168.1.0/24

以上允許192.168.1到192.168.1.254的IP連接到系統
也可以指定子網的目的端口

ufw allow from 192.168.1.0/24 to any port 22

這意味著從 192.168.1 到 192.168.1.254 的 IP 可以通過 ssh 端口 22 連接到系統。

c) 通過接口名稱允許

如果我們需要允許通過接口名稱連接它可能

ufw allow in on eth0 to any port 80

如何拒絕ufw中的連接

默認情況下,ufw 配置為拒絕所有傳入連接。

a) IP 地址/子網

如果我們想阻止某些特定的 ip 地址訪問,我們可以通過以下命令來做到:

ufw deny from 192.168.1.15

這將阻止來自 IP 地址為 192.168.1.15 的主機的所有傳入連接

接下來讓我們阻止整個子網:

ufw deny from 150.165.125.0/24

這將阻止來自該子網的所有連接。

b) 拒絕端口和應用程序

拒絕端口或服務

ufw deny 80/tcp

或者

ufw deny http

sudo ufw deny 1500:2000/tcp *這將拒絕端口範圍*

刪除和跟踪規則

當您添加許多規則時,您可以通過查看它們的編號來更好地跟踪它們。 您可以通過以下命令獲取數字:

ufw status numbered

輸出

ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22                         ALLOW IN    Anywhere
[ 3] 80/tcp                     ALLOW IN    Anywhere
[ 4] 53/tcp                     ALLOW IN    Anywhere
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 8] 53/tcp (v6)                ALLOW IN    Anywhere (v6)

假設我們要刪除規則編號 2。我們通過以下命令執行此操作:

 ufw delete 2

筆記 :

刪除防火牆中的第二條規則後,規則 3 現在將成為新的規則 2。因此,如果要刪除當前規則 3,請使用編號 2 進行刪除。

 ufw delete allow http

重置規則

如果您對當前規則不滿意,想要重新開始,可以通過運行

ufw reset

記錄和重新加載

要啟用日誌記錄,請使用以下命令:

 ufw logging on

如果由於某種原因(不推薦)要禁用日誌記錄,可以使用以下命令:

sudo ufw 註銷

日誌默認在 /var/log/ufw.log 要實時查看它們,請像這樣使用 tail -f:

tail -f /var/log/ufw.log /pre>

You will see all actions of firewall in that file. If you need to reload firewall for some reason, because you changed some config files manually, use following command.
 ufw reload

如果您想查看最近添加的規則

 ufw show added

UFW 配置文件

對於大多數情況,您可以使用終端命令,但在某些情況下,您可能希望直接編輯配置文件。 ufw 有多個配置文件,即:

/etc/ufw/before.rules
/etc/ufw/before6.rules

這兩個文件包含在您通過 ufw 命令添加的所有規則之前評估的規則。 所以如果你想先應用一些規則,你就希望它在那裡。 第一個文件用於 ipv4,第二個文件用於 v6

/etc/ufw/after.rules
/etc/ufw/after6.rules

這些是在 ufw 命令規則之後評估的。 如果您想覆蓋某些規則並無論如何都應用它,那麼使用它們是很好的。 同樣,兩個文件,用於當前使用的兩個版本的 IP 協議。

/etc/default/ufw

這裡我們有 ufw 使用的內核模塊,以及其他常規設置。 您只能以 root 身份編輯任何此配置文件,並且您可以使用任何您喜歡的文本編輯器。

避免添加重複規則
接下來讓我們觀察針對重複規則的機制。 我們先打開101端口

 sudo ufw allow 100

請注意,上面沒有協議的命令會同時打開 UDP 和 TCP 端口。 所以讓我們再次運行相同的命令看看會發生什麼

 ufw allow 100

輸出

Skipping adding existing rule
Skipping adding existing rule (v6)

它不允許我們添加重複的規則。 這很好,但我們仍然有機會通過這一系列命令添加重複規則:

 ufw allow 101/udp
 ufw allow 101/tcp

在端口 101 上允許 TCP 和 UDP 後,我們仍然可以為所有協議添加開放端口 101,這是一個重複的規則,因為端口 101 被打開兩次,一次為每個協議,一次為所有協議。

ufw allow 101

這為錯誤留下了空間,通常這不是一個好習慣。 如果我們想將 101 端口恢復為默認值,我們需要使用 ufw delete 命令撤消所有三個命令。

要關閉某個端口,您可以運行相同的命令,只是允許,鍵入拒絕。

在本文中,我們介紹了 UFW 的使用,它是一種簡單的防火牆,用於允許或限制流量。 它是一個非常強大的防火牆,用於調節系統流量。 請隨意嘗試系統上的命令。