在過去的幾天裡,一個非常堅持的人不斷嘗試獲得(未經授權的)訪問我的系統......有無數的條目,例如/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
sshd: 116.31.116.20
添加/etc/hosts.deny
答案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