「抵擋爬蟲」修訂間的差異
跳至導覽
跳至搜尋
| 行 4: | 行 4: | ||
# top | # top | ||
| + | # netstat -antp | grep :80 | ||
# 查訪問的 IP 來源 | # 查訪問的 IP 來源 | ||
| 行 25: | 行 26: | ||
<tr><td>寫入量</td><td>很高</td><td>幾乎歸零</td></tr> | <tr><td>寫入量</td><td>很高</td><td>幾乎歸零</td></tr> | ||
</table> | </table> | ||
| − | + | # <span>HTTP</span><br><span> ↓</span><br><span>Apache</span><br><span> ↓</span><br><span>PHP</span><br><span> ↓</span><br><span>MediaWiki</span><br><span> ↓</span><br><span>MariaDB</span> | |
| − | # TCP 的正常流程: | + | # TCP 的正常流程:<span>ESTABLISHED</span><br><span> ↓</span><br><span>FIN_WAIT</span><br><span> ↓</span><br><span>TIME_WAIT</span><br><span> ↓</span><br><span>消失</span> |
| − | |||
| − | ESTABLISHED | ||
| − | |||
| − | FIN_WAIT | ||
| − | |||
| − | TIME_WAIT | ||
| − | |||
| − | 消失 | ||
| − | |||
# http_response_code(503); 能瞬間降低負載。 | # http_response_code(503); 能瞬間降低負載。 | ||
於 2026年6月5日 (五) 16:52 的修訂
Cloudflare頁中有「抵擋爬蟲」的段落
DS720+ 檢測
- top
- netstat -antp | grep :80
- 查訪問的 IP 來源
netstat -tn | grep ESTABLISHED | \ awk '{print $5}' | cut -d: -f1 | \ sort | uniq -c | sort -nr | head -20
- 封阿里雲常見的掃描來源網段:
在「DSM / 控制台 / 安全性 / 防火牆 / 防火牆設定檔 / 編輯規則 / 新增」:
「所有連接埠 | 拒絕 | 特定 IP => IP 範圍:從 47.82.0.0 到 47.82.255.255」- 47.79.0.0/16
- 47.82.0.0/16
- 47.88.0.0/16
| 狀態 | 封鎖前 | 封鎖後 |
|---|---|---|
| ESTABLISHED | 1115 | 27 |
| CLOSE_WAIT | 308 | 0 |
| FIN_WAIT2 | 297 | 0 |
| SYN_SENT | 92 | 0 |
| CPU | 50~85% | 你之前觀察已明顯下降 |
| 寫入量 | 很高 | 幾乎歸零 |
- HTTP
↓
Apache
↓
PHP
↓
MediaWiki
↓
MariaDB - TCP 的正常流程:ESTABLISHED
↓
FIN_WAIT
↓
TIME_WAIT
↓
消失
- http_response_code(503); 能瞬間降低負載。
- sudo iostat -xm 1
- netstat -ant | awk '{print $6}' | sort | uniq -c 回應
1 established)
23 ESTABLISHED
2 FIN_WAIT1
2 FIN_WAIT2
1 Foreign
2 LAST_ACK
32 LISTEN
3 SYN_RECV
961 TIME_WAIT
或
1 established)
41 ESTABLISHED
1 Foreign
32 LISTEN
985 TIME_WAIT
- 列出 cpu 佔用的前 20 名:「ps aux --sort=-%cpu | head -20」
發現主要是 mariadbd 和數個 php-fpm worker => 11MB/s 寫入量來自「MediaWiki → PHP → MariaDB」鏈條
檢查儲存裝置被頻繁寫入
發現儲存裝置有 11MB/s 寫入量
- 查資料庫請求的增量:「SHOW GLOBAL STATUS LIKE 'Questions';」 60 秒後 再執行一次,看增加多少 => 60 秒增加:76491 => 約 1,275 queries / 秒
- 查是哪些請求:「SHOW FULL PROCESSLIST;」秀出運行中的全部請求
如果太多,先用這個:
---------- information_schema 資料庫中的 PROCESSLIST 資料表 ----------- SELECT ID,USER,DB,COMMAND,TIME,STATE,LEFT(INFO,300) AS SQL_TEXT FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND<>'Sleep' ORDER BY TIME DESC;
也查資料庫連線來源: - SELECT USER,DB,COMMAND,COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY USER,DB,COMMAND ORDER BY COUNT(*) DESC;
- 查到:
REPLACE /* SqlBagOStuff::updateTable */ INTO `wiki_objectcache` (keyname,value,exptime) VALUES ('alWiki:messages:zh-tw','………','20380119031407')
- 11MB/s 寫入的原因很明確:objectcache 一直被 REPLACE
---------- 查快取是否使用 wiki_objectcache ----------
- SELECT ID,USER,DB,COMMAND,TIME,STATE,LEFT(INFO,300) AS SQL_TEXT FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND<>'Sleep' ORDER BY TIME DESC;
- SELECT COUNT(*) FROM wiki_objectcache; 等一分鐘再查一次,如果數量持續增加,是使用 wiki_objectcache
- 看 SHOW TABLE STATUS LIKE 'wiki_objectcache'; 中的:
- Data_length
- Index_length
- Update_time
- 清快取表:「TRUNCATE TABLE wiki_objectcache;」
- sudo synopkg restart MariaDB10 重啟資料庫服務
- sudo synopkg restart WebStation 重啟網頁服務
- sudo synosystemctl restart pkgctl-WebStation 只重啟 PHP-FPM