請問這是受到攻擊嗎? - BBS

Table of Contents

※ 引述《sweetwords (米虫三號)》之銘言:
: 最近 LAB 的 FreeBSD 測試機,
: 常常開機太久後網頁資料連結到資料庫不是讀取太久,
: 就是整個資料庫都連不到

1)有可能 DB Lock 或 DB connect 過多超出預設值,
2)也有可能記憶體用光,或超出 kern.maxfiles or kern.maxfilesperproc
或沒設妥 MySQL updatelog 的存放量以致硬碟滿了
或安裝時未規劃妥 RAID 或硬碟空間整體配置佈局
或者瞬間流量滿了(超出網卡或 switch 撐不住)_

3)也有可能前端網頁程式不是很嚴謹,遇上 SQL injection 之類攻擊狀況。

1) 可以下 show full processlist 或以類似如下

#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin

LockTxt=$(/usr/local/bin/mysql -u whoami -p'xxoo' -h192.168.x.x -e \
"show full processlist" | grep -v Sleep \
| grep -v Connect | grep -v '\-\-\-\-' | grep -v "Command" \
| egrep -v "[[:cntrl:]][0-1][[:cntrl:]]" \
| grep -v "processlist")

if [ "$LockTxt" != "" ];
then echo "$LockTxt" | sed "s/^/$(date)\t/g" >> ~/dblock.log
fi

exit 0

方式寫成 script 放到 crontab 去跑並把 log 存起來,來察看是否有 lock 發生,
並根據經驗來判別該 lock 行為是否為人為失誤操作所致,比方說 SELECT * 之類,
或異常行為或疑似攻擊行為。

若是超出 MySQL max_connections 則要依需求來調整 my.cnf
在 [mysqld] 區段加上 max_connections = 1024 之類設定,並重啟 MySQL 即可。

2) 可以用 pstat -T 跟 df -h 與 netstat -m 之類察看,
像是若超出最大同時開啟檔案數也可以考慮以 sysctl 調高一些,
並以相關 snmp 工具來輔助確認流量方面是不是有問題。

3) 可能要多注意 web ap 內相關 SQL 檢驗跟表單檢查,
而 web app 的檔案權限, owner, group 也要注意

有閒錢的話可以考慮看看 WAF 產品。


: 每次都要 reboot 狀況才會改善
: 一直在想說是不是受到攻擊之類的?
: 下了 netstat 去看
: c42e54ec stream 0 0 0 c42e59d8 0 0 /tmp/mysql.sock
: c42e5604 stream 0 0 0 c3a3e3d4 0 0 /tmp/mysql.sock
: c42e5a64 stream 0 0 0 c42e5460 0 0 /tmp/mysql.sock
: 發現有這個暫存檔,不知是否是這個原因搞掛 mysql
: 隨著開機時間越多,我也發現這個 stream 會越來越多
: 但是不懂這是啥意義?有各位前輩可以解答嗎,非常感謝 <0>

這、、 你去 google 一下 mysql.sock 是作什麼的,或者找位 DBA 人員問問也可。

: 另外也有找到資料是 httpd 開啟兩個服務讓 mysql loading 太大
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?

: ps aux | grep httpd 我也有試著下版友給我的建議這個指令
這指令以及 ps aux | grep httpd | wc -l 的執行結果為?

: cat /var/log/httpd-access.log 11:45
: 除了以上這個以外,還會跑出一堆在
: 帳號/底下的 log

log 內容大約像是什麼?

--
靜中見真境,淡中識本然

--

All Comments