正常機器如果開啟ssh可能會被暴力破解用戶密碼,可以配置ssh的pam限制登錄失敗時可以鎖定用戶一段時間,就算密碼輸入正確也無法登錄,等恢復之后才可以再次進入,對於不同的發行版配置可能略有不同,對於redhat/centos/fedora系統是依賴pam_faillock.so模塊來實現,位置在/usr/lib64/security/pam_faillock.so,對於debian/ubuntu則是依賴pam_tally2.so模塊來實現,debian位置可能在/usr/lib/x86_64-linux-gnu/security/pam_tally2.so,而ubuntu可能在:/lib/x86_64-linux-gnu/security/pam_tally2.so,對於centos 7既有pam_faillock.so又有pam_tally2.so都在/usr/lib64/security下,那么下面是分別對於這兩類系統的配置。
1.pam_faillock redhat/centos/fedora
具體的pam配置在/etc/pam.d下,對ssh服務的位置是:/etc/pam.d/sshd,打開第一行就可以發現引入了password-auth:

然后可以直接編輯/etc/pam.d/password-auth,添加3行內容:

注意上面標出的這3行內容添加的位置,順序不能錯,否則將登錄不上去,最好提前開一個會話不要斷開防止登錄失敗,第一行位置在pam_env.so下面,第二行在sufficient下面,第三行在account required pam_unix.so下面,這3行內容文本如下:
auth required pam_env.so # 添加的第一行 auth required pam_faillock.so preauth silent audit even_deny_root deny=6 unlock_time=180 # .... auth sufficient pam_unix.so nullok try_first_pass # 添加的第二行 auth [default=die] pam_faillock.so authfail audit even_deny_root deny=6 unlock_time=180 # ... account required pam_unix.so # 添加的第三行 account required pam_faillock.so # ...
注意啟動even_deny_root表示對root用戶也適用,否則只有普通用戶有限制,修改完成之后保存並重啟ssh服務生效:
systemctl restart sshd
重啟后可以登錄嘗試,按照上面的限制如果超過6次登錄錯誤會限制用戶180秒,也就是3分鍾,超過3分鍾並且有用戶登錄成功錯誤數會被清零重新計數,使用faillock可以查看登錄失敗的統計信息:
# root用戶
faillock --user root

可以看到存在兩次登錄失敗的記錄,如果此時登錄成功,那么記錄會自動清除,管理員也可以手動reset:
faillock --user root --reset
# 再次查看就沒有了
faillock --user root
這樣被禁用的用戶也可以再次登錄了。
2.pam_tally2 debian/ubuntu
查看/etc/pam.d/sshd內容會看到引入了common-auth:

所以編輯對應的配置:/etc/pam.d/common-auth,直接在最頭部添加下面內容:
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=300
同樣even_deny_root表示root用戶也會限制,后面要單獨配置root_unlock_time,這里都是300秒,可以看到這種方式配置比較簡單,現在保存后,重啟sshd服務即可生效:
systemctl restart sshd
查看登錄失敗統計和清除次數同樣使用下面的命令:
pam_tally2 --user root # 或者簡寫-u pam_tally2 -u root # 清除次數 pam_tally2 --user root --reset
上面的用法和faillock基本上一樣。
另外centos 7.x同時支持faillock和pam_tally2的方式配置,正常只配置1種即可,注意配置的位置都是在/etc/pam.d/password-auth,按照pam_tally2方式配置也是在password-auth中配置,但是只在頭部添加上面這1行內容即可,配置比較簡單。
MaxAuthTries 3
表示最大重試次數為3,超過就會斷開連接,同樣保存后重啟ssh服務即可生效,再次嘗試超過3次連接就會被斷開了:

以上就是ssh安全防護方面常用到的一些配置。
