1. 程式人生 > 其它 >安全乾貨,使用fail2ban避免ssh被暴力破解

安全乾貨,使用fail2ban避免ssh被暴力破解



一、背景

開放到公網的主機無時無刻不在遭受攻擊,其中ssh暴力破解頻率最高,會有無數機器不分日夜地搜尋公網上的獵物,然後進行弱密碼嘗試

如果你的公網機器恰巧設的弱密碼,估計剛裝上系統,沒過幾小時別人就進來動手腳了

當然我們設定的密碼如果夠強,8位以上混合大小寫+數字,是不會被爆破出來的。攻擊者為了效率著想,廣撒網,一般只會對你進行三四千次嘗試,不過攻擊的人會比較多,平均下來你每天也會被攻擊8000次這樣

如何檢視自己有沒有被攻擊呢?看ssh日誌即可

cat /var/log/secure|grep 'Failed password'|wc -l 直接看到你被攻擊過多少次,因為歷史日誌會被自動備份,所以這是你近幾天的量

find /var/log -name 'secure*'|xargs ls -l 檢視所有ssh日誌檔案資訊

cat /var/log/secure|grep 'Failed password'|tail -10 檢視最近10條被攻擊記錄

一般的防禦方法:

  • 密碼設得超強——別人爆破我無所謂,覺得日誌檔案太大看著不舒服再關閉日誌、調整等級

  • 更改埠號,其實無效,攻擊者會埠掃描

  • 禁止root使用者遠端登入,增大破解難度。仍要超級管理員登入可以新增一個和root一樣許可權的使用者,別去改root的使用者名稱,系統軟體會出問題

  • 自己寫指令碼,檢查/var/log/secure 內登入失敗次數超過某個閾值的ip並將它新增到/etc/hosts.deny,檢查secure的頻率要夠高,秒級別的,不然別人都爆破完了指令碼還沒反應過來

  • 寫指令碼難度大可以用別人寫的工具,這裡推薦fail2ban,他除了能防護ssh,還能防護web服務免於目錄爆破,GitHub專案地址



二、fail2ban原理及安裝

fail2ban使用python編寫,原理簡單理解為掃描日誌,發現危害行為,然後去配置防火牆規則,把危險ip給ban掉

官方手冊指出,fail2ban掃描日誌頻率是1s

以centos7為例,預設安裝了python2.7,無需手動安裝。預設防火牆是firewalld,所以安裝的版本應該是fail2ban-firewalld。如果你防火牆是iptables,則安裝fail2ban即可

yum -y install fail2ban-firewalld



三、配置

使用預設配置的話很簡單

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

# 顯示行號
:set nu
# 把23、24行的註釋給去掉,儲存退出
# [sshd]
# enabled = true

到這裡就能啟動了,如果想修改配置,這裡提供一些參考

配置檔案雖然有近千行,但是大部分是註釋,而用於ssh的就幾行

# [DEFAULT] 配置大概從87行開始
#ignoreself = true
#ignoreip = 127.0.0.1/8 ::1
ignorecommand =
# "bantime" is the number of seconds that a host is banned.
bantime  = 10m
# A host is banned if it has generated "maxretry" during the last "findtime        "
# seconds.
findtime  = 10m
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# "maxmatches" is the number of matches stored in ticket (resolvable via ta        g <matches> in actions).
maxmatches = %(maxretry)s

# [sshd] 在280行
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

重要的引數在[DEFAULT]中,意思是掃描日誌檔案的最後findtime(分鐘),發現有maxretry次登入失敗記錄,則把這個ip拉黑bantime(分鐘),時間單位可以是 s、m、h

ignoreip 是白名單,[sshd] 中可以改埠,但沒必要



四、啟動和狀態檢視

啟動、關閉、重啟、狀態、開機自啟:systemctl start|stop|restart|status|enable fail2ban.service

檢視服務具體資訊:

# 檢視fail2ban正守護著哪些服務
fail2ban-client status
# 檢視ssh黑名單
fail2ban-client status sshd

測試規則是否生效:

拿另一臺機器 ssh root@your_ip ,密碼錯誤會提示 Permission denied,ip被ban提示 Connection refused。ssh密碼錯誤會再讓你輸兩次,這其中恰好被ban的話會卡住,ctrl+c即可