[nginx] 如何讓 $remote_addr 辨認出正確的 client 端 ip 而不是 cdn(cloudflare) ip

當在架設網站時,時常會幫網站前面架設一層 cdn(cloudflare),好處是 cdn 作為第一層接收使用者端的請求既可以隱藏伺服器真實 ip,更可以加速各地區的網站載入速度。 反之,多了一層 cdn 可能讓你更難存取到真實的使用者資訊,比如導致在網頁伺服器看到的 access.log 其中 $remote_addr 都是來自 cdn 廠商的 ip,例如:162.158.162.90 造成這個問題的原因,可以參考以下圖片的流程: 原來的使用者 IP 為: 1.1.1.1 / 2.2.2.2 由於經過 cloudflare 的 cdn 伺服器(4.4.4.4)存取後,導致 Logs 充斥 4.4.4.4 的 $remote_addr 為了解決這個問題 cloudflare 官方有提供在各網頁伺服器該如何設定正確的 mods 解決此問題 這邊以 ubuntu 的 nginx 設定為例 2. 重新讀取 nginx 設定 設定大功告成 ~ 重新檢查 access.log 的 $remote_addr 是否後就會正確抓到使用者 ip 了 […]

Continue reading


[htop] 如何看 cpu load 狀態

常常在看機器目前負載狀態時,總是會先看 cpu / memory 的使用量,但在 cpu 上有些數字代表指標 記錄一下每個數字的意義 ~ 之後忘記可以查 XD 舉個例子: 以上這張圖透露了以下資訊: 此機器 cpu thread count 為 8若要查實體 cpu count 為多少可以使用 sysctl -a | grep machdep.cpu.core_count cpu 使用量, process 依照優先權重分別為 紅(kernel) > 黃(user) > 綠(user) process memory 使用量,綠色為 process, 藍/橘則為 buffer 或 disk cache 使用的 memory swap 使用量,通常在記憶體不夠用時會使用硬碟空間作為記憶體使用 目前機器上有 588 tasks, 2594 threads, 1 […]

Continue reading


[iptables] 如何看 iptables 的阻擋紀錄

在 Linux 常見的防火牆套件為 iptables,相信有當過網管或管理伺服器的管理人員都相當熟悉。 (曾經設定完 iptables 就再也連不進去遠端機器的經驗 這篇就不說明如何設定 iptables,這方面的說明在網路上有相當多教學,也可以參考 鳥哥私房菜-防火牆 紀錄一下時常設定完後,如何觀察有哪些嘗試連線而被阻擋的紀錄 首先舉個例子: 透過以下指令我們限制僅有 x.x.x.x ip 可以透過 ssh 連線進入主機 這時候除了 x.x.x.x ip ssh 連線至主機會顯示 這時候我們可以藉由以下指令新增 iptables rule,查看主機上是否有相關的阻擋紀錄 接下來在 /var/log/kern.log 就可以看到封包相關的阻擋紀錄 參考資料 https://www.thegeekstuff.com/2012/08/iptables-log-packets/

Continue reading


[git] 如何預設讓 branch / tag list 依照更新日期顯示

平常在用 git cli 時不免會想列出目前 remote / local 的所有 branch / tag,但預設排序會是依照字母顯示,導致不是很好找到最新更新的 branch / tag。 這裡記錄一下如何做對應的設定 依照 commit date 排序顯示 branch list 依照版本號順序顯示 tag list 以上兩個設定設定完後,會自動寫入至 /Users/user/.gitconfig,如下: 參考資料: https://github.com/git/git/blob/master/Documentation/RelNotes/2.19.0.txt https://stackoverflow.com/questions/5188320/how-can-i-get-a-list-of-git-branches-ordered-by-most-recent-commit

Continue reading


[mysql] 追蹤與紀錄執行過久的 SQL

Mysql 5.7 有以下兩個設定可以協助你排查 SQL 執行的狀況以及相關指標,由於這類設定可能會影響效能上的表現,預設會是關閉的,以下簡介如何開啟設定以及相關的設定檔。 General Query Log:記錄下所有執行的 SQL query 供排查,開啟後通常會伴隨大量的寫入因此不建議在生產環境開啟設定,範例輸出像是以下: 開啟 general_log 我們可以透過以下 SQL 讀取/設定目前的 gerenal_logs 設定 要注意的有以下三個值 general_log:ON / OFF 開啟 general_logs 與否 general_log_file:寫入指定目的地路徑的檔案 log_output:FILE / TABLE 寫入目的地為檔案 或資料表( mysql.general_log) 透過 SQL 更改 runtime 設定設定會立即生效不需要重啟 mysql service,但重啟 mysql 後需要重新設定 透過 my.cnf 設定重啟後 mysql 預設會依照以下路徑的先後讀取設定檔(mysql -h 可以看到此提示) /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf Slow Query Log:對比於 […]

Continue reading


[security] 關閉 ssh 使用密碼登入,僅允許 authorized_keys 登入

如果你也是自己有自架機器 或是 購買 雲端主機商(DigitalOcean / Linode….) 服務的使用者,多少會利用 sshd 服務啟用允許 ssh 連線,如果本身沒有限制 22 port 的相關防火牆設定,每天基本上都會有大量的惡意使用者或程式嘗試連線你的機器,基礎的話可以先設定 fail2ban 相關設定做一些阻擋。 備註: 如果要看看過去幾天有多少 ip(使用者)嘗試 ssh 登入失敗可以使用以下指令 更安全一點的方式可以將使用 帳號/密碼 的 ssh 登入方式直接關閉,使用 public / private key 作為登入方式,以下是相關設定步驟 修改 vim /etc/ssh/sshd_config,新增以下設定 重啟 sshd service 以生效設定

Continue reading


[security] perfctl 惡意程式佔用 cpu / memory

這兩天收到了自架的機器上資源超出 100% 的通知,進去機器使用 htop 觀察後 看到有個不明的 procss 名為 perfctl 佔了非常高的 cpu / memory 使用量。 簡單記錄一下處理過程和發現步驟 XD 確認此 perfctl 執行使用者為 www-data,猜測應是由此台機器上的 wordpress 資安漏洞導致 更新現有的 wordpress 與相關的 plugin / theme,修補資安漏洞 首先嘗試了 kill -9 ${process id} 砍掉 perfctl 後 cpu / memory 資源使用量確實大幅下降,約莫 1hr 後 perfctl 會自動重啟 確認排程服務列表是不是有被修改過 發現有一筆可疑的 cron job 排程備註:如果看不太懂 cron job expression 到這個 線上工具 看看,基本上就每小時會執行一次(和上述步驟測試結果吻合) […]

Continue reading