Raspberry Pi 筆記(58):系統安全強化(中) 安裝防火牆及Fail2Ban


Linux 有許多可用的防火牆解決方案,大多數使用基礎的 iptables 提供的連線過濾。過去大多使用 iptable的指令來設定,但是 ufw 指令為防火牆的使用者提供一個比較簡單和直覺的操作界面。安裝 ufw 防火牆的指令如下:
$ sudo apt-get install ufw
啟動防火牆
$ sudo ufw enable
如果使用ssh連線,會出現一行詢問的提示:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

回答y後,出現以下訊息:
Firewall is active and enabled on system startup

關閉防火牆指令如下:
$ sudo ufw disable
Firewall stopped and disabled on system startup
查看防火牆狀態,正常會出現 Status: active ,如果沒有啟用防火牆服務,會出現Status: inactive。
$ sudo ufw status
Status: active
預設關閉所有連線,如果沒有特別指名 incoming (連入) / outgoing (連出), ufw 會認為你在對incoming 的連線下規則。
$ sudo ufw default deny
或
$ sudo ufw default deny incoming
如果要允許讓所有人可以對樹莓派連線通過,指令是:
$ sudo ufw default allow

[對服務或連接埠設規則]
指令: ufw <allow/deny> <port>

很直覺的告訴 ufw 通過或拒絕連線某個通訊埠或服務,例如樹莓派提供網頁服務,http 預設是使用 80 port,就可以這樣下指令:
$ sudo ufw allow 80
Rule added
Rule added (v6)
關於 port / serveice 的對應可以參考 /etc/services這個檔案內的描述。
ufw 刪除規則的方法很簡單,就是在原本的規則前面加上 delete (刪除) 這個關鍵字,例如要刪掉外部連線 80 Port的指令:
$ sudo ufw delete allow http
Rule deleted
Rule deleted (v6)
如果要進一步指定 tcp 或 udp 連線的話,指令如下:
$ sudo ufw allow http/tcp
$ sudo ufw allow http/udp
規則預設是外部連接樹莓派時的行為,如果要設定內對外(out)或外對內(in), ufw 可以在 deny / allow 後面接上 in / out 來表示連入或連出。例如你要限制無法從樹莓派 ssh 到其他主機,可以執行以下指令:
$ sudo ufw deny out ssh
Rule added
Rule added (v6)
執行 ufw status看一下執行的結果
$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     DENY OUT    Anywhere
22/tcp (v6)                DENY OUT    Anywhere (v6)
要刪除上述規則,可執行以下指令
$ sudo ufw delete deny out ssh
Rule deleted
Rule deleted (v6)


[對IP設定規則]
指令:ufw allow / deny from / to ip

這裡的 from / to 跟上述的 in / out 有點像,IP的表示是支援網路遮罩的寫法,如 192.168.1.0/24表示整個 C Class網段。例如拒絕 192.168.1.10 這個 IP 連線本機所有 Port
$ sudo ufw deny from 192.168.1.10
如要限定特定 port,可在 IP後面加上 port 及 port號,例如拒絕對這個來源IP使用 ssh 連線:
$ sudo ufw deny from 192.168.1.10 port 22
允許192.168.0 這個 C Class網段的設備連線這部主機:
$ sudo ufw allow from 192.168.0.0/24
另外,可以使用 any這個特定字,表示全部的IP,例如要禁止所有連入的 ssh 連線,可以執行以下指令:
$ sudo ufw deny from any to 192.168.1.10 port 22

[利用編號刪除規則]
可利用參數將 ufw 的規則用編號列出,只要在 ufw status 後面加上 numbered即可。
$ sudo ufw status numbered
Status: active
     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     DENY OUT    Anywhere                   (out)
[ 2] 22/tcp (v6)                DENY OUT    Anywhere (v6)              (out)
如要刪除該編號規則,只要輸入 delete 編號就可以了:
$ sudo ufw delete 2
Deleting:
 deny out 22/tcp
Proceed with operation (y|n)? y
Rule deleted (v6)

[安裝圖形介面防火牆 gufw]
$ sudo apt-get install gufw
執行啟動指令:
$ sudo gufw
可以點選 [Rules] 頁簽,再點選 [Advanced]設定連線IP及Port。


[啟用/停用日誌功能]
日誌啟用後,預設會存在 /var/log/ufw.log檔案中,啟用日誌功能指令如下:
$ sudo ufw logging on
停用日誌功能:
$ sudo ufw logging off
調整日誌紀錄等級:ufw 日誌等級有 low、medium、high、full 四種,預設為 low。low資訊較少,full資訊最多,也站較多硬碟空間。例如,要設定為medium資訊,指令如下:
$ sudo ufw logging medium

[安裝fail2ban]

如果將 Raspberry Pi 當作伺服器( 如ssh或Web Server),防火牆就會開啟對應的連接埠,以提供對應的服務。在這些情況下,Fail2ban可能會有用。Fail2ban 是用 Python 撰寫,用於檢查 Linux 作業系統生成的日誌並檢查這些日誌是否可疑。當有惡意嘗試暴力登入系統時,Fail2ban會通知任何已安裝的防火牆,停止從可疑 IP 位址進一步的嘗試登錄,修改更新防火牆(如 iptable) 規則以防止入侵企圖。

使用以下命令安裝 fail2ban:
$ sudo apt-get install fail2ban
先將jail.conf檔案複製成 jail.local,再開啟編輯器修改
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local
找到 [sshd] 這一段,可以看到以下各項設定:
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

在檔案最後面加上以下幾行:
#啟動fail2ban
enabled  = true

# 允許發生入侵或登入行為時,可以嘗試失敗的次數
maxretry = 3

# 封鎖IP的秒數,設定成 -1時會永久封鎖
bantime = 86400

#搜尋指定日誌的範圍秒數
findtime = 7200

#要收到通知的郵件收件人
destemail = root@localhost

如要啟動 fail2ban,可以使用以下指令:
$ sudo service fail2ban start
如要停止 fail2ban服務,指令如下:
$ sudo service fail2ban stop

繼續閱讀:

[參考資料]


Post a Comment

較新的 較舊