fail2ban 是一套 Linux 安全防護套件,運作的原理是讓使用者設定需要監控的服務,例如:ssh、mysql,這些服務如果有使用者登入失敗,
會如同上面提到的,寫一條登入失敗的資訊到 log,fail2ban 會根據使用者設定去掃描有沒有像下面這種嘗試登入並且登入失敗的記錄
Mar 29 10:56:12 Debian10-Dokuwiki-01 sshd[19562]: Received disconnect from 223.136.61.71 port 47457:11: Normal Shutdown, Thank you for playing [preauth]
Mar 29 10:56:12 Debian10-Dokuwiki-01 sshd[19562]: Disconnected from authenticating user root 223.136.61.71 port 47457 [preauth]
Mar 29 10:56:14 Debian10-Dokuwiki-01 sshd[19566]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=223.136.61.71 user=root
Mar 29 10:56:15 Debian10-Dokuwiki-01 sshd[19566]: Failed password for root from 223.136.61.71 port 16934 ssh2
Mar 29 10:59:03 Debian10-Dokuwiki-01 sshd[19589]: Invalid user debian from 199.83.199.14 port 9054
Mar 29 10:59:03 Debian10-Dokuwiki-01 sshd[19589]: pam_unix(sshd:auth): check pass; user unknown
Mar 29 10:59:03 Debian10-Dokuwiki-01 sshd[19589]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=199.83.199.14
Mar 29 10:59:04 Debian10-Dokuwiki-01 sshd[19589]: Failed password for invalid user debian from 199.83.199.14 port 9054 ssh2
Mar 29 10:59:05 Debian10-Dokuwiki-01 sshd[19589]: Received disconnect from 199.83.199.14 port 9054:11: Bye Bye [preauth]
Mar 29 10:59:05 Debian10-Dokuwiki-01 sshd[19589]: Disconnected from invalid user debian 199.83.199.14 port 9054 [preauth]
Mar 29 10:59:21 Debian10-Dokuwiki-01 sshd[19591]: Did not receive identification string from 222.188.89.146 port 48546
使用者可以設定在一段時間內,嘗試登入但發生錯誤幾次,就先把這個 IP 進行封鎖一段時間,這樣應該不難理解,這些設定必須要根據自己的使用情況來設定。
安裝 fail2ban
apt-get update
apt-get install fail2ban
# 重新啟動
service fail2ban stop
service fail2ban start
直接安裝完就會以預設值來啟動,這樣就有基本的防護功能。
修改設定檔
# 先備份一份原始設定
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 編輯設定
vim /etc/fail2ban/jail.conf
#
# 將自己常用網路加入白名單 以免誤檔到自己
[DEFAULT]
ignoreip = 127.0.0.1/8 xxx.xxx.xxx.0/24 xxx.xxx.xxx.0/24
# 說明
bantime = 改成自己要的秒數,如果被 ban 要多久才能
findtime = 改成自己要的秒數,掃描區間
maxretry = 3 改成自己可以允許被 try 幾次
destemail = 改成自己要收到信的 email
# ssh 服務設定區塊
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
# 重新啟動
service fail2ban stop
service fail2ban start
根據 手冊, 客製設定應該寫在 /etc/fail2ban/jail.local 裡面。 這個檔裡面沒提到的, 就用 /etc/fail2ban/jail.conf 的預設值。
所以 不必 把整個 jail.conf 複製到 jail.local。 貼入短短幾句即可:
[DEFAULT]
ignoreip = 127.0.0.1/8 999.999.999.0/24 888.888.888.0/24
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
# backend = systemd
maxretry = 5
findtime = 600
bantime = 1200
其中 ignoreip 那句是白名單 -- 這些好朋友不論怎麼攻擊你的伺服器, 都還是一律放行 :-) 而 [sshd] 那一節是從 /etc/fail2ban/jail.conf 裡面抄過來改的。 也就是說,
即使沒有在 jail.local 裡面加上這一節, sshd 本來預設就會受到保護。 上面表示要求 fail2ban 定時檢查 /var/log/auth.log , 如果在 10 分鐘內 (findtime) 發現同一 IP 企圖連線 5 次 (maxRetry),
就把這個 IP 封鎖 20 分鐘 (banTime)。 改好之後重新啟動: service fail2ban restart
注意: 在採用 systemd 的系統上, 請把 logpath 註解掉, 改用 backend = systemd。 重新啟動的指令則改成 systemctl restart fail2ban 詳見
二、 測試確認
使用 fail2ban-client status 指令確認目前服務是否啟動
應該會看到 jail list 清單裡已經出現了 sshd, 表示目前已有 sshd 一個服務受到 fail2ban 的保護。
三、 查看及解鎖
用 fail2ban-client status ssh 查看一下目前有哪些 IP 被封鎖、 過去總共有多少 IP 被封鎖。
如果把自己的 X 鎖住了... 歐歐~~ 希望你還能夠從 Y 登入 Z。 然後下: iptables -L --line-numbers 查出 「想刪除的規則的序號」 nn, 再用 iptables -D fail2ban-ssh nn 刪除那條規則。
注意 1: 小心別刪到 fail2ban-ssh 自己的通則。 萬一刪到了, 就 service fail2ban restart 重新啟動吧。
注意 2: 刪除一條規則之後, 下面的會遞補上來, 所以後面的規則序號都會減
沒有留言:
張貼留言