利用 firewalld ipset 禁止 Linux 服務(wù)器被暴力破解登錄
不知道之前是哪位同事心大,居然把一臺(tái)Linux主機(jī)在防火墻上做了主機(jī)映射,結(jié)果這臺(tái)主機(jī)完全暴露在公網(wǎng)上,關(guān)鍵是sshd服務(wù)端口也沒改。一查日志,全是暴力登錄的記錄,真擔(dān)心哪天密碼被暴力破解了。
為了解決這個(gè)問題,想到了使用firewalld來禁止這些ip地址通過ssh連接,從而阻斷服務(wù)器被遠(yuǎn)程暴力破解,以下是詳細(xì)步驟。
1.定義firewalld ipset
firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
2.定義firewalld規(guī)則調(diào)用ipset
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset=blacklist port protocol="tcp" port=22 drop'
3.將日志中的ip添加到ipset中
因?yàn)槿罩局衖p很多,而且會(huì)不斷更新,不可能手動(dòng)添加,于是打算寫個(gè)shell腳本,通過定時(shí)任務(wù)添加到ipset中。shell腳本內(nèi)容如下:
#!/bin/bash
# Author: Harry
# Description: 使用root賬號(hào)登錄錯(cuò)誤大于10次的IP被加入到黑名單中
for ip in `grep -i 'Failed password for root' /var/log/secure | awk '{print $11}' | sort -n | uniq -c | sort -k1nr | awk '{if ($1>10) print $2}'`; do
firewall-cmd --permanent --ipset=blacklist --add-entry="${ip}";
done;
firewall-cmd --reload;
4.定時(shí)任務(wù)
0 * * * * /opt/blockips.sh >/dev/null 2>&1
說明:任務(wù)每小時(shí)執(zhí)行一次
5.其他
此時(shí)可以用如下方法查詢被禁止的IP地址:
使用firewall-cmd命令查看已經(jīng)被進(jìn)入黑名單的IP地址
firewall-cmd --permanent --info-ipset=blacklist
firewall-cmd --ipset=blacklist --get-entries
經(jīng)過查詢,居然有這么多IP,由此可見服務(wù)器暴露在公網(wǎng)上是有多不安全。
查看ipset配置文件blacklist.xml
cat /etc/firewalld/ipsets/blacklist.xml
注意,這里使用的firewalld ipset 是指 firewalld 與 ipset 工具的集成,而不是獨(dú)立的ipset工具,如果使用ipset命令創(chuàng)建IP地址集合,firewalld將無法與之關(guān)聯(lián)。