使用 fail2ban 防 linux ssh 被暴力破解

啊哈??發表於2020-12-28
原文連結:https://www.cpweb.top/1379

一、介紹

  雲伺服器經常被人嘗試暴力破解SSH,即無限嘗試登入SSH,煩人的很。為此,我們可以通過使用 fail2ban 來防範這種行為。fail2ban 是使用python 開發的,它通過監控掃描系統日誌檔案,並從中分析找出多次嘗試登入失敗的IP地址,然後呼叫iptables將其遮蔽掉。當然它不僅僅只限於SSH,還可以防護ftp、pop等密碼保護的網路服務。
  當然對於sshd服務,更有效的方法是直接禁止root使用者登入、更改sshd監聽埠、禁止用密碼方式登入而使用金鑰登入來防範暴力破解。
  官方文件:https://www.fail2ban.org/wiki/index.php/MANUAL_0_8

二、安裝配置

[root@web01 ~]# yum install -y fail2ban
[root@web01 ~]# vim /etc/fail2ban/jail.conf   # 修改以下引數
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1    # 忽略IP列表。
bantime  = 1m                 # 遮蔽的時間,不加單位預設為秒,負數為永久遮蔽。這裡配置為1分鐘便於下面測試
findtime = 1m                 # 如果主機在 findtime 秒內登入失敗 maxretry 次,則該主機將被禁止。
maxretry = 3                  # 最大失敗次數。

[ssh-iptables]
enabled  = true                # 啟動ssh防護
filter   = sshd                # 使用過濾器的名稱,位於filter.d目錄下的sshd.conf。
action   = iptables[name=SSH, port=ssh, protocol=tcp]   # 防火牆動作
logpath  = /var/log/secure     # 日誌檔案路徑,用於提供給過濾器進行分析。
maxretry = 3                   # 最大失敗次數。

[root@web01 ~]# systemctl start fail2ban

  至此就簡單配置好了,我們來測試一下,使用test伺服器(10.0.0.120)進行登入,3次錯誤後,直接被中斷連線了,再次嘗試直接被拒絕。

[root@test ~]# ssh 10.0.0.7
root@10.0.0.7's password: 
Permission denied, please try again.
root@10.0.0.7's password: 
Permission denied, please try again.
root@10.0.0.7's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@test ~]# ssh 10.0.0.7
ssh: connect to host 10.0.0.7 port 22: Connection refused

驗證:

[root@web01 ~]# iptables -nL    # 檢視iptables規則,可以看到10.0.0.120被拒絕
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-SSH    tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain f2b-SSH (1 references)
target     prot opt source               destination         
REJECT     all  --  10.0.0.120           0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0 
    
[root@web01 ~]# tail -n5 /var/log/fail2ban.log      # 檢視日誌,一分鐘後自動解禁。
2020-12-28 09:01:49,174 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:49
2020-12-28 09:01:51,781 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:51
2020-12-28 09:01:54,190 fail2ban.filter         [12586]: INFO    [ssh-iptables] Found 10.0.0.120 - 2020-12-28 09:01:54
2020-12-28 09:01:54,785 fail2ban.actions        [12586]: NOTICE  [ssh-iptables] Ban 10.0.0.120
2020-12-28 09:02:54,927 fail2ban.actions        [12586]: NOTICE  [ssh-iptables] Unban 10.0.0.120

除了檢視日誌,我們還可以使用只帶命令去檢視

[root@web01 ~]# fail2ban-client status  # 獲取伺服器的當前狀態
Status
|- Number of jail:	1
`- Jail list:	ssh-iptables
[root@web01 ~]# fail2ban-client status ssh-iptables  # 獲取 ssh-iptables 的當前狀態
Status for the jail: ssh-iptables
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	3
|  `- File list:	/var/log/secure
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	10.0.0.120

# 我們也可以手動解除對ip限制,Usage:
# fail2ban-client unban --all : 取消禁止所有的ip
# fail2ban-client unban <IP> ... <IP> : 取消禁止指定的ip
# fail2ban-client set <JAIL> unbanip <IP> ... <IP> : 取消禁止指定 JAIL 的指定的ip

[root@web01 ~]# fail2ban-client set ssh-iptables unbanip 10.0.0.120
1

相關文章