原創 指令碼家園 指令碼家園 2024-04-29 13:21 雲南 聽全文
在當今網際網路高速發展的時代,伺服器安全顯得尤為重要。惡意訪問、SSH暴力破解等網路安全威脅層出不窮,如何有效地保護我們的伺服器免受攻擊成為了每個運維人員和網路管理員必須面對的問題。今天,我們就來分享一些實用的指令碼,幫助你輕鬆遮蔽惡意IP,提升伺服器的安全性!
圖片
一、遮蔽每分鐘訪問超過200的IP
面對惡意的頻繁訪問,我們可以採取遮蔽IP的策略。以下是透過分析Nginx訪問日誌來遮蔽惡意IP的指令碼:
#!/bin/bash
DATE=$(date +%d/%b/%Y:%H:%M)
# 透過tail讀取最新的5000行Nginx訪問日誌,篩選出當前時間的記錄,並統計每個IP的訪問次數
# 若某個IP的訪問次數超過100次(可根據實際需求調整),則視為異常IP
ABNORMAL_IP=$(tail -n5000 access.log | grep $DATE | awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}')
# 遍歷異常IP列表,檢查iptables規則中是否已存在該IP的遮蔽規則
# 若不存在,則新增遮蔽規則,阻止該IP的訪問
for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL | grep -c "$IP") -eq 0 ]; then
iptables -I INPUT -s $IP -j DROP
fi
done
指令碼解析:
首先,我們透過date命令獲取當前的日期和時間,以便後續篩選日誌。
使用tail命令讀取Nginx訪問日誌的最新5000行,透過grep和awk篩選出當前時間的記錄,並統計每個IP的訪問次數。若某個IP的訪問次數超過設定的閾值(這裡為100次),則將其視為異常IP。
遍歷異常IP列表,檢查iptables規則中是否已存在該IP的遮蔽規則。若不存在,則使用iptables命令新增遮蔽規則,阻止該IP的訪問。
二、遮蔽每分鐘SSH嘗試登入超過10次的IP
對於SSH暴力破解等惡意登入行為,我們也可以採取類似的策略進行遮蔽。以下是透過分析SSH登入日誌來遮蔽惡意IP的指令碼:
方法1:透過lastb獲取登入狀態
由於篇幅限制,這裡僅展示部分關鍵程式碼。你可以透過lastb命令獲取最近的登入記錄,然後篩選出當前時間的記錄,並統計每個IP的登入嘗試次數。若某個IP的登入嘗試次數超過設定的閾值(如10次),則將其視為異常IP,並進行遮蔽。
方法2:透過日誌獲取登入狀態
對於使用OpenSSH的伺服器,你可以透過分析/var/log/auth.log日誌來遮蔽惡意IP。以下是相應的指令碼示例:
#!/bin/bash
DATE=$(date +"%b %d %H")
# 透過tail讀取最新的10000行SSH登入日誌,篩選出當前時間的記錄,並統計每個IP的登入嘗試次數
# 若某個IP的登入嘗試次數超過5次(可根據實際需求調整),則視為異常IP
ABNORMAL_IP="$(tail -n10000 /var/log/auth.log | grep "$DATE" | awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"
# 遍歷異常IP列表,檢查iptables規則中是否已存在該IP的遮蔽規則
# 若不存在,則新增遮蔽規則,並記錄操作日誌
for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL | grep -c "$IP") -eq 0 ]; then
iptables -A INPUT -s $IP -j DROP
echo "$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >> ~/ssh-login-limit.log
fi
done
指令碼解析:
與前面類似,我們首先透過date命令獲取當前的日期和時間。
使用tail命令讀取SSH登入日誌的最新10000行,透過grep和awk篩選出當前時間的記錄,並統計每個IP的登入嘗試次數。若某個IP的登入嘗試次數超過設定的閾值(這裡為5次),則將其視為異常IP。
遍歷異常IP列表,檢查iptables規則中是否已存在該IP的遮蔽規則。若不存在,則使用iptables命令新增遮蔽規則,阻止該IP的訪問,並將操作記錄到日誌檔案中。
總結:
透過以上兩個指令碼示例,你可以輕鬆地遮蔽那些頻繁訪問或嘗試SSH登入的惡意IP地址。這些指令碼可以根據你的實際需求進行調整和最佳化。同時,請注意定期檢查和更新你的iptables規則以及相關的日誌檔案以確保伺服器的安全。在網路安全日益重要的今天希望這些實用的小技巧能幫助你更好地保護你的伺服器免受攻擊!
指令碼家園
閱讀 6446
人劃線