如何在ssh中屏蔽IP

如何在ssh中屏蔽IP

在過去的幾天裡,一個非常堅持的人不斷嘗試獲得(未經授權的)訪問我的系統......有無數的條目,例如/var/log/auth.log

Jun 21 03:55:15 cloudy sshd[32487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root
Jun 21 03:55:16 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:19 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Received disconnect from 116.31.116.20: 11:  [preauth]
Jun 21 03:55:21 cloudy sshd[32487]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root

我想詢問一些關於如何阻止此人消耗電腦資源的建議,是否有可能「硬阻止」該 IP 甚至打開 ssh 連線?請注意,我使用 Debian 8 作為作業系統。

答案1

答案2

您也可以使用iptables

建立一個文件,其中包含要封鎖的 IP 位址blocked.ips.txt

現在建立並運行包含以下內容的腳本:

blocked=$(egrep -v -E "^#|^$" ./blocked.ips.txt)
for ip in $blocked
do
    iptables -I INPUT -s $ip -p tcp --dport ssh -j DROP
done

運行iptables -L應該給出丟棄資料包的輸出

答案3

iptables的方式是最直接的方式。艾瑞克·漢德里克斯(Erik Handriks)提議將其作為劇本。

兩個 but-s: - 每次重新啟動後都必須啟動腳本(如果表未使用 iptables 進行內部備份)。 - 按原樣呼叫腳本,兩次或多次重複條目。

試著用以下方法簡單地釘住壞人:

iptables -I 輸入 -s BAD_IP -p tcp --dport ssh -j 刪除

在大多數發行版中,iptables 都有自己的規則保存復原機制。查看“/var/lib/iptables/rules-save”是否存在。對於你的發行版,它可能位於其他地方(這裡是gentoo)。

新增每個 BAD IP 後,請嘗試:

iptables-save > /var/lib/iptables/rules-save

重新啟動後,使用“iptables -L”檢查那裡有什麼...

答案4

在我的伺服器(Ubuntu 16.04)上,我使用 UFW(UncomplicatedFireWall),這是 iptables 上的簡化層),這似乎是 Ubuntu 伺服器上的標準問題(但應該適用於其他發行版)。對於這些情況我使用:

ufw insert 1 deny from nnn.nnn.nnn.nnn

UFW 還允許您限制連線數

ufw limit ssh/tcp

請注意,這也適用於成功的連接,因此如果您使用使用多個 ssh 命令的腳本,則必須透過發出以下命令來停用 IP 的此限制:

ufw insert 1 allow in from nnn.nnn.nnn.nnn

相關內容