2016年12月26日 星期一

Nginx 編譯 BoringSSL 失敗 BIO_get_mem_data [passing argument 2]

這幾天在編譯 Nginx 1.11.7 with BoringSSL 的時候一直鬼打牆,屢屢編譯不成功在 make 的時候出現錯誤訊息

src/event/ngx_event_openssl.c: In function 'ngx_ssl_parse_time':


src/event/ngx_event_openssl.c:4072:5: error: passing argument 2 of 'BIO_get_mem_data' from incompatible pointer type [-Werror]


     len = BIO_get_mem_data(bio, &value);


     ^


In file included from /tmp/nginxauto-28396-tmp/boringssl/.openssl/include/openssl/ssl.h:147:0,


                 from src/event/ngx_event_openssl.h:15,


                 from src/core/ngx_core.h:82,


                 from src/event/ngx_event_openssl.c:9:


/tmp/nginxauto-28396-tmp/boringssl/.openssl/include/openssl/bio.h:385:21: note: expected 'char **' but argument is of type 'u_char **'


OPENSSL_EXPORT long BIO_get_mem_data(BIO *bio, char **contents);


                     ^


cc1: all warnings being treated as errors


make[1]: *** [objs/src/event/ngx_event_openssl.o] Error 1


make[1]: Leaving directory `/tmp/nginxauto-28396-tmp/nginx-1.11.7'


make: *** [build] Error 2




2016年12月23日 星期五

macOS Sierra 無法安裝未識別開發者 App

這篇簡單記錄一下在 macOS Sierra 遇到無法安裝未識別的開發者的 App,以往只要打開鎖頭就可以選到允許任何來源 App,但是在 Sierra 竟然把這個選項拿掉了!!

 

還好 Apple 只是把介面上的選項拿掉,實際上的功能還是可以透過 terminal 來開啟
$ sudo spctl --master-disable

 

spctl 是 macOS 裡面的系統安全控制功能,類似 redhat 系列中的 SELinux,只要 disable 就可以解決

Orignal From: macOS Sierra 無法安裝未識別開發者 App

Macbook Pro 2016 later 三指拖曳(three finger drag) 失效問題

終於在今天小弟拿到新的 Macbook Pro with touch bar,很開心的在安裝一些常用工具的過程中發現在 MacOS 中超好用的一個 "三指拖曳" (three finger frag) 功能有點怪怪的

 

一開始覺得怪怪的,但用了幾個小時之後發現三指拖曳的功能時常失效,心想不會是機王吧!!

 

開始把問題餵 Google 後在 Apple Communities 裡看到有相同問題的一個 issue,"MacBook Pro late 2016 three finger drag issue",同樣的在許多地方也有相同的討論串 Three-finger drag gestures working sporadically on 2016 MacBook Pros, users say

 
Try to enable three finger drag on it and do a 3 finger drag gesture on bottom left of the trackpad, there are 40% chance that it's wrongly detected as secondary click.

2016年12月20日 星期二

Ubuntu 16.04 設定 Network interfaces、DNS

大概一年多沒有碰 Ubuntu 了,最近因為工作開始要大量的玩 Ubuntu 順手記錄一下以前沒有記錄到的資訊

 

此篇是紀錄  Ubuntu 16.04 在網路、DNS 的設定教學

2016年12月18日 星期日

Nginx 1.11.7 fix 使用 HTTP/2 與 limit_req 和 auth_request 的衝突

Nginx 在 2016/12/13 釋出 1.11.7 版本,主要修改 SSL 的 bug,其中比較有感的就是如果你已經使用 HTTP/2 的話,又搭配 limit_req 或 auth_request 的話,使用者端 rquest body 會有損壞的狀況,從 1.11.0 出現的 bug。

 
Bugfix: when using HTTP/2 and the "limit_req" or "auth_request"
directives client request body might be corrupted; the bug had
appeared in 1.11.0.

2016年12月17日 星期六

Java 淺談 OutOfMemory 的 JVM Heap and PermGen 設定

在使用 Java 的時候相信都會遇到過 OutOfMemory 這個錯誤,在以前維護 Tomcat 的時候就常常遇到這個狀況,剛好最近又遇到了 紀錄一下這篇

 

What is the JVM ?

Jvm (Java Virtual Machine) 意旨 Java 虛擬機,用於執行 Java bytecode 的 Virtual Machine space,以堆疊結構機器的方式實作,將編譯過的 *.class 輸入到 JVM 並執行,以下是 JVM 架構圖:

2016年12月16日 星期五

【DevOps】Puppet 自動化部署 - 安裝初始化

在 DevOps 中 Puppet 是一個自動化佈署 (Configuration Management) 的角色,在目前市場上 DevOps 頗為流行,在目前動不動就是幾百、幾千甚至是萬台 Server 的狀況根本就無法使用對等的 Server 人員進行管理,尤其在這個技術環境發展這麼快的時代,技術人員是越來越缺乏,更無法使用對等的人力去維護這些伺服器。

 

對於 DevOps 小弟認為這是技術時代的變遷,如果你不跟著提升就等著被淘汰,尤其在目前要成為一位"工程師",其實技術門檻非常低,在這個極競爭的產業對於一位系統管理者,自動化佈署絕對是一個提供自己價值的方式,不僅加速工作上的效率,也讓工作上增加更多空檔,讓我們一起提早下班吧

Linux 使用全域 Proxy 上網 (with only apt/yum)

這一兩天遇到 Server 必須要用 HTTP Proxy 才能上網,順手紀錄一下如何設定

 

使用 export http_proxy / https_proxy 的方式代理

 

全域變數 http_proxy / https_proxy
# 暫時生效,重開機proxy就會失效 
$ export http_proxy=http://proxy.example.com

# https用https_proxy
$ $ export https_proxy=https://proxy.example.com

2016年12月15日 星期四

Sublime Text 3 將TAB替換成空白,顯示空白字元

在寫 Python 的時候我想最頭痛的就是段行的問題,由於小弟蠻喜歡用 Sublime 當開發工具,但是 Sublime 預設看不出來你的段行是空白 or TAB

 

sublime_space_none

2016年12月14日 星期三

Mockaroo 自動替你生成測試資料,終於不用再浪費時間建立測試資料啦!

以往開發人員在進行開發需要測試的時候往往需要範例的資料進行測試,我最常看到 QA 用 Excel 拉資料,如果是開發人員會另外寫工具去隨機生成簡單的資料檔,不過可能因為資料庫欄位屬性的不同或是資料類型不同需要進行微調,是非常麻煩的一件事情。

 

Mockaroo 是由一位 Mark Brocato 所提供的免費的線上工具,提供生成一些測試資料用於各種情境的測試使用,並且提 供 CSV、JSON、SQL、Excel、XML  ... etc 不同的格式,並且可以調整需要的資料類型如 id、Data ... 目前 120種 types

2016年12月9日 星期五

Chrome 55 的重大改革:記憶體、Flash停用、HTML5的時代

這幾天一直在外奔波,在群組內一直有人提到 Chrome 55 ,但一直無法去 follow,今天終於有時間可以去了解 Google 在搞什麼鬼

 

一直以來 Google Chrome 擁有了很大的市占率,但是這幾年開始被其他的瀏覽器瓜分了一些地盤,最大的問題莫過於 Chrome 被冠上 吃記憶體怪獸 的這個名號,而終於在 Chrome 55 獲得了不錯的解決

2016年12月6日 星期二

Linux 系統殘留大量 php-fpm 執行的 53 udp session

前陣子在某台伺服器發現無法正常的解析網域,導致在呼叫 API 的時候一直失敗,這是一個非常特殊的案例,實際案例解析後其實就是 udp 協定的缺陷

 

問題:

  • 該主機無法對外解析 Domain


Nginx 專注於 CDN 的 PageSpeed module

引前之前文章所提到的 Google PageSpeed,而 Google 也有提供 nginx 用的 ngx pagespeed module,當然也有屬於 Apache 的,但是小弟本身偏好 nginx,所以此篇會以介紹 ngx_pagespeed 設定為主

 

要安裝 ngx_pagespeed 必須在 nginx 原始碼就進行編譯,如果不想要自行編譯可以到 nginxauto 這個專案自動安裝 nginx

2016年12月3日 星期六

Amazon 佛心來著,發表 DDoS 免費/付費防禦服務 AWS Shield

Amazon 在 12/1 發表了一款標榜防禦 DDos 的服務 AWS Shield,並且分為標準版 / 付費版並且將自動佈署在 Elastic Load Balancers、CloudFront、Route 53 的服務上,這對於本身就已經使用 AWS 的人可是一件超值的服務

 

由於 Amazon 的標準版是免費的,號稱可以阻擋 96% 的 DDos 攻擊,這對於已經使用 Amazon 的企業無疑是一大好消息,正在考慮使用各式雲端的企業也是一大加分,長年以來 DDos 就是系統人員的夢厭,如今資安攻擊日漸頻繁 DDos 也是越來越常態的攻擊手法,甚至是垂手可得,對於 Amazon 的這個做法身為系統人員是給予很高的贊同與評價。

2016年11月29日 星期二

檢測你的 SSL/TLS 是否安全 Qualys SSL LABS

最近在弄 SSL 憑證剛好就找到一個可以檢測 HTTPS 是否安全的 Online scan 網站 Qualys SSL LABS

 

Qualys SSL LABS 是一個基於保護網際網路資安的國外廠商對於 SSL 的安全性有一定的高度水準,並且可以提供檢測你的各項 SSL 報告,如 Browser SSL TEST、Server SSL TEST ..

提高 SEO 排名快使用 Let's Encrypt 免費的 SSL 憑證替網站加上綠色鎖頭!

Google 從 2014 就開始宣告要將 HTTPS 列為 ranking signal 之一的項目,對於 SEO 是一個很重要的公開指標,以往 Google 對於 ranking signal 絕不公開,可見 Google 對於網站加密非常看重

 

對於某些網站可能是自行經營像是小弟僅是使用一台非常爛的主機在跑 Blog 做紀錄,買個網域就已經很奢侈了要在買下 SSL 憑證一年約增加 1000 左右的成本實在不划算

2016年11月22日 星期二

資安:WordPress 禁止 xmlrpc.php 攻擊

WordPress 本身存在著許多漏洞,對於使用 WordPress 更要相當小心的檢測是否遭受攻擊 or 跳板

 

以下這個例子就是 WordPress 本身的一個攻擊入口
173.245.49.175 - - [17/Nov/2016:20:43:14 +0800] "POST /xmlrpc.php HTTP/1.1" 200 271 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 
173.245.49.175 - - [17/Nov/2016:20:43:30 +0800] "POST /xmlrpc.php HTTP/1.1" 200 271 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
173.245.49.175 - - [17/Nov/2016:20:43:46 +0800] "POST /xmlrpc.php HTTP/1.1" 200 271 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

Git 改為 git-shell 後無法 git push

最近有一個同事發了一個問題給我,說他將 git 的權限改為 git-shell   在 git push 的時候出現了以下錯誤訊息:
[remote rejected] master -> master (branch is currently checked out) 
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

2016年11月12日 星期六

CentOS 用 inode number 刪除亂碼檔案 , 目錄

這兩天在其中一台伺服器上看到一個不知道從哪來的亂碼檔案,大概不曉得是哪一個開發者上傳的目錄出現錯誤

 
$ ls -l 

drwxr-xr-x 2 root root 4096 Mar 19 2016 -?ʦ??-?
drwxr-xr-x 2 root root 4096 Mar 19 2016 ??-?
drwxr-xr-x 31 root root 4096 Mar 19 2016 admin
drwxr-xr-x 29 root root 4096 Mar 19 2016 ??+? admin

2016年11月10日 星期四

Nginx 編譯最新的 SSL(Chacha20-Poly1305),解決 Google Chomre 淘汰 SPDY 改用 HTTP/2 的問題

在今年六月,Google Chrome 51 淘汰了 SPDY/NPN 的支援,並且改採用 HTTP/2 與 ALPN

 

SPDY 為一個 Open Source 的專案,主要是用來改善在網頁傳輸的延遲,在理路的環境下增加了 55 % 的下載速度,但隨著 HTTP 協定的演進 Google Chrome 開始支援 HTTP/2 並且放棄 SPDY/NPN。

Git 在 Windows 進行 add 出現警告「warning: LF will be replaced by CRLF」

在 Windows 中若是使用 git add 出現錯誤訊息如下
$ git add . 
warning: LF will be replaced by CRLF in files.
The file will have its original line endings in your working directory.

2016年11月9日 星期三

Sublime 在 Windows 下開發出現「-bash: /bin/bash^M: bad interpreter: No such file or directory」

之前都是使用 MacOS 開發,這兩天因為換工作而且新的 Macbook Pro 遲遲未開售,所以僅能使用手邊的 Windows 進行開發

 

小弟是使用 sublime text 3 當作開發工具,但是在上傳 source code 到 Linux 環境的時候出現錯誤訊息
-bash: /bin/bash^M: bad interpreter: No such file or directory

2016年11月2日 星期三

Git 如何判別檔案名稱大小寫不同 ignorecase

今天 RD 遇到要將原本 Curl.php 的檔案改名成 curl.php,但是在 commit 的時候一直判別為原本的 Curl.php,無法修改檔案名稱大小寫於是乎上傳了兩個相同名稱的 curl.php & Curl.php

 

結果 commit 後只上傳了 curl.php,而 Curl.php 卻無法 commit 進去 git 倉庫

 

這是因為在 Git 的 Windows 和 MacOS 的 File system 底下會將 "名稱相同" 但大小寫不同的檔案辨認為同一個檔案,如果你需要修改大小寫檔名的時候就會無法 update,只有在 Linux 才會區別大小寫不同為不一樣的檔案。

使用 devtoolset 升級 gcc+ on CentOS 6

這陣子在 CentOS 6 上編譯出現 gcc 版本太低的問題,預設在 CentOS 6 使用 yum 僅能裝到 4.4.7 版本,這是非常老舊的版本

 

 

  • devtoolset-2 (gcc 4.8.2)

  • devtoolset-3 (gcc 4.9.2)

  • devtoolset-4 (gcc 5.2.1)


 

在此篇的狀況我需要 GCC 4.8 的版本,可以依靠 devtoolset-2 這個套件來升級 gcc 4.8+

2016年10月20日 星期四

Nginx 禁止訪問 txt, doc, xlsx 等不合法的檔案

這幾天發現一個專案裡面 RD 放置了許多 txt , doc 等等這類型的東西,詢問過專案負責人之後這些檔案是提供主機運作使用,但並不提供給使用者

 

所以在系統方面,必須禁止這些檔案被下載,在 Nginx 內建就可以寫判斷式去禁止訪問

2016年10月5日 星期三

Install AWS CLI on Mac 不想再打開 AWS Web console 了!!

身為一個系統工程師,對於要一直開啟瀏覽器去管理覺得很笨,尤其在這個瀏覽器狂吃記憶體的時代,總是覺得瀏覽器跑不太動,尤其我又是 macbook 的使用者記憶體根本就是斤斤計較

 

索性就去安裝了 AWS CLI 來使用,在本篇只會使用 macOS 安裝 AWS CLI

 

Prerequisites

  • Linux, OS X, or Unix

  • Python 2 version 2.6.5+ or Python 3 version 3.3+


 

請先檢查 AWS cli 的系統需求

2016年10月4日 星期二

Amazon EC2 還原 EBS 掛載磁區 Root 容量,系統磁區不再只有 8GB

在 Amazon 建立 EC2 的時候,如果你所選的 Volume Type 不是 SSD 的話,在安裝好 Instances 後查看磁區僅有 8GB

 

/dev/xvda1 是 ec2 的預設磁區僅有 8GB
$ df -lh 
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 2.7G 4.7G 37% /
tmpfs 7.3G 0 7.3G 0% /dev/shm

Nginx 利用 http_mp4_module 控制 mp4 影片的開始結束

最近工作上有一個需求是希望影片可以在最後停留在最後的畫面,由於 Nginx 預設在播放 mp4 播完結束後就會呈現黑色畫面,所以如果要實現將影片停在最後一個畫面,那不就是"暫停"了嗎

 

在 Nginx 的 http_mp4_module 本身就提供了這樣的功能,官方提到可以控制 .mp4 .m4v .m4a 等這類型的檔案支援

 

確認你的 Nginx 是否支援 http_mp4_module

2016年9月26日 星期一

Nginx 從 User-agent 判斷手機的訪問頁面

最近有一個工作需求是希望針對手機的使用者訪問需要給一個不同的頁面,而這個站台網頁版 & 手機版是不同的開發網站,為了實現這個需求使用了子網域切割為 m.domain.com 作為手機版本網站,並且必須使用 Nginx 判斷使用者的來路 User-Agent 使其進到 m.domain.com

2016年9月22日 星期四

Windows10 找回失去的『Windows 相片檢視器』

在 Windows 8.1 以前內建的看圖工具都是採用『Windows 相片檢視器』但是在 Windows 10 之後就開始拿掉變成『相片』App了

 

其實小弟在使用 Windows 10 的時候並不喜歡 Windows 10 App 的工具,所以就去了解了一下發現從 Windows 7/8/8.1 直接升級上來的 Windows 10 都還有『Windows 相片檢視器』,但是重新安裝的 Windows 10 就不存在了。

從影音平台上下載被分割的 *.ts 影片並合併起來

今天有一個業務需求是希望可以將公司放在影音平台上的影片下載回來,由於他並不是直接可以點右鍵下載的形式,所以記錄將過程記錄在此篇

 

花了一些時間解析了一下這個影音平台從影片上右鍵內容是可以解析到影片位址的,下載回來的是一個 index.m3u8
$ wget http://eshare.vod.otvcloud.com/123456/index.m3u8 

2016年9月17日 星期六

OpenShift 使用 FileZilla SFTP 管理你的網站

我想有太多人都會想自建 OpenShift,在之前的一篇教學文章大受好評後此篇記錄如何進階使用 SFTP 去管理你的網站,OpenShift 相較於其他的免費虛擬主機算是比較彈性的,可以做的事情也多了

 

 

OpenShift 使用 SFTP 管理

Step.1 在進行這篇之前,你必須先申請好你的虛擬主機 application,然後使用 ssh-keygen 建立一把 RSA key 用來登入使用
$ ssh-keygen 

確認產生的公鑰
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAu1vq9loQ6shuoPwCbtB9sKjoLP .....

然後把你的 RSA 公鑰內容複製。

2016年9月14日 星期三

Ruby on Rails gem 安裝套件大小事 - 筆記

這一兩天在使用 Ruby on Rails 的時候遇到幾個小小的狀況,記錄在此篇

 

Case one: 安裝套件出現錯誤『While executing gem (NoMethodError) undefined method 'map' for nil:NilClass』

Ans: 通常在這個錯誤產生可以先進行更新 gem,可以解決80%問題
$ gem update --system

2016年9月2日 星期五

Windows10 重置密碼與開啟 Administrator - 筆記

這是一篇使用者忘記密碼的故事,最近很常用到這一個指令,不知道為何我們家的使用者從來不記住自己的密碼

 

重置密碼

直接切入正題,開機先進入 F8 維護模式,並且開啟命令提示字元,一樣使用老套的「螢幕小鍵盤」修改成「命令提示字元」的方式進行修改

茶包專欄:SQLite 出現『database disk image is malformed』錯誤解決方式

這幾天遇到某個站台使用 SQLite 的時候在某一張 table 出現『database disk image is malformed』的問題導致整張 table 無法讀取

 

對於這種狀況通常是 table page 損壞了,但這一篇的狀況比較特殊

 

先將 database 匯出
$ sqlite3 db.sqlite 

sqlite>.output db.sql
sqlite>.dump
sqlite>.quit

2016年8月22日 星期一

FortiGate 60D command line 操作備忘錄

本篇主要是記錄我在使用 FortiGate 60d 的操作備忘錄
# fortigate 重新啟動 
$ execute reboot

# fortigate 關機
$ execute shutdown

# 清除 arp table cache
$ execute clear system arp table

# 查看 arp table
$ get system arp

用 CloudPing 選擇離你的使用者比較近的 AWS 地區吧

在使用 AWS 的第一件事情就是必須了解你的應用需求以及使用者的環境地區,那麼要如何選擇距離使用者最近的 AWS Server 呢

 

AWS 大部分的地區都是在 U.S. ,在本篇的使用者以台灣為例,該如何選擇讓台灣的使用者擁有最快速的瀏覽品質,可以採用 CloudPing 這個服務,CloudPing 直接幫蒐集好各個 AWS 節點並且使用 Ping 替你測試從 Server 回應的速度

2016年8月15日 星期一

茶包專欄:secure『pam_limits(crond:session): unknown limit item 'noproc'』

今天在某一台大陸的所租用的雲端主機上在 secure 看到錯誤訊息
pam_limits(crond:session): unknown limit item 'noproc' 

 

每有一個 User 登入就出現一個 session limits 的錯誤訊息表示不認得 noproc

2016年8月3日 星期三

用 OptiPNG 和 jpegoptim 優化網站的圖片進行壓縮

這兩天在用 Google Developers 提供的 PageSpeed Insights 在測試網站效能,裡面有提到 最佳化圖片 的處理方式,維護網站常常會遇到設計人員因對網站的效能或是呈現沒有評估到,常常會給予太大的像素或是沒有壓縮過就放到網站上,就會導致網站的效能緩慢。

 

除了教育設計人員以外,在 PageSpeed Insights 也提到了許多工具拿來壓縮
目前市面上有許多可進階處理圖片的工具,能讓您無損壓縮 JPEG 和 PNG 檔案,完全不影響圖片品質。對於 JPEG,我們建議使用 jpegtran 或 jpegoptim (僅在 Linux 上提供;與 --strip-all 選項一併執行);對於 PNG,我們建議使用 OptiPNG 或 PNGOUT。

2016年8月2日 星期二

架設 HA 高可用性:MySQL DRBD + Heartbeat – 用 dd 來建立虛擬硬碟

在前一篇寫到 架設 HA 高可用性:MySQL DRBD + Heartbeat – 兩台式架構 HA (Master/Slave),結果馬上就遇到一些特殊環境必須採用一些特殊的調整

 

在本文遇到的狀況是因為無法避免的因素無法切割一個 /dev/sdb1 的硬碟分割區出來,而在一開始安裝系統的時候又把所有的空間全部給了根目錄
$ df -lh 
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 916G 2.0G 868G 1% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sda1 248M 64M 173M 27% /boot

 

如果要壓縮磁區在切新的磁區出來的話,又必須 umount,因為環境不允許這個狀況,絞盡腦汁只好改用 dd 來建立虛擬硬碟取代所需要的資源池磁區

2016年7月29日 星期五

Nginx 從 Cloudflare 獲取 Source IP 及寫入 logs

如果你有使用 Cloudflare 應該就會發現抓到的 source IP 都是錯的,這是由於你在前端加了一個 Proxy (Cloudflare) 必須 read ip from Cloudflare

 

在之前有寫到如何從 Proxy 獲取 Source IP:CentOS 6 安裝 Nginx Cache Reverse Proxy + Purge plugin

 

那麼 Cloudflare 要如何知道 Proxy IP 以及 real_ip_header

2016年7月21日 星期四

架設 HA 高可用性:MySQL DRBD + Heartbeat - 兩台式架構 HA (Master/Slave)

在 MySQL HA 架構,企業中使用最頻繁的就是 DRBD + Heartbeat,其原因沒有別的,就是最省錢;只需要兩台 Database Server,並且使用 Master / Slave Fail-over 進行備援,若是 Master 掛掉,只需要在短短的幾秒內即可讓 Slave 升上 Master 上線服務。

 

MySQL HA 有幾種選擇 MHA、MMM、Keepalived、Heartbeat、Pacemaker ..

使用兩台式的 Master / Slave 的缺點上就是沒有第三台 Monitor Server 協助判定主機 Active / Dead以及切換,所以在技術上如果沒有處理好的話就會造成 split-brain 的狀況,這樣就必須要人為介入處理

 

DRBD + Heartbeat 官方也提供了 split-brain 的自動復原功能 Configure-split-brain-behavior

 

在這篇是採用 DRBD + Heartbeat 做 LAB 使用,架構如下:

MySQL DRBD + Heartbeat (two host)

2016年7月17日 星期日

ISDA 雲端資安分享:shellshock 滲透測試 - CVE-2014-6271

今天去參加了 ISDA 的 AWS 雲端資安推廣活動,自從 ISDA 的駭客入門(一) 開始小弟就持續的參與,對於台灣資安這一塊小弟只能以行動支持。

 

這次活動大綱是

  • Cloud service SaaS/PaaS/IaaS 的區別

    • 軟體即服務 SaaS (Software as a Service):應用在雲端的軟體,如 Gmail、Youtube、Facebook 等線上應用軟體,也已有企業將 ERP、CRM 等服務應用上 Cloud service。

    • 平台即服務 Paas (Platform as a Service):在 Cloud service 提供平台讓管理者可以建置自己的服務,節省成本、維護建置、管理等,如 Amazon AWS Webservice、Microsoft Azure Webservice、Google App Engine 等耳熟能詳的平台解決方案,你只需要開發程式碼,Paas 即提供你所需要的 service。

    • 基礎設施即服務 Iaas (Infrastructure as a Service):這類型就等於是把管理主機直接移上雲端,甚至是機房架構,讓你不再需要維護機房設備,在 Cloud service 就提供了你整套的機房設置,包含 WAF、VPC、CDN 等環境建置。



  • AWS 的 VPC(Virtual Private Cloud)、EC2(Elastic Compute Cloud)的建置,我覺得重點在於教導你如何使用 VPC 將企業機房導入 Cloud service,VPC 提供 policy zone 讓你規劃 DMZ、LAN 等區域,甚至你還可以使用 site to site VPN 的方式將企業內網和 Cloud service zone 建立內網,這是一些許多企業慢慢將內部重要服務導入 Cloud service 的第一步,當然 site to site VPN 中間的資料傳輸與加密避免外洩資訊是必須要研究與探討的。

  • Workshops Wargame 小遊戲:蒐集資訊(scanner port)、尋找漏洞(shellshock)、如何繞過安全性低的弱點(upload type name)


2016年7月12日 星期二

MySQL 預設資料庫損壞或遺失,用 mysql_install_db 安裝預設資料庫

這幾天一直在同一台做 MySQL lab,基於懶惰沒有直接把環境還原快照就進行下一個 lab,結果在啟動 MySQL service 的時候失敗

 

在 mysql.log 裡面找到一行錯誤訊息:
Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

架設 HA 高可用性:MySQL Cluster 叢集 – 架設第二台 Management node

在前一篇寫過 MySQL Cluster 的安裝文件:架設 HA 高可用性:MySQL Cluster 叢集 – 7.4.11(5.6.29)

 

在裡面的每一台 node 都有很好的備援機制,唯獨 management node 僅有一台,雖然他僅僅是監控 cluster 而無其他用途,但身為系統人員如果要安裝的放個假,睡個覺的話,management node 也加入第二台也讓 management node 也有容錯機制吧!

2016年7月8日 星期五

茶包專欄:MySQL 使用 ROOT 也無法 GRANT 權限 Access denied

首先小弟必須先說,在技術領域上如果遇上很不可思議的問題,通常都是人為居多,即使是你已知的觀念都有可能因此而顛覆

 

在這篇的茶包在一開始小弟也覺得不可思議,但找到問題後,真的是感觸良多。

2016年7月7日 星期四

架設 HA 高可用性:MySQL Cluster 叢集 - 7.4.11(5.6.29)

前陣子架設了一套 MySQL Cluster 叢集的架構,終於在最近補上了實作過程,叢集的概念就是把一台式架構拆分為多台式架構,並且可以提供 HA 高可用性與負載均衡的需求,更不需要擔心延展性的問題,若是 Loading 加大了只需要增加 node 去分擔 Loading

 

MySQL Cluster Nodes:

  • Manage Nodes:負責監控叢集所有 Nodes 的狀態,並且由此控制所有 Nodes 的替換。

  • Data Nodes:負責所有 SQL Data 的 Nodes,單純儲存資料,將資料寫在 RAM & Disk。

  • SQL Nodes:負責 SQL 的 Table schema 和 Client 連接的空間。


 

MySQL Cluster architecture :

MySQL Cluster

2016年6月28日 星期二

Windows 7 無法建立的工作排程器 "具有此名稱的工作或資料夾已存在" or "未啟動指定資源管理員內的交易資源"

今天在處理一台準備要安裝系統工具的 "Windows 7",由於廠商需要使用工作排程器去執行一些工作,結果遇到工作排程器在建立工作排程一直無法建立

 

狀況一:使用 GUI 建立工作排程,出現錯誤訊息『具有此名稱的工作或資料夾已存在』

狀況二:使用匯入的方式建立工作排程,出現錯誤訊息『未啟動指定資源管理員內的交易資源』

Python3 用 Random 和 string 建立隨機字元 - 學習筆記

本篇記錄用 python3 如何活用 Random 和 String 模組建立隨機字元

 

2016年6月27日 星期一

Linux 如何掛載 LVM Partition

如果你的 Linux 主機不是自行切割,預設都是採用 LVM 來安裝,那就會遇到移機掛載 LVM 的問題,此篇記錄如何掛載一顆 LVM 硬碟

 

環境:

  • CentOS

  • /dev/sdb 為 LVM 磁碟

  • 使用 parted 工具


2016年6月16日 星期四

茶包專欄 pip 安裝 M2Crypto 失敗:swig error : Unrecognized option -builtin

今天在用 pip 安裝 M2Crypto 的時候遇到安裝失敗,錯誤訊息提示:
building 'M2Crypto.__m2crypto' extension 
swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -D__x86_64__ -I/usr/local/python3.5/include/python3.5m -I/usr/include -I/usr/include/openssl -includeall -modern -builtin -outdir build/lib.linux-x86_64-3.5/M2Crypto -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
swig error : Unrecognized option -builtin
Use 'swig -help' for available options.
error: command 'swig' failed with exit status 1

 

swig 找不到 -builtin 參數,grep 了一下 help 確實沒有,發現 CentOS 6 中內建的 swig 版本是 1.3.40-6,但目前的 swig 版本已經升到 3.0.10,也太舊了!!
$ rpm -qa | grep swig 

swig-1.3.40-6.el6.x86_64

2016年6月13日 星期一

YOURLS 你也可以提供短網址服務,自架短網址轉址伺服器 & 安裝 Random Keywords 隨機 short URL

前陣子收到一個想要自架短網址服務的需求,就花了一些時間搜尋相關的方案
目前已經有許多線上的短網址服務提供大家使用,如 Google(goo.gl),PPT(ppt.cc),Godaddy(x.co) ..  等等,對於企業來說,老闆都會希望很多很炫的東西在自己公司也有,相對於 IT 人員增加了管理上的風險及成本,不過相對的使用線上服務就要有相對的代價,就是你不知道他何時停止營運 or 不再維護。

 

短網址(short url) 就是隨機產生一個很短的 URL,然後協助轉址到目的地,就是一個 return 301 的概念,讓提供網址時可以不再"漏漏長",對於文章的版面,或是程式碼的整潔都是一個正向的服務

2016年6月12日 星期日

SSH 停用遠端主機公鑰檢查 Authenticity RSA key fingerprint

ssh 公鑰檢查是 ssh 通道協定內一向重要的機制,可以防範在 ssh 溝通的過程中避免第三方 hacker attack,但這對於需要依賴 ssh 協定的 script 會造成中斷的狀況

 

每當 ssh 連線後會將連線成功的公鑰儲存在 ~/.ssh/known_hosts,若是不存在將會提示使用者是否信任該主機,若是信任將自動加入到 known_hosts,下次連線就會直接採用此公鑰對應,不會再詢問,除非該主機公鑰改變

(茶包 lsyncd 無法使用的 excludeFrom:Parameter "rsync.excludeFrom" unknown

今天在使用 lsyncd 的時候需要使用到 excludeFrom 的功能參數,但是怎麼樣都出現錯誤訊息
Starting lsyncd: Error: error preparing /etc/lsyncd.lua: Parameter "rsync.excludeFrom" unknown. (if this is not a typo add it to checkgauge)

 

在官方文件明明就寫了 rsync 支援 excludeFrom 參數,但卻無法使用,從錯誤訊息提示看到找不到這個 type (官方訊息 log 寫錯寫成 typo!! ),需要在 checkgauge 加入

2016年6月4日 星期六

用 Parted 切割 2TB 以上的硬碟,不要再用過時的 fdisk

fdisk 是一個老牌的 Linux 磁碟分割工具,以往我們都很習慣使用 fdisk,但時代變遷現在的硬碟動輒 TB,而 fdisk 所能處理的磁碟容量上限為 2TB ,所以開始要汰舊換新了

 

2TB 以上的硬碟需要採用 GPT 格式,Parted 就支援這種格式,所以本篇採用 Parted 來切割硬碟

 

環境說明:

  • CentOS

  • 目標處理硬碟 4TB (JMicron Disk)


2016年5月30日 星期一

cedexis 提供各家 CDN 測試報告 Free Country Reports

最近在測試 CDN 的時候找到一個很不錯的 CDN 測試網站 cedexis,他會替你偵測指定地區最快的 CDN 這對於在 CDN 的事前作業有很大的幫助

 

當然,本身 cedexis 也是做 CDN 產品的,所以在報表上一定會替自家產品的數據一定會比較好看的,至於要不要選擇 cedexis 可以自行斟酌,至少他提供了各家的 CDN 數據,而且還是免費的

Free Country Reports

MediaWiki "顯示近期" 天數太短了!自定義的變更記錄顯示

這篇是因應公司需求,顯示"顯示近期"的修改項目預設是 30 天,實在是太少了,如下圖加入 90, 365 天

ScreenShot 2016-05-30 10.33.23

2016年5月27日 星期五

Git 2.x 的 push 模式 "Matching" 和 "Simple"

自從 git 升級為 2.x 版本之後,push 模式就調整為兩種模式 Matching、Simple 如果你沒有設定,在 push 就現出以下警告訊息

2016年5月24日 星期二

Mac OSX 沒有的 rename,用 brew 抓回來~

今天在操作 OSX 的時候赫然發現沒有 rename 這個工具,在 Linux 的 rename 是我常用拿來批量重新命名的工具

 

brew 內剛好有 rename 這個套件,但使用方法大不同

 

安裝 OSX rename
$ brew install rename

2016年5月15日 星期日

查詢你的 User Agent,What's My User Agent?

今天看到一個線上工具可以幫你查詢目前瀏覽網站的 User Agent,對於技術人員要查詢自己的 User Agent 不是一件難事,不過要是有線上工具可以代勞可以更事半功倍!!

 

What's My User Agent? 這個網站就是專門替你分析自己的 User Agent,除此之外還可以幫你分析目前瀏覽器的 information,如 JavaScript 是否支援,解析度等等

 

好用的線上工具推薦給大家

 

Orignal From: 查詢你的 User Agent,What's My User Agent?

DDos 攻防戰 - 利用 WordPress Pingback 漏洞的 DDos 攻擊

這陣子常常受到 WordPress 的 Pingback 漏洞的 DDos 攻擊,實在很頭疼,幸好像這種類型的 DDos 都有特徵可尋

 
155.199.156.69 shazi.info - - [15/May/2016:00:00:18 +0800] "GET /index.html HTTP/1.0" 200 162 "-" "WordPress/4.4.2; http://mobile-di.com; verifying pingback from IP" "-""-"

從 access.log 看到大量的相同 log,其特徵是 User-agent 都是 "WordPress/版本; 來源站; verifying pingback from IP"

2016年5月11日 星期三

Troubleshooting: MySQL 升級後資料表損壞 The table is probably corrupted

這幾天在測試 MySQL,從 5.1 升級到 5.5.49 之後執行 mysqldump 出現錯誤訊息
ERROR 1548 (Test) at line 5: Cannot load from mysql.proc. The table is probably corrupted

 

訊息中告知無法讀取 mysql.proc,進到 Client 端 select mysql.proc 也是一樣的狀況

MySQL 官方的解釋是升級 MySQL 版本有可能造成 "資料表" 與 MySQL版本不相容,並且建議在每次升級 MySQL 後都應該執行 mysql_upgrade 進行升級確認

2016年5月9日 星期一

MediaWiki 更換 skin theme 示範 Minit 主題 1.25

剛好有個同事提議想改變一下 MediaWiki 的主題,隨機挑選了 Minit 這個主題來測試一下更換效果

 

在 MediaWiki 要更換 skin 其實是很簡單的,但是必須要注意支援度的問題,MediaWiki 1.25 之後要求 skin 要有 skin.json 和 composer.json 宣告

php 使用 memcached,加速存取資料的速度

這幾天剛好實作了 memcached 在主線產品上,剛好記錄一下實作過程

memcached 是基於 NVP(Name-Value Pair) 分散式記憶體快取系統,被大量廣泛運用在線上環境,除了可以加快存取速度,還可以集中管理,避免主機異常而 session 遺失。

2016年5月8日 星期日

MySQL Replication 跳過當前執行失敗的 SQL 命令

在使用 MySQL Replication 不知道大家有沒有遇到過當你沒有指定 binlog-do-db 的話全部的資料庫都會進行覆寫,MySQL 也不例外,如果你執行了類似 create user 的動作,而 Slave 已經有了這個 user 的話就會造成當前的 SQL 指令持續失敗

Troubleshooting:mysqlbinlog: unknown variable 'default-character-set=utf8'

今天在用 mysqlbinlog 的時候出現錯誤訊息:
mysqlbinlog: unknown variable 'default-character-set=utf8'

 

當下是一陣錯愕,什麼 default-character-set !!?? 我沒有下這個參數阿!!

MySQL Replication 處理 Got fatal error 1236 from master & 驗證 binlog 資訊

最近遇到在 MySQL Replication 的時候遇到 Master / Slave 之間出現錯誤訊息
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

 

Error 1236 通常是出現在 binlog 的同步出現異常

Could not find first log file name in binary log index file 這個問題訊息告知在讀 binlog 的時候找不到對應的 binlog 檔案

2016年5月6日 星期五

Apple app 6/1 起將強制支援 IPv6 啦!還沒支援的趕緊動作

今天 iOS 的同事傳來一則 Apple developer 的消息,從 2016/6/1 起,全部的 App 都要支援 IPv6,這項消息應該對於許多沒在維護的 App 是個麻煩,IPv6 已經推行了非常多年,但一直沒有帶動起來,相信經過這些軟體商的推行,IPv6 的支援將會越來越普及

 

來自 Apple developer News

Supporting IPv6-only Networks

Orignal From: Apple app 6/1 起將強制支援 IPv6 啦!還沒支援的趕緊動作

2016年4月30日 星期六

dstat 監控你的 Linux 系統效能

前陣子在爬文看到一個好用的系統監視工具 dstat,實際使用過後根本超級好用,號稱可取代 vmstat , iostat .. 等效能監視工具

 

dstat 是基於 python 開發並且提供原始碼,提供各式各樣的監視訊息,並且擁有顏色顯示不同的單位,還可以 out file 之後再查看

 

在 CentOS 你可以直接 yum 安裝
$ yum install dstat

Nginx 優化你的網站文章編輯效能

若是網站是部落格類型的 CMS 或是維基百科等需要大量編輯文章的網站,在你進行編輯大量的頁面時應該會時常遭遇 client body buffer 或是 Connection timed out 的問題

 
Error Log: 

upstream response is buffered to a temporary file "xxx" while reading upstream
client request body is buffered to a temporary file "xxx"
Upstream timed out (110: Connection timed out) while reading response header from upstream

2016年4月25日 星期一

php-fpm 善用 slow log 找到效能瓶頸

前幾天在替一個客戶進行系統分析,剛好想到之前常使用的 slow log,slow log 可以幫你記錄執行超過時間的工作,這對於檢視效能記錄有非常大的幫助

 

在 php-fpm 的設定有一項 request_slowlog_timeout 是用來記錄 php 執行後成功 request 的 timeout 時間,只要超過設定值就會記錄在 slow log 上

2016年4月24日 星期日

Mediawiki 1.26.0 安裝可視化編輯器 Visual Editor

由於 Mediawiki 預設的原始碼編輯器 WikiEditor 並不符合一般使用者進行編輯,所以為了可以推廣大家對於 Wiki 撰寫的熱情,特別安裝了 Visual Editor 這個可視化編輯器

 

安裝環境:

  • CentOS 6.7

  • Mediawiki 1.26.0


2016年4月22日 星期五

解決方法:PHP APC warn: Unable to allocate memory for pool

APC 是 php 中用來加速效能的,原理是 cache,其這篇是出現了 log 的錯誤訊息,針對出現的狀況進行解決

 
$ less /var/log/nginx/error.log 

PHP message: PHP Warning: require(): Unable to allocate memory for pool. in dir"
while reading response header from upstream

Mediawiki 修改頁面字首小寫

Mediawiki 預設在頁面的字首都是大寫,如果是以設定檔,或是程式檔名為主的話,大小寫的差異就會出現問題

 

在預設 includes/DefaultSettings.php 中是開啟 $wgCapitalLinks = true ,只要關閉 wgCapitalLinks 功能就行

 

修改 DefaultSettings.php 或是 LocalSettings.php 都可以
$ vim LocalSettings.php 

$wgCapitalLinks = false;

2016年4月12日 星期二

凱撒密碼;變換式加密

前兩天在課程中談到這一個加密法,覺得很有趣,這是一個在密碼學中被廣為人知的加密技術,一個非常古老的加密技術是在明文中依字母表向前(或向後) 偏移被替換成密文,如果單獨使用容易被頻率分析暴力破解攻擊,但時常拿來搭配和其他的加密法使用

 

Example:
text:ABCDEFGHIJKLMNOPQRSTUVWXYZ 
encrypt:DEFGHIJKLMNOPQRSTUVWXYZABC
key:3

2016年4月8日 星期五

CentOS 7 sshd 啟動警告『Could not load host key』

今天在檢查某一台 CentOS 7 主機的 message log,發現 sshd 在啟動的時候出現錯誤訊息
error: Could not load host key: /etc/ssh/ssh_host_dsa_key

 

不知為何莫名少了 dsa key

在 CentOS 7 下的 ssh-keygen 支援 -A 來自動建立缺少的 key type
$ ssh-keygen -A 

ssh-keygen: generating new host keys: DSA

$ systemctl restart sshd
$ systemctl status sshd

Apr 08 16:13:15 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Apr 08 16:13:15 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Apr 08 16:13:15 localhost.localdomain sshd[2767]: Server listening on 0.0.0.0 port 22.
Apr 08 16:13:15 localhost.localdomain sshd[2767]: Server listening on :: port 22.

 

搞定!

Orignal From: CentOS 7 sshd 啟動警告『Could not load host key』

萬用的 curl 模擬各種訪問狀況、檢測訪問速度

curl 在我的工作上幫助了非常大,同時他也是資安測試的好工具,在這邊專門介紹我使用 curl 時會使用到的檢測方式

 

  • -w 檢測網站回應速度

    • 一行指令




curl -o /dev/null -s -w "%{time_namelookup},%{time_connect},%{time_starttransfer},%{time_total}" http://www.google.com



    • Script



$ vim curl-speed.sh 
#!/bin/bash
URL=$1

curl -o /dev/null -s -w \
"DNS Resolve: %{time_namelookup}\n\
Client -> Server: %{time_connect}\n\
Server Respon: %{time_starttransfer}\n\
Total time: %{time_total}\n" \
"${URL}"

$ ./curl-speed.sh www.google.com
Client -> Server: 0.040
Server Respon: 0.069
Total time: 0.069

time_namelookup = DNS 解析時間
time_connect = 建立伺服器 TCP 所花的時間
time_starttransfer = 伺服器 return 的第一個字節
time_total = 整個請求的花費時間

 

2016年4月6日 星期三

CentOS 6.7 編譯 php 5.2.17 with php-fpm

今天收到一個特殊需求,需要建立一個和客戶一模一樣的開發環境,仔細查看了一下,使用的是 php 5.2.17

在目前的 CentOS 6.7,yum最低都是 5.3.3 版本了,使用 rpm 安裝 5.2.17 的話 atomic 已經不支援下載了,最好的方式還是採用 compiler 的方式來安裝

 

本篇是記錄 nginx + php5.2.17 + php-fpm5.2.17 的安裝方式

 

由於在嘗試測試需要的相關套件,索性寫成 script 來進行編譯,免得需要加載其他套件時的作業麻煩

2016年4月4日 星期一

WordPress 自動排程發文失效『錯失排程』解決

最近剛好用到 WordPress 的一向自動排程發文的功能,等到時間過了才發現出現錯誤『錯失排程』

 

ScreenShot 2016-04-04 03.16.06

好吧,在預設的 wp-config.php 並沒有加入範例的 cron 設定值參考

2016年3月30日 星期三

HISTCONTROL 不留痕跡的滲透技巧 - 資安攻防戰

預設在 Linux Bash 執行 command 會紀錄所下的訊息,在滲透作業時在你滲透成功後不留下任何紀錄,這篇紀錄如何不留下任何 history

 

history 紀錄模式可以有幾種方式

2016年3月29日 星期二

Git 多個 repository Server Key 設定 - ssh config key

這兩天遇到一個開發者提出的問題,在他的開發環境是 Ternminal / SourceTree 的狀況下要如何處理多個 Git key 的問題

 

Git 預設會去抓 ~/.ssh/id_rsa 當作 key,但如果你有兩個以上的 repository Server Key 就無法這樣處理了

Git export 所有 branch 版本的 Source code

在之前有寫過一篇 Git 用 archive 匯出原始碼,今天接收到一項需求是 RD 在 git 切 branch 後 push 到 Remote Server 需要自動匯出新建的 branch

 

這次一樣借用 git archive 的功能來達成,用 git branch 的方式來取得 branch 版本

2016年3月17日 星期四

在 CentOS 7 中所不見的命令 - Round 1: ifconfig、route、netstat、traceroute

很好,最終還是要來體驗一下最新的 CentOS 7,雖然很早之前就使用過了,但是基於穩定性還是常用 CentOS 6,最近下定決心開始習慣 CentOS 7 的介面

 

此篇紀錄在 CentOS 6 中所常用的幾個工具將被淘汰,並且替代的工具

MySQL 5.1 later 開啟支援 InnoDB

在 MySQL 5.1 之後預設不支援 InnoDB,如果你要開啟支援 InnoDB 可以用編譯或是動態加載的方式載入 InnoDB plugin

 

查看是否支援 InnoDB
$ mysql -uroot -p 
mysql> show engines \g;

Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES

如果找不到 InnoDB 的項目,就進行加載 InnoDB

2016年3月15日 星期二

Nagios 監控你的所有服務狀態 - Nginx 安裝 Nagios 4.1.1

之前有寫過一篇 Nagios 的安裝文,這次要在安裝一次 Nagios 的時候因為環境不同,所以寫了一篇新的 Nagios 安裝文紀錄

 

這篇將採用 CentOS 6.7,並且以 Nginx 當 WebServer,Nagios 則以編譯的方式進行安裝

 

前置準備環境;

  1. CentOS 6.x

  2. Nginx 1.8.x

  3. PHP-FPM 5.x


建立需求:

  1. 訪問根目錄 /,預設 nagios 的訪問目錄為 /nagios


2016年3月4日 星期五

PHPMailer 用 PHP 發信 & Gmail 申請應用程式密碼

在 github 上面有一個 PHPMailer 專案,他號稱是目前世界上最潮的 PHP send mail code production,對於編碼的支援度也很好,最重要的是他支援各種驗證機制,這讓很多目前五花八門的驗證方式相容性就提高了許多

 

Class Features

Probably the world's most popular code for sending email from PHP!
Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more
Integrated SMTP support - send without a local mail server
Send emails with multiple TOs, CCs, BCCs and REPLY-TOs
Multipart/alternative emails for mail clients that do not read HTML email
Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings
SMTP authentication with LOGIN, PLAIN, NTLM, CRAM-MD5 and Google's XOAUTH2 mechanisms over SSL and TLS transports
Error messages in 47 languages!
DKIM and S/MIME signing support
Compatible with PHP 5.0 and later
Much more!

2016年3月3日 星期四

Tcpping 測試 TCP 網路延遲工具

大家都知道 Ping 是一個很好用的測試網路工具,但是他是基於 ICMP 協定,在嚴謹的網路環境中都會拒絕 ICMP 回應,使得無法測得主機延遲時間

 

這時候就可以使用 TCP / UDP 的方式來測試網路延遲,也就是 Tcpping 這個工具,可以直接繞過多數 L3 防火牆進行檢測

CentOS 安裝 Web 後台管理介面 - CWP

這幾天在找 CentOS 的後台管理介面提供給使用者操作,參考了市場常見的 cPanel、Plesk、zPanel 來試用

這幾套都是付費軟體,其中只有 Pleak 算是還不錯並且介面親民的軟體,之後找到了 CWP (CentOS Web Panel) 這套 OpenSource free 的管理者介面

 

CWP 雖然功能不比其他的付費 Panel 還要多,但是也非常足夠了

 

CWP install & configured

- Apache Web Server (Mod Security + OWASP rules optional)
- PHP 5.4 (suPHP, SuExec + PHP version switcher)
- MySQL/MariaDB + phpMyAdmin
- Postfix + Dovecot + roundcube webmail (Antivirus, Spamassassin optional)
- CSF Firewall
- File System Lock (no more website hacking, all your files are locked from changes)
- Backups (optional)
- AutoFixer for server configuration

2016年2月28日 星期日

Nginx 用 map module 設定替換變數 - 資安攻防戰

此篇紀錄 Nginx 的 map module 的使用方式,參考官網 map module 是用來替換變數,本篇使用的範例為 user-agent、query_string

 

map 只能放在 http 的 scope 裡面
Syntax:	map string $variable { ... } 
Default: —
Context: http

2016年2月22日 星期一

OS X 被限制的 Homebrew : GitHub API rate limit exceeded for ip

Homebrew 是 OS X 裡面的套件管理工具,在使用的時候如果大量更新或是 search 時常會出現
Error: GitHub API rate limit exceeded for ip. See http://developer.github.com/v3/#rate-limiting for details. You may want to create an API token: http://github.com/settings/applications and then set HOMEBREW_GITHUB_API_TOKEN.

 

這是 homebrew 在 API 上的限制,避免被大量佔用流量,在訊息中有提到可以到 github 去建立 api token,但是鏈結在 https://github.com/settings/tokens

Parse.com 停止服務? 建立自己的 Parse API Server 吧!

今年原定公司要開發 App,必須要擁有一台 Push Notifications Server,剛好 Facebook 於 2016年1月28日,在宣布關閉 Parse.com 平台服務的同時也提供了 PrasePlatform Source code,趁這個機會也將來測試這個頗為熱門的 App cloud database

 

Parse.com 提供的主要服務為推播訊息、雲端資料庫

 

Parse 系統架構是採用 NodeJS、MongoDB、其特色是跨平台iOS/OSX/Android/Unity/.NET  .. 等等各種 API

基於種種考量,我還是習慣使用自己掌握的住的服務,而不是使用大型服務商所提供的服務,為的就是避免這種大型營運商突然停止服務的狀況,逼的自己必須緊急尋找替代方案,在時間的逼迫下容易迫使無法考量好各種需求,尤其是系統這種東西並不是說更換就能夠更換的,影響到的並不是單一產品,而可能是整間公司的營運。

 

其實在建立 parse 的過程中也花了兩三天的時間去了解,以目前的資料來說,並不算齊全,在功能上比起營運商所提供的服務減少了許多,目前算是 OpenSource 的陣痛期,相信之後會有越來越多的開發功能可以使用

2016年2月18日 星期四

CentOS 6.7 編譯 Node.js 4.3.1 later

在 CentOS 6.7 要編譯 Node.js 4.0 以上的版本必須將你的 gcc 升級至 4.8 以上,否則在 configure 的過程中將會遇到以下錯誤

 

WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)

 

要安裝更新版本的 gcc 必須依靠 SCL套件庫 來安裝

2016年2月17日 星期三

Codeigniter(CI) 使用 CSRF 功能造成 POST 403

今天在工作上遇到在某一個開發站台 URL 在使用瀏覽器 和使用 JS 去 call URL 的 response 有不同的狀況

 

雖然是一樣開啟 URL,但 resquest 的方式不同造成的回應也有所不同,這就是之前在測試滲透技巧中的一環

 

狀況說明:

  1. 使用 POST 會出現 403 沒有權限 (JS)

  2. 使用 GET 可以出現正常的 response (browser)


2016年2月16日 星期二

2016年2月15日 星期一

Linux / Unix 加速 ssh 登入速度

在遠端登入 Unix 系統的時候,不知道各位是否有感覺 ssh 服務是否有時候會等待很久的一段時間,這是由於 ssh 預設的連線連線模式會進行 IP 反查,如果你的網路速度不夠給力,或是查詢速度過慢,就會花費大量的時間在等待 IP 反查,一般狀況下並不會進行 IP 反解,造成延遲過慢

2016年2月3日 星期三

Nginx:nginx could not build the server_names_hash 處理方式

這幾天在 Nginx 重啟時出現警告訊息:

 

如果在 Nginx 內有大量的域名定義,或是命名特別長的域名定義,就會產生此警告訊息,遇到這個狀況可以調整 server_names_hash_max_size 和 server_names_hash_bucket_size 這兩個參數

 

一般處置只需要調整 server_names_hash_bucket_size 這個大小就可以解決,預設此值 32 / 64,這取決於你的 CPU cache line size

2016年2月1日 星期一

用一張圖上手 python

剛剛在某個網站看到一篇 python 十分鐘上手的文章,裡面包含了一張圖,我覺得很棒,特此紀錄

 

CentOS 用 sosreport 一鍵搜尋所有的系統資訊

最近在編寫 script 的時候找到一個非常好用的工具 sosreport ,sosreport 是用來蒐集系統資訊的工具,並且把所有的功能都模組化

 

而且他是使用 python 2.6 編寫的,完全開放原始碼,是拿來練習非常好用的範本,也可以拿來編寫 script 大量搜尋 Server 資訊

2016年1月26日 星期二

Sublime Text 3 安裝 ConvertToUTF8 (with Package Control) Mac篇

由於常常遊走在兩岸三地的工作,所以目前的 mac 編輯文檔的工具都必須支援 繁簡體的輸入,在 Sublime Text 3 預設並不支援 Big5 和 CJK 的編碼,所以在常常開啟其他文件的時候都會產生亂碼。

 

在此篇紀錄 Sublime Text 3 安裝 ConvertToUTF8 這個套件的過程

 

在新安裝的 Sublime Text 3 必須先安裝 Package Control 這個超級好用的套件,猶如 CentOS 中的 yum

 

2016年1月25日 星期一

BASH 正規表示式 - 筆記

此篇是為了紀錄在 iT邦的系列文章 我與BASH的每一天 裡面所寫的內容非常實用,統整了所寫的內容紀錄正規表示式

 

*代表萬用
find . -name '*.php'

加速 MySQL 的網路連線,關閉 DNS Resolve 解析

最近發現在外部操作 MySQL 在建立連線的時候都會造成大量的 WAN 流量,但實際案例是使用 LAN 的環境在工作,不應該產生 WAN 的流量

 

使用 Wireshark 監控了一段時間發現 MySQL Server 在工作時經常在進行 DNS 查詢,當下判別是在建立連線時 MySQL 在反查 DNS,自然而然的就會往 DNS 去查詢

用 ncftp 來寫 shell script 遞迴上傳整個資料夾

最近在寫 script 的時候,需要使用到上傳整個 local 端的資料夾,在 CentOS 裡內建的 ftp client 是沒有辦法直接用 mput 上傳整個目錄

所以只好安裝另一個 ftp client:ncftp

 

ncftp 是一個很適合用於 script 的 ftp 工具,提供 chmod、put -R、set、lookup 等功能非常使用

 

在本篇的例子中,我必須要做到的是 將本地的 site 目錄底下所有的資料(包含目錄) 一次上傳到 ftp server 中的 shazi.info 資料夾內