避免服務(wù)器成為肉雞的應(yīng)對(duì)措施
在公網(wǎng)中每時(shí)每刻都有人通過密碼字典暴力破解試圖登陸你的服務(wù)器,不信請(qǐng)看該日志文件大小du -sh `ls /var/log | grep btmp,該文件存儲(chǔ)了ssh失敗登陸的記錄。文件越大/增長越快,說明你的服務(wù)器處于被別人暴力破解的危險(xiǎn)中!為了避免這種危險(xiǎn),必須做好兩點(diǎn):
- 修改SSH默認(rèn)端口,
- 使用強(qiáng)口令密碼,不想看胡扯的請(qǐng)直接跳到后面。
整個(gè)網(wǎng)絡(luò)空間中其實(shí)存在著很多弱口令服務(wù)器,假設(shè)弱口令服務(wù)器的用戶名都為root、密碼都為123456、SSH登陸端口都為默認(rèn)的22。我有一臺(tái)服務(wù)器在不停的用密碼字典登陸這些弱口令機(jī)器,成功登陸的機(jī)器作為肉雞(傀儡)繼續(xù)登陸別的機(jī)器,假設(shè)一臺(tái)服務(wù)器以2臺(tái)/天的速度進(jìn)行登陸,那么我就有三臺(tái)機(jī)器(包括自己的那臺(tái)),第二天就是6+3=3^2=9臺(tái),第三天就是18+9=3^3=27臺(tái),第N天就是3^N臺(tái)。
看到?jīng)]有,肉雞/傀儡服務(wù)器是以指數(shù)級(jí)別在增加的!
為什么有人不停登陸別人的機(jī)器,獲得肉雞?如果我手上有來自全世界的肉雞,并且數(shù)量很多,那玩兒法可就多了:
- 看不慣哪個(gè)網(wǎng)站?操縱這些傀儡機(jī)器不停的請(qǐng)求該網(wǎng)站,讓別人沒法用,服務(wù)癱瘓,這就是傳說中的DDoS。
- 想賺點(diǎn)小錢,偷偷挖礦是你不二的選擇,這么多肉雞,雖然每一臺(tái)計(jì)算能力不怎么樣,但是聯(lián)合起來也不容小。這種肉雞俗稱挖掘雞
- 肉雞做代理?這個(gè)話題我就不深說了,大陸敏感話題… …
- 窺探肉雞主人數(shù)據(jù)… 滿足窺探欲
- 這么多肉雞代表你有這么多IP,有大量IP能干什么?這又是另外一個(gè)龐大的話題了… …
一、基礎(chǔ)知識(shí)
/var/log/wtmp用于記錄登錄成功的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過 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)
查看嘗試惡意登陸的前十個(gè)IP:
- sudo lastb | awk '{ print $3}' | awk '{++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rk2 |head
查看惡意IP嘗試登陸次數(shù):
- lastb | awk '{ print $3}' | sort | uniq -c | sort -n
當(dāng)然,如果你要清理這個(gè)日志,刪除在創(chuàng)建之
- rm -rf /var/log/btmp
- touch /var/log/btmp
/var/log/btmp用于記錄登錄失敗的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過 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用于記錄用戶的歷史登錄情況,是一個(gè)二進(jìn)制文件,只能通過 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用于記錄當(dāng)前登錄的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過 who命令來查看
- root pts/0 2019-02-16 01:28 (100.87.41.98)
二、修改SSH默認(rèn)端口
環(huán)境:CentOS 7
步驟:新增SSH端口–>>重啟sshd服務(wù)–>>添加防火墻規(guī)則–>>嘗試新端口登陸–>>關(guān)閉原先的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服務(wù)
如果是CentOS 7使用systemctl restart sshd,查看端口是否生效可以用systemctl status sshd
如果是CentOS 7以前的系統(tǒng),使用/etc/init.d/sshd restart或者service sshd restart
重啟以后可以本地測(cè)試一下端口通沒通,telnet 127.0.0.1 1000
3. 添加防火墻規(guī)則
如果是iptables防火墻,執(zhí)行下面命令添加規(guī)則
- iptables配置文件位置/etc/sysconfig/iptables
- 添加1000端口規(guī)則
- iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1000 -j ACCEPT
- service iptables save
- service iptables restart
如果防火墻是Firewall,參照下面步驟:
- 首先檢測(cè)防火墻是否已經(jīng)啟用,啟用返回值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端口進(jìn)行登陸,看是否成功!
5. 關(guān)閉原先的22端口
參考上面的操作,首先在ssh的配置文件去掉22端口,重啟sshd服務(wù),然后在防火墻配置里面去除22端口,重啟防火墻!這里不再贅述。
6. 修改弱口令為強(qiáng)口令
輸入修改密碼命令
- passwd
此時(shí)系統(tǒng)提示
- Changing password for user root.
- New password:
輸入兩次密碼并回車,注意輸入密碼時(shí)不會(huì)顯示的
- Retype new password:
- passwd: all authentication tokens updated successfully.
7. 推薦:
shell隨機(jī)密碼生成函數(shù):
生成隨機(jī)密碼 ($1 位數(shù))
- # 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. 擴(kuò)展
雖然上面修改端口和口令能夠大大提升安全性,但是在某些情況下不能修改端口或口令,此時(shí)可以推薦 DenyHosts或者fail2ban,它可以禁止大量嘗試登陸的IP?;蛘呖梢杂米詈唵蔚霓k法,查看嘗試惡意登陸的前十個(gè)IP然后用防火墻禁止它,這里只提供思路。