使用 fail2ban 防範 sshd 及 vsftpd 密碼暴力破解

sshd 及 vsftpd 除了可用 firewall-cmd 或 iptables 的 –hitcount 參數下指令來防範暴力破解,也可安裝現成的 fail2ban 套件來防範。

一、安裝 fail2ban 套件:
#yum -y install fail2ban

二、建立設定檔:
套件安裝好後,會有預設的 /etc/fail2ban/jail.conf 設定檔,但建議是不要動這個設定檔,要客製設定的部份,可以放到 /etc/fail2ban/jail.d/ 目錄裡面,最好副檔名改為 local。
fail2bin 讀取設定檔的順序是:
jail.conf
jail.d/*.conf (按照字母排序)
jail.local
jail.d/*.local (按照字母排序)
後面的設定檔會覆蓋前面的設定檔,如果設定檔衝突,以最後讀取到的設定為優先。

#vi /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true (啟用此設定,預設是所有 jail 設定都不啟用)
bantime = 1h (阻擋 1 小時,如後面沒有輸入單位,則預設單位為秒)
findtime = 5m (計算 5 分鐘內的錯誤次數)
maxretry = 3 (最大錯誤次數為 3 次)
(其他的部份就套用 jail.conf 裡面的預設即可,可參考 jail.conf 裡面的設定,或 #man jail.conf 看使用說明)

#vi /etc/fail2ban/jail.d/vsftpd
[vsftpd]
enabled = true (啟用此設定)
logpath = %(syslog_authpriv)s (vsftpd 預設的登入錯誤訊息會放在這裡,要改掉)
bantime = 1h (阻擋 1 小時)
findtime = 10m (計算 10 分鐘內的錯誤次數)
maxretry = 5 (最大錯誤次數為 5 次)
(其他的部份就套用 jail.conf 裡面的預設即可,如果全部要套用預設值,那就只要 enabled = true 一行即可)

三、啟動服務及查看狀態:
#systemctl enable fail2ban (服務設定開機啟動)
#systemctl start fail2ban (啟動服務)
#systemctl status fail2ban (查詢服務狀態)
#fail2ban-client status (查詢 jail 狀態)
Status
|- Number of jail: 2
`- Jail list: sshd, vsftpd
(先測試一下連續幾次錯誤登入,可用 #tail -f /var/log/fail2ban.log 來監看服務的偵測錯誤登入狀況)
#fail2ban-client status sshd (查詢 sshd jail 狀態)
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 7
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.247.1
#fail2ban-client status vsftpd (查詢 vsftpd jail 狀態)
Status for the jail: vsftpd
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.247.1
#firewall-cmd --list-all (查詢阻擋方式,它是用 firewall-cmd 的 ruch rules 來做阻擋)
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ftp ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
    rule family="ipv4" source address="192.168.247.1" port port="ftp-data" protocol="tcp" reject type="icmp-port-unreachable"
    rule family="ipv4" source address="192.168.247.1" port port="ftps" protocol="tcp" reject type="icmp-port-unreachable"
    rule family="ipv4" source address="192.168.247.1" port port="ftps-data" protocol="tcp" reject type="icmp-port-unreachable"
    rule family="ipv4" source address="192.168.247.1" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"
    rule family="ipv4" source address="192.168.247.1" port port="ftp" protocol="tcp" reject type="icmp-port-unreachable"

四、視需要列白名單:
#vi /etc/fail2ban/jail.d/ignoreip.local
[DEFAULT]
ignoreip = 192.168.0.0/24 192.168.247.0/24
(永不阻擋的白名單,可接受IP、網段、DNS名稱)