查看Linux日志
1.首先要做的,先分析明白我們經歷了什么。而這一切都在日志里。
Linux系統的日志,都保存在/var/log目錄下:
/var/log/boot.log:記錄了系統在開機引導過程中(開機自檢過程顯示在屏幕上)發生的事件
/var/log/lastlog:記錄最后一次用戶成功登陸的時間、登陸IP等信息
/var/log/messages:記錄Linux操作系統常見的系統和服務錯誤信息
/var/log/secure:Linux系統安全日志,記錄用戶和工作組變化情況、用戶登陸認證情況
/var/log/btmp:記錄系統登陸失敗的用戶、時間以及遠程IP地址
/var/log/syslog:只記錄警告信息,常常是系統出問題的信息,使用lastlog查看
/var/log/wtmp:該日志文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件,使用last命令查看
/var/run/utmp:該日志文件記錄有關當前登錄的每個用戶的信息。如 who、w、users、finger等就需要訪問這個文件
/var/log/syslog或/var/log/messages 存儲所有的全局系統活動數據,包括開機信息。基於 Debian 的系統如 Ubuntu 在 /var/log/syslog中存儲,而基於RedHat的系統如RHEL或CentOS 則在/var/log/messages 中存儲。
/var/log/auth.log或/var/log/secure 存儲來自可插拔認證模塊(PAM)的日志,包括成功的登錄,失敗的登錄嘗試和認證方式。Ubuntu 和 Debian 在/var/log/auth.log 中存儲認證信息,而RHEL或CentOS 則在/var/log/secure 中存儲。
我們需要的就是/var/log/btmp
2.查看發起攻擊的IP和攻擊次數
Linux命令:cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
3.安裝軟件保護自己
如果你用證書登錄,那啥都不用安裝。密碼登錄的,還是安全第一。
有兩個比較常用的軟件,可以安裝在服務器上:fail2ban(支持多種協議,登錄失敗N次后拉黑IP)和denyhosts(支持SSH,自動屏蔽非法IP連接)。兩款軟件的對比參考:https://serverfault.com/questions/128962/denyhosts-vs-fail2ban-vs-iptables-best-way-to-prevent-brute-force-logons。fail2ban更全面,那就安裝fail2ban。wiki在此:https://en.wikipedia.org/wiki/Fail2ban。
1.fail2ban安裝配置教程:
https://linux.cn/article-5067-1.html
http://www.cnblogs.com/jasmine-Jobs/p/5927968.html
在CentOS7中安裝還是比較簡單的,yum install fail2ban
即可。然后配置,把自己的規則放在/etc/fail2ban/jail.local 里以覆蓋/etc/fail2ban/jail.conf 里的默認配置。配置摘要如下:
在針對服務的監獄區(在[DEFAULT]區后面的地方),你需要定義一個[ssh-iptables]區,這里用來定義SSH相關的監獄配置。真正的禁止IP地址的操作是通過iptables完成的。
[DEFAULT] # 以空格分隔的列表,可以是 IP 地址、CIDR 前綴或者 DNS 主機名 # 用於指定哪些地址可以忽略 fail2ban 防御 ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 # 客戶端主機被禁止的時長(秒) bantime = 86400 # 客戶端主機被禁止前允許失敗的次數 maxretry = 5 # 查找失敗次數的時長(秒) findtime = 600 mta = sendmail [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com] # Debian 系的發行版 logpath = /var/log/auth.log # Red Hat 系的發行版 logpath = /var/log/secure # ssh 服務的最大嘗試次數 maxretry = 3
根據上述配置,fail2ban會自動禁止在最近10分鍾內有超過3次訪問嘗試失敗的任意IP地址。一旦被禁,這個IP地址將會在24小時內一直被禁止訪問 SSH 服務。這個事件也會通過sendemail發送郵件通知。
2.重啟fail2ban服務,測試是否可用
重啟:systemctl restart fail2ban
測試服務可用性:fail2ban-client ping
如果有響應:Server replied: pong
,表示成功。
測試暴力破解防護是否有效:用錯誤的密碼來用SSH連接到服務器模擬一個暴力破解攻擊
查看fail2ban日志:tail -f /var/log/fail2ban.log
3.查看fail2ban當前活動的監獄列表:
fail2ban-client status
4.查看fail2ban指定監獄狀態(例如ssh-iptables):
fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables |- Filter | |- Currently failed: 1 | |- Total failed: 92 | `- File list: /var/log/secure `- Actions |- Currently banned: 3 |- Total banned: 3 `- Banned IP list: 123.249.9.74 140.143.241.113 218.93.201.199
5.設置 Fail2ban 自動啟動
systemctl enable fail2ban
每個IP在幾次嘗試后放棄,切換為其他IP(因為Linux有登錄失敗N次自動鎖定當前用戶的機制),所以這種防護效果有限,最好還是用證書登錄。現實世界中一個IP代表一台主機,這么多機器,是怎么被人控制的呢?
3.僵屍網絡(Botnet,Robot network)
從FreeBuf上看到一篇文章,把我給科普了一下,鏈接如下:
http://www.freebuf.com/articles/system/113690.html
僵屍網絡:黑客用一台台受控制的計算機(肉雞)組成的網絡。通過控制服務器(Command and Control Server,C&C,C2)可以操控每一個節點。數量巨大的節點同時訪問指定服務器,即DDoS攻擊(DDoS,Distributed Denial of Service)。
控制服務器是整個網絡的核心,負責執行黑客的指令,控制肉雞的行為。控制服務器與肉雞之間通訊通常用IRC協議,這又是什么鬼?
4.IRC協議
IRC(Internet Relay Chat)是一種互聯網聊天協議,速度快,帶寬占用小,用戶可以在頻道(Channel)群聊(需要服務器)或直接一對一聊天(可以不經過服務器)。
so,控制服務器就是IRC服務器,每台肉雞就是IRC客戶端,登錄的IRC服務器。黑客通過控制服務器向肉雞下達指令。
每個肉雞通常至少開兩個線程:一個負責和IRC服務器通訊接受指令,另一個則通過端口掃描嘗試感染其他機器。
常用的攻擊方式是UDP攻擊,它比TCP類型的攻擊更難防,因為TCP是需要建立連接的,很容易被IDS/IPS設備RST,也很容易通過設置協議棧Syn Cookies屏蔽掉攻擊包。