日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)講解SSH暴力破解的防御手段

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-05-12 09:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

問題背景

只要服務(wù)器暴露在公網(wǎng)上,SSH 端口掃描和暴力破解幾乎是必然發(fā)生的。筆者的測試環(huán)境服務(wù)器,上線第一天就收到了暴力破解告警——日志里充滿了來自全球各地的破解嘗試,目標賬號從 root 到 admin 到 test 到 oracle,無所不包。

暴力破解的原理很簡單:攻擊者用自動化工具,遍歷常見用戶名和密碼字典,嘗試登錄 SSH 服務(wù)。由于很多運維工程師習(xí)慣使用弱密碼(如 root/123456、admin/admin),攻擊者總有成功的機會。一旦成功,攻擊者就會在服務(wù)器上植入后門、挖礦程序,或以此為跳板攻擊內(nèi)網(wǎng)其他機器。

這篇文章面向初中級 Linux 運維工程師,系統(tǒng)講解 SSH 暴力破解的防御手段,從密碼策略、公鑰認證、fail2ban、端口偽裝到入侵檢測,逐層加防。每種手段都有具體的配置步驟和驗證方法。

第一步:知己知彼——查看攻擊日志

在動手加固之前,先看看攻擊者的"工作成果"。

1.1 查看 SSH 登錄失敗記錄

# CentOS/RHEL:查看 secure 日志
sudo tail -500 /var/log/secure | grep -i"failed password"

# Ubuntu/Debian:查看 auth 日志
sudo tail -500 /var/log/auth.log | grep -i"failed password"

1.2 統(tǒng)計攻擊者 IP 和嘗試次數(shù)

# 從日志中提取攻擊者 IP 并統(tǒng)計次數(shù)
# CentOS
sudo grep"Failed password"/var/log/secure | awk'{print $11}'| sort | uniq -c | sort -rn | head -20

# Ubuntu
sudo grep"Failed password"/var/log/auth.log | awk'{print $11}'| sort | uniq -c | sort -rn | head -20

# 如果有公鑰認證失敗的記錄
sudo grep"Publickey"/var/log/auth.log | grep"Failed"| awk'{print $11}'| sort | uniq -c | sort -rn | head -10

1.3 統(tǒng)計被攻擊的目標賬號

# 查看哪些賬號被嘗試登錄
# CentOS
sudo grep"Failed password"/var/log/secure | awk'{print $9}'| sort | uniq -c | sort -rn | head -20

# Ubuntu
sudo grep"Failed password"/var/log/auth.log | awk'{print $9}'| sort | uniq -c | sort -rn | head -20

1.4 查看是否有成功的登錄

# 查看成功的 SSH 登錄
# CentOS
sudo grep"Accepted"/var/log/secure | awk'{print $9, $11, $13}'
# Ubuntu
sudo grep"Accepted"/var/log/auth.log | awk'{print $9, $11, $13}'

# 查看最近一次成功登錄的時間和來源
# CentOS
sudo last | head -20
# Ubuntu
sudo last | head -20

# 查看 root 登錄記錄
sudo last root | head -10

# 如果發(fā)現(xiàn)陌生 IP 的成功登錄記錄,需要立即排查

1.5 查看攻擊者常用賬號字典

從日志中可以看到,攻擊者會嘗試的常見用戶名包括:

root, admin, user,test, guest, oracle, mysql, postgres, ubuntu, centos, debian, www-data, apache, nginx, tomcat, redis, mongodb, postgres, backup, ftp, nagios

結(jié)論:如果你的服務(wù)器上有這些賬號且使用弱密碼,基本等于門戶大開。

第二步:最徹底的防御——禁用密碼登錄,改用公鑰認證

2.1 原理

密碼認證的缺陷:

密碼可以被猜測、暴力破解

密碼可以被鍵盤記錄器、釣魚網(wǎng)站竊取

弱密碼(123456、password、admin)幾乎是秒破

公鑰認證的優(yōu)勢:

基于非對稱加密,無法被暴力破解

私鑰文件即使泄露,也通常有 passphrase 保護

除非攻擊者拿到了你的私鑰文件,否則無法登錄

2.2 生成 SSH 密鑰對

# 在你的本地電腦(不是服務(wù)器)上執(zhí)行
# Windows: 使用 PowerShell 或 Git Bash
# macOS/Linux: 使用 Terminal

ssh-keygen -t ed25519 -C"your_email@example.com"
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/username/.ssh/id_ed25519):
# 直接回車使用默認路徑
# Enter passphrase (empty for no passphrase): 輸入一個強密碼
# Enter same passphrase again: 確認密碼

# 如果服務(wù)器不支持 ed25519(很老的系統(tǒng)),使用 RSA
ssh-keygen -t rsa -b 4096 -C"your_email@example.com"

2.3 將公鑰上傳到服務(wù)器

# 方法一:使用 ssh-copy-id(最簡單)
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@

# 方法二:手動復(fù)制
# 先用密碼登錄一次(最后一次)
cat ~/.ssh/id_ed25519.pub
# 復(fù)制輸出的內(nèi)容

# 在服務(wù)器的 ~/.ssh/authorized_keys 文件中添加這一行
ssh admin@
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo"">> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 驗證
exit

2.4 修改 SSH 配置禁用密碼登錄

# 編輯 SSH 配置文件
sudo vi /etc/ssh/sshd_config

# 確保以下配置存在且未被注釋:
# 啟用公鑰認證
PubkeyAuthentication yes

# 禁用密碼認證
PasswordAuthentication no

# 禁用空密碼登錄
PermitEmptyPasswords no

# 禁用 challenge-response 認證(也會繞開密碼)
ChallengeResponseAuthentication no

# 確保 UsePAM 是 yes(Ubuntu 默認)
UsePAM yes

2.5 重啟 SSH 服務(wù)并驗證

# 重啟 SSH 服務(wù)
sudo systemctl restart sshd

#  重要:在退出當前 session 前,先測試新登錄方式是否正常
# 新開一個終端,不要關(guān)閉當前 session,執(zhí)行:
ssh -i ~/.ssh/id_ed25519 admin@

2.6 驗證配置是否生效

# 在本地測試:用密碼登錄應(yīng)該被拒絕
ssh admin@
# 輸入密碼后應(yīng)該看到:
# Permission denied (publickey,password).

# 用公鑰登錄應(yīng)該成功
ssh -i ~/.ssh/id_ed25519 admin@
# 應(yīng)該不需要輸入密碼即可登錄

# 在服務(wù)器上查看日志(如果有失敗嘗試,說明配置可能有問題)
sudo tail -20 /var/log/secure | grep sshd

第三步:fail2ban 自動封禁攻擊者 IP

即使使用了公鑰認證,fail2ban 仍然是必要的防護工具,因為:

服務(wù)器上可能還有使用密碼認證的服務(wù)(如 Web 后臺、數(shù)據(jù)庫管理界面)

fail2ban 可以防止 DDoS、掃描等行為

減少攻擊流量,保護系統(tǒng)資源

3.1 fail2ban 工作原理

fail2ban 通過監(jiān)控日志文件,發(fā)現(xiàn)短時間內(nèi)多次登錄失敗的 IP,自動將其加入防火墻規(guī)則封禁。封禁時間可配置,到期后自動解封。

3.2 安裝 fail2ban

# CentOS/RHEL(需要 EPEL 源)
sudo yum install -y epel-release
sudo yum install -y fail2ban

# Ubuntu/Debian
sudo apt-get install -y fail2ban

3.3 配置 fail2ban

fail2ban 的配置分為兩部分:jail.conf(默認配置)和jail.local(用戶自定義配置,優(yōu)先級更高)。不要修改 jail.conf,直接在 jail.local 中覆蓋。

# 創(chuàng)建 jail.local 配置文件
sudo vi /etc/fail2ban/jail.local

# 添加以下內(nèi)容:
[DEFAULT]
# 封禁 IP 的時間(秒),3600 = 1 小時
bantime = 3600

# 時間窗口(秒),600 = 10 分鐘內(nèi)
findtime = 600

# 最大失敗次數(shù),超過這個次數(shù)就封禁
maxretry = 5

# 封禁動作(iptables 是默認)
banaction = iptables-multiport

# 忽略自己的 IP(把運維人員的 IP 加進去,防止把自己封了)
ignoreip = 127.0.0.1/8 ::1 192.168.1.100 10.0.0.50

# SSH 防護配置
[sshd]
enabled =true
# SSH 端口
port = ssh
# 日志文件(CentOS)
logpath = /var/log/secure
# 日志文件(Ubuntu)
# logpath = /var/log/auth.log
# 過濾規(guī)則(在 filter.d/sshd.conf 中定義)
filter = sshd
# 最大重試次數(shù)(覆蓋 DEFAULT)
maxretry = 3

# 如果 SSH 使用非標準端口,修改 port
# port = 2222

# Apache/Nginx 防暴力破解(可選)
[apache-auth]
enabled =true
port = http,https
logpath = /var/log/httpd/ssl_error_ssl_log
maxretry = 3

3.4 啟動并啟用 fail2ban

# 啟動 fail2ban
sudo systemctl start fail2ban

# 設(shè)置開機自啟動
sudo systemctlenablefail2ban

# 查看狀態(tài)
sudo systemctl status fail2ban

3.5 驗證 fail2ban 是否工作

# 查看 fail2ban 狀態(tài)
sudo fail2ban-client status

# 查看 SSH 防護狀態(tài)
sudo fail2ban-client status sshd

# 輸出示例:
# Status for the jail: sshd
# |- Filter
# | |- Currently failed: 3
# | |- Total failed: 150
# | `- File list: /var/log/secure
# `- Actions
#  |- Currently banned: 2
#  |- Total banned: 15
#  `- Banned IP list: 23.45.67.89 203.0.113.5

# 查看被封禁的 IP
sudo iptables -L f2b-sshd -n

# 如果看到 IP 列表,說明 fail2ban 正在工作

3.6 手動測試 fail2ban

注意:測試前確認你的 IP 不在 ignoreip 列表中,否則會被放行

# 從另一臺機器(或手機)故意輸錯密碼 3 次
# 應(yīng)該被封禁 1 小時

# 查看是否被封禁
sudo iptables -L f2b-sshd -n

# 如果被封禁了,查看封禁狀態(tài)
sudo fail2ban-client status sshd

# 解封某個 IP(如果誤封了自己)
sudo fail2ban-clientsetsshd unbanip 

# 解封所有 IP(緊急情況)
sudo fail2ban-client unban --all

3.7 fail2ban 配置進階

# 配置郵件通知(當 IP 被封禁時發(fā)送郵件)
# 在 jail.local 中添加:
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s
# action_mwl:封禁 + 發(fā)送郵件(包含日志)
# action_: 只封禁,不發(fā)郵件

# 配置更嚴格的 SSH 防護:5 分鐘內(nèi) 2 次失敗就封禁
[sshd]
enabled =true
port = ssh
logpath = /var/log/secure
filter = sshd
findtime = 300 # 5 分鐘
maxretry = 2  # 2 次失敗就封禁
bantime = 7200 # 封禁 2 小時

# 配置 fail2ban 的日志級別(調(diào)試用)
# 編輯 /etc/fail2ban/fail2ban.conf
[Definition]
loglevel = DEBUG

# 重啟 fail2ban
sudo systemctl restart fail2ban

第四步:修改 SSH 默認端口

SSH 默認監(jiān)聽 22 端口,所有的暴力破解掃描器都會首先掃描 22 端口。改成非標準端口可以減少大量的無效掃描。

4.1 修改 SSH 端口

# 1. 編輯 SSH 配置
sudo vi /etc/ssh/sshd_config

# 找到#Port22,改為非標準端口(如 2222)
Port 2222

# 2. 確保防火墻/安全組已開放新端口
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

# Ubuntu (ufw)
sudo ufw allow 2222/tcp

# 3. 重啟 SSH
sudo systemctl restart sshd

# 4. 驗證:新端口應(yīng)該能登錄
ssh -p 2222 admin@

# 5. 確認舊端口不再監(jiān)聽
sudo ss -tunapl | grep :22

4.2 注意事項

# 如果使用了 SELinux,需要額外配置
# CentOS with SELinux enabled
sudo yum install -y policycoreutils-python
sudo semanage port -a -t ssh_port_t -p tcp 2222

# 如果使用了 firewalld,已經(jīng)在第 2 步開放了端口

# 如果使用了 iptables,直接添加規(guī)則
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 注意:云服務(wù)器的安全組也需要同步修改新端口

第五步:限制 SSH 來源 IP

5.1 使用 iptables 限制來源 IP

# 只允許特定 IP 訪問 SSH
# 先清除現(xiàn)有的 SSH 規(guī)則(如果有)
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

# 添加只允許特定 IP 的規(guī)則
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 2222 -j ACCEPT

# 如果有多個運維 IP
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2222 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 2222 -j ACCEPT

# 保存規(guī)則
sudo iptables-save > /etc/sysconfig/iptables

5.2 使用 firewalld 限制來源 IP

# 使用 rich rule 限制來源 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="2222" protocol="tcp" accept'

# 限制 IP 段
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2222" protocol="tcp" accept'

# 重新加載
sudo firewall-cmd --reload

# 查看規(guī)則
sudo firewall-cmd --list-rich-rules

5.3 使用 ufw 限制來源 IP

# 只允許特定 IP 訪問 SSH
sudo ufw allow from 192.168.1.100 to any port 2222

# 允許 IP 段
sudo ufw allow from 192.168.1.0/24 to any port 2222

# 查看規(guī)則
sudo ufw status numbered

第六步:使用雙因素認證(2FA)

公鑰認證 + 密碼認證 + 2FA,是目前最強的 SSH 登錄防護。即使攻擊者拿到了你的私鑰和密碼,沒有手機上的驗證碼也無法登錄。

6.1 安裝 Google Authenticator PAM 模塊

# CentOS/RHEL
sudo yum install -y google-authenticator

# Ubuntu/Debian
sudo apt-get install -y libpam-google-authenticator

# macOS(如果你用 mac 作為 SSH 客戶端需要驗證)
brew install google-authenticator-libpam

6.2 為用戶配置 2FA

# 切換到需要配置 2FA 的用戶
su - admin

# 運行配置向?qū)?google-authenticator

# 交互式問答:
# Do you want authentication tokens to be time-based? (y/n)
# → y

# 會顯示一個二維碼,用 Google Authenticator 或 Authy 掃描
# (也可以手動輸入底部的密鑰)

# Save the ~/.google_authenticator file? (y/n)
# → y

# By default, a new token is generated every 30 seconds.
# Do you want to disallow multiple uses of the same authentication token?
# This limits you to one login about every 30 seconds, but it is useful
# if you might get your secret phrase stolen.
# → y (同一個 token 只能用一次,防止中間人重放攻擊)

# By default, tokens are good for 30 seconds. To compensate for possible
# time-skew between the client and the server, we allow an extra token
# before and after the current time.
# Do you want to do so? (y/n)
# → y (允許 1 分鐘的時間窗口,防止手機時間不準)

# If the computer that you are logging into is not hardened enough to
# allow for short timeouts, you should add an external rule in
# addition to rate-limiting the max number of login attempts.
# Do you want to enable the short unlock timeout? (y/n)
# → n

# Enable login count limit? (y/n)
# → y (限制最大嘗試次數(shù))

6.3 配置 SSH 使用 PAM 認證

# 編輯 SSH 配置
sudo vi /etc/ssh/sshd_config

# 添加/修改:
# 啟用 challenge-response 認證(用于 PAM)
ChallengeResponseAuthentication yes

# 確保公鑰認證仍然開啟
PubkeyAuthentication yes

# 重啟 SSH
sudo systemctl restart sshd

6.4 編輯 PAM 配置啟用 Google Authenticator

# 編輯 PAM 的 sshd 配置
sudo vi /etc/pam.d/sshd

# 在第一行(auth    include  password-auth)之前或之后添加:
auth    required   pam_google_authenticator.so nullok
# nullok 參數(shù):允許沒有配置 2FA 的用戶仍然可以用密碼登錄

# 如果是 Ubuntu,可能是:
# auth required pam_google_authenticator.so nullok

6.5 測試 2FA

# 用 SSH 測試
ssh admin@

# 應(yīng)該看到:
# Verification code:
# Password:

# 輸入 Google Authenticator 顯示的驗證碼
# 如果配置正確,應(yīng)該能登錄

第七步:入侵檢測——發(fā)現(xiàn)攻擊痕跡

7.1 使用 OSSEC 檢測暴力破解

OSSEC 是一個開源的主機入侵檢測系統(tǒng)(HIDS),可以檢測 SSH 暴力破解、文件篡改、Rootkit 等。

# 安裝(CentOS)
sudo yum install -y ossec-hids

# 安裝(Ubuntu)
sudo apt-get install -y ossec-hids

# OSSEC 配置后可以自動封禁攻擊 IP,無需單獨配置 fail2ban

7.2 常用入侵檢測命令

# 檢查是否有用戶被添加
cat /etc/passwd | grep -E"test|hack|backup"

# 檢查是否有新增的 SSH 公鑰
cat ~/.ssh/authorized_keys | head -10

# 檢查最近執(zhí)行的命令
history

# 檢查是否有新的 cron 任務(wù)
sudo crontab -l
sudo cat /var/spool/cron/root

# 檢查是否有異常的網(wǎng)絡(luò)連接
ss -tunapl | grep ESTABLISHED

# 檢查是否有異常進程
ps aux | grep -iE"xmrig|miner|kinsing|kworkerds|illegal"

第八步:綜合防御方案

8.1 推薦的安全加固配置

最小安全方案(適合大多數(shù)場景):

公鑰認證,禁用密碼登錄

fail2ban 自動封禁

SSH 端口改為非標準端口

只允許特定 IP 訪問 SSH

高安全方案(適合核心服務(wù)器):

公鑰認證 + 2FA 雙因素認證

fail2ban 自動封禁

SSH 端口改為非標準端口

只允許特定 IP 訪問 SSH

使用 OSSEC 做入侵檢測

所有 SSH 登錄觸發(fā)郵件告警

8.2 完整配置腳本

#!/bin/bash
# save as: ssh_security_hardening.sh
#  執(zhí)行前確保你有 VNC/ILO 等備用登錄方式

set-e

echo"===== SSH 安全加固 ====="

# 1. 修改 SSH 端口
SSH_PORT=2222

# 2. 安裝 fail2ban
ifcommand-v yum &> /dev/null;then
  sudo yum install -y epel-release
  sudo yum install -y fail2ban
elifcommand-v apt-get &> /dev/null;then
  sudo apt-get install -y fail2ban
fi

# 3. 配置 fail2ban jail.local
sudo tee /etc/fail2ban/jail.local > /dev/null < /dev/null < /dev/null;then
  sudo firewall-cmd --permanent --add-port=${SSH_PORT}/tcp
 # 允許運維 IP(請?zhí)鎿Q為你的 IP)
 # sudo firewall-cmd --permanent --add-source=/32
  sudo firewall-cmd --reload
fi

echo"SSH 安全加固完成!"
echo"SSH 端口已改為:$SSH_PORT"
echo"請用新端口登錄測試:ssh -p$SSH_PORTadmin@"

總結(jié)

SSH 暴力破解是持續(xù)性的安全威脅,但完全可以通過合理的配置防御。推薦的防御優(yōu)先級:

必須做(阻斷最常見的攻擊):

禁用密碼登錄,改用公鑰認證—— 這是最徹底的手段,密碼登錄關(guān)閉后,暴力破解毫無意義

配置 fail2ban—— 自動封禁頻繁登錄失敗的 IP,即使攻擊者拿到密碼也會被封

強烈推薦(進一步減少攻擊面):

修改 SSH 默認端口—— 減少 90%+ 的掃描流量,降低日志噪音

限制 SSH 來源 IP—— 只允許運維 IP 訪問,徹底阻斷外部掃描

可選(高安全場景):

雙因素認證(2FA)—— 即使私鑰泄露,攻擊者仍無法登錄

入侵檢測系統(tǒng)(OSSEC)—— 發(fā)現(xiàn)異常行為,主動告警

防御的核心原則:縱深防御,單一手段可能被繞過,但多層疊加后攻擊成本會極高。

第九節(jié):日常運維安全檢查清單

安全加固不是一勞永逸的事情。配置完成后,還需要建立日常安全巡檢機制,持續(xù)監(jiān)控安全狀態(tài)。

9.1 每日安全巡檢腳本

#!/bin/bash
# save as: ssh_security_daily_check.sh
# 配置 cron: 0 9 * * * /usr/local/bin/ssh_security_daily_check.sh

LOG_FILE="/var/log/ssh_security_check.log"
ALERT_EMAIL="admin@example.com"

echo"===== SSH 安全巡檢$(date)=====">>$LOG_FILE

# 1. 檢查 fail2ban 是否運行
FAIL2BAN_STATUS=$(systemctl is-active fail2ban 2>/dev/null)
if["$FAIL2BAN_STATUS"!="active"];then
 echo"[ALERT] fail2ban 未運行!"| tee -a$LOG_FILE
 echo"請立即檢查:systemctl status fail2ban"| tee -a$LOG_FILE
fi

# 2. 檢查最近 SSH 登錄失敗次數(shù)
FAILED_COUNT=$(grep"Failed password"/var/log/secure 2>/dev/null | wc -l)
echo"SSH 登錄失敗總數(shù):$FAILED_COUNT">>$LOG_FILE

# 3. 檢查是否有成功的陌生 IP 登錄
KNOWN_IPS="192.168.1.100 10.0.0.50"
ACCEPTED_LOGINS=$(grep"Accepted"/var/log/secure 2>/dev/null)
foripin$KNOWN_IPS;do
  ACCEPTED_LOGINS=$(echo"$ACCEPTED_LOGINS"| grep -v"$ip")
done

if[ -n"$ACCEPTED_LOGINS"];then
 echo"[ALERT] 發(fā)現(xiàn)未知來源的成功登錄!"| tee -a$LOG_FILE
 echo"$ACCEPTED_LOGINS"| tee -a$LOG_FILE
 echo"$ACCEPTED_LOGINS"| mail -s"SSH 未知登錄告警"$ALERT_EMAIL
fi

# 4. 檢查 SSH 配置是否有被動過的痕跡
SSHD_CONFIG_MD5=$(md5sum /etc/ssh/sshd_config | awk'{print $1}')
SSHD_CONFIG_MD5_SAVED="<之前記錄的md5值>"
if["$SSHD_CONFIG_MD5"!="$SSHD_CONFIG_MD5_SAVED"];then
 echo"[ALERT] sshd_config 文件被修改!"| tee -a$LOG_FILE
fi

# 5. 檢查 authorized_keys 是否有新增項
KNOWN_KEYS_COUNT=<之前記錄的key數(shù)量>
CURRENT_KEYS_COUNT=$(wc -l /root/.ssh/authorized_keys 2>/dev/null | awk'{print $1}')
if["$CURRENT_KEYS_COUNT"-gt"$KNOWN_KEYS_COUNT"];then
 echo"[ALERT] authorized_keys 有新增公鑰!"| tee -a$LOG_FILE
fi

# 6. 檢查被封禁的 IP 數(shù)量
BANNED_IP_COUNT=$(sudo fail2ban-client status sshd | grep"Banned IP"| awk'{print $4}')
echo"當前被封禁 IP 數(shù)量:$BANNED_IP_COUNT">>$LOG_FILE

# 如果被封禁 IP 數(shù)量異常高(如超過 100),說明正在遭受攻擊
if["$BANNED_IP_COUNT"-gt 100 ];then
 echo"[ALERT] 被封禁 IP 數(shù)量異常:$BANNED_IP_COUNT"| tee -a$LOG_FILE
fi

echo"">>$LOG_FILE

9.2 每周安全審計

#!/bin/bash
# save as: ssh_security_weekly_audit.sh
# 配置 cron: 0 3 * * 0 /usr/local/bin/ssh_security_weekly_audit.sh

# 1. 統(tǒng)計本周 SSH 暴力破解統(tǒng)計
echo"===== SSH 暴力破解周報 ====="
echo"統(tǒng)計時間范圍:$(date -d '7 days ago' +%Y-%m-%d)至$(date +%Y-%m-%d)"

# 統(tǒng)計來源 IP 分布
echo""
echo"[ 來源 IP TOP 20 ]"
grep"Failed password"/var/log/secure -m 10000 | awk'{print $11}'| sort | uniq -c | sort -rn | head -20

# 統(tǒng)計被嘗試的用戶名
echo""
echo"[ 被嘗試的用戶名 TOP 20 ]"
grep"Failed password"/var/log/secure -m 10000 | awk'{print $9}'| sort | uniq -c | sort -rn | head -20

# 統(tǒng)計總失敗次數(shù)
TOTAL_FAILED=$(grep"Failed password"/var/log/secure -m 10000 | wc -l)
echo""
echo"本周登錄失敗總次數(shù):$TOTAL_FAILED"

# 2. 統(tǒng)計 fail2ban 封禁情況
BANNED_IPS=$(sudo iptables -L f2b-sshd -n | grep"REJECT"| awk'{print $4}'| sort | uniq | wc -l)
echo"本周 fail2ban 新封禁 IP 數(shù):$BANNED_IPS"

# 3. 審計 authorized_keys 變更
echo""
echo"[ authorized_keys 變更審計 ]"
if[ -f /root/.ssh/authorized_keys ];then
 echo"當前公鑰數(shù)量:$(wc -l < /root/.ssh/authorized_keys)"
? ??echo?"最近修改時間:?$(stat -c %y /root/.ssh/authorized_keys)"
fi

# 4. 審計新創(chuàng)建的用戶賬號
echo?""
echo?"[ 本周新建賬號審計 ]"
lastlog -b 7 | grep -v?"Never"?| tail -20

9.3 SSH 安全配置基線文檔

每次安全配置變更后,建議更新配置基線文檔,方便后續(xù)審計和交接:

SSH 安全配置基線(版本:v1.0,日期:2026-04-29)

一、服務(wù)配置
- SSH 端口:2222(非標準端口)
- SSH 協(xié)議版本:2(默認)
- 公鑰認證:啟用
- 密碼認證:禁用
- 空密碼登錄:禁用
- Root 登錄:禁用
- X11Forwarding:禁用
- AllowTcpForwarding:禁用

二、訪問控制
- 允許登錄的用戶:admin, deploy
- 允許登錄的 IP 段:192.168.1.0/24, 10.0.0.0/8
- fail2ban:啟用,封禁時間 1 小時,最多 3 次嘗試

三、審計日志
- SSH 登錄日志:/var/log/secure
- 日志保留:90 天
- 集中日志服務(wù)器:log-server-ip

四、維護記錄
- 2026-04-29:初始加固,修改端口、啟用 fail2ban、配置公鑰認證
- 2026-04-30:配置 IP 白名單

五、運維聯(lián)系人
- 運維負責(zé)人:張工 138xxxx
- 安全負責(zé)人:李工 139xxxx

9.4 應(yīng)急響應(yīng)流程——發(fā)現(xiàn) SSH 被入侵后怎么辦

當日常巡檢發(fā)現(xiàn) SSH 被入侵時,按以下流程處置:

階段一:確認(5 分鐘內(nèi))
1. 查看 last 命令,確認是否有陌生 IP 登錄記錄
2. 查看 /var/log/secure,確認登錄時間和來源 IP
3. 查看 /root/.bash_history,確認攻擊者執(zhí)行過哪些命令
4. 查看 /root/.ssh/authorized_keys,確認是否有后門公鑰

階段二:止血(15 分鐘內(nèi))
1. 斷開攻擊者連接:pkill -kill-t 
2. 封鎖攻擊者 IP:iptables -I INPUT -s  -j DROP
3. 修改所有可能泄露的密碼
4. 如果無法確認攻擊路徑,先關(guān)閉 SSH(systemctl stop sshd)

階段三:排查
1. 查看攻擊者使用的賬號和密碼(如果密碼登錄被禁,可能是公鑰入侵)
2. 查看攻擊者在系統(tǒng)中執(zhí)行了哪些操作
3. 檢查是否有植入后門(cron、SSH authorized_keys、systemd service)
4. 檢查是否有橫向移動(攻擊內(nèi)網(wǎng)其他機器)

階段四:修復(fù)
1. 刪除攻擊者植入的所有后門
2. 如果系統(tǒng)被嚴重入侵,建議重裝系統(tǒng)
3. 重新配置 SSH 安全加固
4. 從備份恢復(fù)被篡改的文件

階段五:復(fù)盤
1. 輸出完整的事件報告
2. 分析攻擊路徑,更新安全加固方案
3. 補充監(jiān)控告警規(guī)則

最后提醒:任何安全配置變更前,都要確保有備用登錄方式(VNC/ILO/云控制臺)。最悲慘的情況不是被攻擊,而是被自己的防火墻規(guī)則擋在外面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11839

    瀏覽量

    219689
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10399

    瀏覽量

    91801

原文標題:SSH 暴力破解頻繁?這幾種防護手段必須配置

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    labview密碼破解

    求助,軟件是去年改過的不知道誰設(shè)置了密碼,都說不知道。暴力破解字典實在太大。速度太慢,故求幫助~~PS :網(wǎng)上說的MD5破解,試了下也沒成。大神們,求交流~~
    發(fā)表于 01-19 23:37

    labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試

    labview如何寫暴力破解密碼 密碼4位數(shù) 由1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 如何每次讀取一個數(shù)進行測試完成后進行下一個測試
    發(fā)表于 02-17 09:46

    何為暴力破解

    ps:代碼復(fù)制黏貼即可,有什么問題下方留言,博主會及時回復(fù) !工具:1:筆記本2:USB無線網(wǎng)卡(必備)3:kali系統(tǒng)4:靠譜字典暴力破解法:何為暴力破解呢,其實就是一個一個密碼試,直到正確的密碼
    發(fā)表于 07-15 09:46

    802.11b安全防御手段

    802.11b(靜態(tài)WEP+11MB傳輸速度)下各層防御手段由于802.11協(xié)議集是基于物理層與數(shù)據(jù)鏈路層作整合的,因此針對其安全的主要問題大多都是基于此兩層的。以下是通過對802.11b進行風(fēng)
    發(fā)表于 08-04 16:02 ?18次下載

    對目前流行的ssh密碼暴力破解工具進行實戰(zhàn)研究、分析和總結(jié)

    對于Linux操作系統(tǒng)來說,一般通過VNC、Teamviewer和SSH等工具來進行遠程管理,SSH是 Secure Shell的縮寫,由IETF的網(wǎng)絡(luò)小組(Network Working
    的頭像 發(fā)表于 01-29 15:10 ?5.6w次閱讀
    對目前流行的<b class='flag-5'>ssh</b>密碼<b class='flag-5'>暴力破解</b>工具進行實戰(zhàn)研究、分析和總結(jié)

    常見的網(wǎng)絡(luò)攻擊手段都有哪些,我們該如何采取防御措施

    網(wǎng)絡(luò)攻擊中,例如常見的Web攻擊、XSS攻擊、SQL注入、CSRF攻擊以及它們的防御手段,都是針對代碼或系統(tǒng)本身發(fā)生的攻擊,另外還有一些攻擊方式發(fā)生在網(wǎng)絡(luò)層或者潛在的攻擊漏洞這里總結(jié)一下。
    發(fā)表于 12-02 14:31 ?1.1w次閱讀

    字符串硬核暴力破解講解

    1 暴力破解法 在主串A中查找模式串B的出現(xiàn)位置,其中如果A的長度是n,B的長度是m,則n 》 m。當我們暴力匹配時,在主串A中匹配起始位置分別是 0、1、2….n-m 且長度為 m 的 n-m+1
    的頭像 發(fā)表于 04-04 11:50 ?3928次閱讀
    字符串硬核<b class='flag-5'>暴力破解</b>法<b class='flag-5'>講解</b>

    IP知識百科之暴力破解

    暴力破解 暴力破解是一種針對于密碼的破譯方法,將密碼進行逐個推算直到找出真正的密碼為止。設(shè)置長而復(fù)雜的密碼、在不同的地方使用不同的密碼、避免使用個人信息作為密碼、定期修改密碼等是防御暴力破解
    的頭像 發(fā)表于 09-06 09:28 ?5093次閱讀

    如何通過Python腳本實現(xiàn)WIFI密碼的暴力破解

    前言 本文將記錄學(xué)習(xí)下如何通過 Python 腳本實現(xiàn) WIFI 密碼的暴力破解,從而實現(xiàn)免費蹭網(wǎng)。 無圖形界面 先來看看沒有圖形界面版的爆破腳本。 WIFI爆破 import pywififrom
    的頭像 發(fā)表于 09-10 17:09 ?2.6w次閱讀
    如何通過Python腳本實現(xiàn)WIFI密碼的<b class='flag-5'>暴力破解</b>

    xsec-ssh-firewall ssh密碼防暴力破解程序

    xsec-ssh-firewall.zip
    發(fā)表于 05-07 09:50 ?0次下載
    xsec-<b class='flag-5'>ssh</b>-firewall <b class='flag-5'>ssh</b>密碼防<b class='flag-5'>暴力破解</b>程序

    暴力破解壓縮包密碼

    可以暴力破解壓縮包密碼
    發(fā)表于 08-08 14:23 ?10次下載

    通過Python腳本實現(xiàn)WIFI密碼的暴力破解

    本文將記錄學(xué)習(xí)下如何通過 Python 腳本實現(xiàn) WIFI 密碼的暴力破解。
    的頭像 發(fā)表于 09-19 09:55 ?8083次閱讀

    會用kali破解wifi嗎?

    準備好 [kali] 系統(tǒng),電腦可以鏈接無線 wifi!! 使用 Aircrack-ng 進行暴力破解,linux 上已經(jīng)安裝此工具!
    的頭像 發(fā)表于 12-05 11:54 ?2749次閱讀

    如何防止SSH暴力破解

    密碼要寫的足夠的復(fù)雜,通常建議將密碼寫16位,并且無連貫的數(shù)字或者字母;當然也可以固定一個時間修改一次密碼,推薦是一個月修改一次會穩(wěn)妥一些.
    的頭像 發(fā)表于 05-12 16:18 ?1314次閱讀
    如何防止<b class='flag-5'>SSH</b><b class='flag-5'>暴力破解</b>

    使用fail2ban防御暴力破解的落地實踐

    暴力破解(Brute Force Attack)是最原始也是最有效的攻擊手段之一。攻擊者通過自動化工具對 SSH、Web 登錄、數(shù)據(jù)庫等服務(wù)進行大量密碼嘗試,直到命中正確的憑據(jù)。根據(jù)公網(wǎng)蜜罐數(shù)據(jù)
    的頭像 發(fā)表于 03-23 10:27 ?373次閱讀
    渝中区| 城步| 蓝田县| 阿坝县| 台南县| 北海市| 翁牛特旗| 游戏| 绥化市| 海阳市| 岗巴县| 工布江达县| 衡南县| 邵阳县| 武乡县| 方城县| 休宁县| 洛川县| 商城县| 镇巴县| 晋中市| 如皋市| 西畴县| 张家川| 兴义市| 萝北县| 仁化县| 吐鲁番市| 合肥市| 台前县| 绿春县| 益阳市| 静安区| 湖口县| 南京市| 新化县| 黄平县| 巩留县| 新邵县| 钟祥市| 玉林市|