Camel 's blog

Technical notes written freely.

[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/

[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

[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:對比於 […]

[linux] 如何更改 crontab 預設編輯器

當每次要編輯使用者底下的 crontab 時,我們會下 crontab -e 但可能初次設定時設定錯誤,發現開啟的是 vi / nano / vim 等不熟悉的編輯器。 在 ubuntu 上你可以直接下 系統會將你選擇的編輯器紀錄在 ~/.selected_editor 參考資料 https://www.howtogeek.com/410995/how-to-change-the-default-crontab-editor/

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

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

[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 到這個 線上工具 看看,基本上就每小時會執行一次(和上述步驟測試結果吻合) […]

[mac] backward/forward words in iTerm2

最近換了新版的 mac,忘記當初怎麼設定 iTerm2 的指令列 backward/forward word,順道把這次設定的過程記錄下來,下次可以參考 XD 設定路徑: iTerm2 -> preference -> Profiles -> Keys 原本的設定 請更改為以下設定 ⌥ ← : Send Escape Sequence + b ⌥→:Send Escape Sequence + f 如下圖: 儲存後就可以看到 backward/forward words 有生效囉 🎉 參考資料: https://coderwall.com/p/h6yfda/use-and-to-jump-forwards-backwards-words-in-iterm-2-on-os-x

[CI/CD] testcafe/nightwatch.js 總是發生 element not visible/found

最近剛好同事也遇到在 circleCI 上使用 chrome 跑 testcafe 總是發生以下的錯誤 The element that matches the specified selector is not visible. 但在本機使用 chrome 卻總是正常的執行,無任何的錯誤. 其實這個錯誤通常蠻常見於 RWD 的網站,通常都是由於錯誤的 screen size 導致部分 element 可能因為 viewport 過小而被隱藏. 不管是 testcafe/nightwatch.js 或是其他 end-to-end test 都能找到不少 issue,像是 testcafe: https://github.com/DevExpress/testcafe/issues/1988 nightwatch.js: https://stackoverflow.com/questions/43583715/running-nightwatch-js-tests-via-jenkins-windows-size-issue 很大的共通點都是跑在 jenkins/circleCI/travisCI,這些你看不到 GUI 的機器上 XD 這邊提供幾個方向和建議供大家參考及排查: CI/CD 機器上可能不支援 GUI 的 browser以 chrome 為例子請參考 doc […]

如何以 interactive/non-interactive 方式初始 gcloud sdk

因為工作關係有機會碰到 gcloud sdk,想說紀錄一下如何以不同方式初始 gcloud sdk 假設你已經照著 guideline 裝好 gcloud sdk,接下來要做 sdk 的初始化 以下介紹三種方式,依據執行環境(e.g. 是否為自動化 script/是否有 GUI 之類的) 你可以選擇適合的方式初始化 interactive (互動式,開啟 browser) interactive (互動式,僅在 console) non-interactive (非互動式,手動執行 gcloud init 的執行步驟) 參考資料: https://stackoverflow.com/questions/42379685/can-i-automate-google-cloud-sdk-gcloud-init-interactive-command https://cloud.google.com/sdk/docs/initializing