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