避免服務器成為肉雞的應對措施
在公網中每時每刻都有人通過密碼字典暴力破解試圖登陸你的服務器,不信請看該日志文件大小du -sh `ls /var/log | grep btmp,該文件存儲了ssh失敗登陸的記錄。文件越大/增長越快,說明你的服務器處于被別人暴力破解的危險中!為了避免這種危險,必須做好兩點:
- 修改SSH默認端口,
- 使用強口令密碼,不想看胡扯的請直接跳到后面。
整個網絡空間中其實存在著很多弱口令服務器,假設弱口令服務器的用戶名都為root、密碼都為123456、SSH登陸端口都為默認的22。我有一臺服務器在不停的用密碼字典登陸這些弱口令機器,成功登陸的機器作為肉雞(傀儡)繼續登陸別的機器,假設一臺服務器以2臺/天的速度進行登陸,那么我就有三臺機器(包括自己的那臺),第二天就是6+3=3^2=9臺,第三天就是18+9=3^3=27臺,第N天就是3^N臺。
看到沒有,肉雞/傀儡服務器是以指數級別在增加的!
為什么有人不停登陸別人的機器,獲得肉雞?如果我手上有來自全世界的肉雞,并且數量很多,那玩兒法可就多了:
- 看不慣哪個網站?操縱這些傀儡機器不停的請求該網站,讓別人沒法用,服務癱瘓,這就是傳說中的DDoS。
- 想賺點小錢,偷偷挖礦是你不二的選擇,這么多肉雞,雖然每一臺計算能力不怎么樣,但是聯合起來也不容小。這種肉雞俗稱挖掘雞
- 肉雞做代理?這個話題我就不深說了,大陸敏感話題… …
- 窺探肉雞主人數據… 滿足窺探欲
- 這么多肉雞代表你有這么多IP,有大量IP能干什么?這又是另外一個龐大的話題了… …
一、基礎知識
/var/log/wtmp用于記錄登錄成功的用戶的信息,是一個二進制文件,只能通過 last命令來查看
- root pts/0 100.87.41.98 Sat Feb 16 01:28 still logged in
- root pts/2 100.87.41.98 Fri Feb 15 11:38 - down (01:35)
- root pts/1 100.87.41.98 Fri Feb 15 11:38 - down (01:35)
- root pts/0 100.87.41.98 Fri Feb 15 11:38 - down (01:35)
查看嘗試惡意登陸的前十個IP:
- sudo lastb | awk '{ print $3}' | awk '{++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rk2 |head
查看惡意IP嘗試登陸次數:
- lastb | awk '{ print $3}' | sort | uniq -c | sort -n
當然,如果你要清理這個日志,刪除在創建之
- rm -rf /var/log/btmp
- touch /var/log/btmp
/var/log/btmp用于記錄登錄失敗的用戶的信息,是一個二進制文件,只能通過 lastb命令來查看
- ejabberd ssh:notty 123.207.233.84 Sat Feb 16 02:08 - 02:08 (00:00)
- rsync ssh:notty 157.230.102.166 Sat Feb 16 02:08 - 02:08 (00:00)
- ejabberd ssh:notty 123.207.233.84 Sat Feb 16 02:08 - 02:08 (00:00)
- rsync ssh:notty 157.230.102.166 Sat Feb 16 02:08 - 02:08 (00:00)
/var/log/lastlog用于記錄用戶的歷史登錄情況,是一個二進制文件,只能通過 lastlog命令來查看
- Username Port From Latest
- root pts/0 100.87.41.98 Sat Feb 16 01:28:34 +0000 2019
- bin **Never logged in**
- daemon **Never logged in**
- adm **Never logged in**
/var/run/utmp用于記錄當前登錄的用戶的信息,是一個二進制文件,只能通過 who命令來查看
- root pts/0 2019-02-16 01:28 (100.87.41.98)
二、修改SSH默認端口
環境:CentOS 7
步驟:新增SSH端口–>>重啟sshd服務–>>添加防火墻規則–>>嘗試新端口登陸–>>關閉原先的22端口
1. 新增SSH端口(列:1000)
- vi /etc/ssh/sshd_config
找到Port 22這行,將前面的注釋去掉,再加一行Port 1000,如下,這樣做的目的是防止新端口登陸不上,老端口也不能用!
- Port 22
- Port 1024
- #AddressFamily any
- #ListenAddress 0.0.0.0
- #ListenAddress ::
2. 重啟sshd服務
如果是CentOS 7使用systemctl restart sshd,查看端口是否生效可以用systemctl status sshd
如果是CentOS 7以前的系統,使用/etc/init.d/sshd restart或者service sshd restart
重啟以后可以本地測試一下端口通沒通,telnet 127.0.0.1 1000
3. 添加防火墻規則
如果是iptables防火墻,執行下面命令添加規則
- iptables配置文件位置/etc/sysconfig/iptables
- 添加1000端口規則
- iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1000 -j ACCEPT
- service iptables save
- service iptables restart
如果防火墻是Firewall,參照下面步驟:
- 首先檢測防火墻是否已經啟用,啟用返回值runing,反之,為not running
- firewall-cmd --state
- systemctl start firewalld
- systemctl enable firewalld
- firewall-cmd --get-default-zone
- firewall-cmd --get-active-zones
- firewall-cmd --permanent --zone=public --add-port=22/tcp
- firewall-cmd --permanent --zone=public --add-port=1000/tcp
- firewall-cmd --reload
- firewall-cmd --permanent --list-port
- firewall-cmd --zone=public --list-all
4. 嘗試新端口登陸
嘗試用1000端口進行登陸,看是否成功!
5. 關閉原先的22端口
參考上面的操作,首先在ssh的配置文件去掉22端口,重啟sshd服務,然后在防火墻配置里面去除22端口,重啟防火墻!這里不再贅述。
6. 修改弱口令為強口令
輸入修改密碼命令
- passwd
此時系統提示
- Changing password for user root.
- New password:
輸入兩次密碼并回車,注意輸入密碼時不會顯示的
- Retype new password:
- passwd: all authentication tokens updated successfully.
7. 推薦:
shell隨機密碼生成函數:
生成隨機密碼 ($1 位數)
- # echo $(getRandomPwd 10)
- # echo $(getRandomPwd)
- getRandomPwd(){
- num=32
- if [ $# == 1 ];then
- num=$1
- fi
- echo "$(date +%s)$(shuf -i 10000-65536 -n 1)" | sha256sum | base64 | head -c $num ; echo
- }
8. 擴展
雖然上面修改端口和口令能夠大大提升安全性,但是在某些情況下不能修改端口或口令,此時可以推薦 DenyHosts或者fail2ban,它可以禁止大量嘗試登陸的IP。或者可以用最簡單的辦法,查看嘗試惡意登陸的前十個IP然后用防火墻禁止它,這里只提供思路。