GeoIP installation for PHP on Ubuntu 16.04

Installing GeoIP Module On Apache2, Ubuntu 16.04

  1. 以下面這個指令尋找Geoip的相關程式:
    apt search geoip
    

    將會從相關的套件裡找到 libapache2-mod-geoip

  2. 進行套件安裝與更新
    apt update
    apt upgrade
    apt install geoip-bin geoip-database libapache2-mod-geoip libgeoip1
    

    新增後,會產生 /usr/share/GeoIP/ 目錄。

  3. 下載GeoIP資料庫
    cd /usr/share/GeoIP/
    ls
    rm GeoIP.dat
    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
    gunzip GeoIP.dat.gz
    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
    gunzip GeoLiteCity.dat.gz
    wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
    gunzip GeoIPASNum.dat.gz
    

    在 /usr/share/GeoIP/ 目錄裡,會有三個檔案GeoIP.dat, GeoLiteCity.dat, GeoIPASNum.dat。

  4. 更新apache2的geoip設置:nano /etc/apache2/mods-enabled/geoip.conf
    GeoIPEnable On
    GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
    GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat
    GeoIPDBFile /usr/share/GeoIP/GeoIPASNum.dat基本上就已經設定完成。
  5. 重新啟動apache2
    apachectl -t
    sudo systemctl restart apache2.service

最後做一個範本試試看:

<?php 
$geoip_country_code = getenv(GEOIP_COUNTRY_CODE);
$geoip_country_name = getenv(GEOIP_COUNTRY_NAME);
$geoip_region = getenv(GEOIP_REGION);
$geoip_city = getenv(GEOIP_CITY);
$geoip_postal_code = getenv(GEOIP_POSTAL_CODE);
$geoip_latitude = getenv(GEOIP_LATITUDE);
$geoip_longitude = getenv(GEOIP_LONGITUDE);
 
echo 'Country code: '.$geoip_country_code.'&lt;br&gt;';
echo 'Country name: '.$geoip_country_name.'&lt;br&gt;';
echo 'Region: '.$geoip_region.'&lt;br&gt;';
echo 'City: '.$geoip_city.'&lt;br&gt;';
echo 'Postal code: '.$geoip_postal_code.'&lt;br&gt;';
echo 'Latitude: '.$geoip_latitude.'&lt;br&gt;';
echo 'Longitude: '.$geoip_longitude.'&lt;br&gt;'; 
?>

大功告成!!

如何在NGINX+DJANGO平台設置SSL連線

於Django應用程式裡採用HTTPS對於保護用戶數據非常重要。 如果網頁應用程序具有用戶身份驗證,就是使用HTTPS的最好的理由。 否則,用戶名和密碼將通過HTTP以純文本格式傳播。 這意味著如果用戶使用公共互聯網連接,並且他登錄您的應用程序,他很容易受到駭客偷襲。

重要的是不僅安全的登錄,密碼更改和支付頁面與HTTPS,以及整個應用程序。 以下說明,將指導完成所有必要的步驟,以正確保護您的Django應用程式。

建立一個SSL證書

第一步是為您的Django應用程式獲取SSL證書。 有幾個選項:您可以生成自己的證書,您可以從Let’s Encrypt獲得一個免費的證書,或者您可以從互聯網上的許多公司購買一個證書。

在本教程中,我將使用從Namecheap註冊的Positive SSL的簡單商業SSL證書。

產生一個CSR代碼

CSR代表證書簽名請求,它是一個通常在服務器端生成的base64編碼數據。因為我們將使用Nginx作為web服務器,我們將使用openssl。

通常CSR openssl配置默認包含如下內容:

公共名稱(應頒發域名證書)
國家
州(或省)
地點(或城市)
組織
組織單位(部)
電子郵件地址

請在ssh的terminal上執行下列指令來產生CSR代碼:

openssl req -new -newkey rsa:2048 -nodes -keyout simpleacademy.key -out simpleacademy.csr

請注意,simpleacademy可以改為自己網域的名字
接著輸入相關訊息:

Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:The Solar Systems Limited
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:simple.academy
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Simple is Better Than Complex

完成後就會產生兩個檔案,CSR跟KEY兩個檔案。
然後可以到NameCheap的Positive SSL來啟動有效的SSL認證金鑰。其他內容不再多做說明

安裝有效SSL金鑰

將驗證過的CSR與KEY放置到ㄧ個目錄,例如:/etc/nginx/ssl。

接著修改virtualhost的設定。

upstream simple_academy_server {
  server unix:/opt/simple_academy/run/gunicorn.sock fail_timeout=0;
}

# Redirect all non-encrypted to encrypted
server {
    server_name simple.academy;
    listen 80;
    return 301 https://simple.academy$request_uri;
}

server {
    server_name simple.academy;

    listen 443;  # <-

    ssl on;  # <-
    ssl_certificate /etc/nginx/ssl/simpleacademy_cert_chain.crt;  # <-crt所在位置
    ssl_certificate_key /etc/nginx/ssl/simpleacademy.key;  # <-key所在位置

    client_max_body_size 4G;

    access_log /opt/simple_academy/logs/nginx-access.log;
    error_log /opt/simple_academy/logs/nginx-error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;  # <-這個很重要,記得加入
        proxy_set_header Host $http_host;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://simple_academy_server;
            break;
        }
    }
}

這樣基本上就完成了!!

Mikrotik RouterOS設定OpenVPN,支援Windows、macOS、Android、與iOS

設備:Mikrotik RouterBoard RB2011UiAS-RM
1111_l

RouterOS版本:v.6.37.3 Released on 2016-Nov-28

  1. 首先於RouterOS設置Certificate憑證,這是設定OpenVPN最重要的步驟,Mikrotik介紹兩種方式,詳情參考這個網頁,一種透過CACert.org,另一種由OpenVPN提供的工具easy-rsa工具來產生的certificate憑證。這裡介紹第二種easy-rsa的方式,並且在windows上的openvpn client來產生的憑證。
  2. 到OpenVPN網站下載OpenVPN Client for Windows,下載安裝後,假設安裝的目錄於C:\Program Files\OpenVPN
  3. 以Administrator(系統管理者)的權限打開cmd視窗,然後cd到C:\Program Files\OpenVPN\easy-rsa目錄。
  4. 執行以下指令:
      1. init-config (只要執行一次即可,主要是複製環境設置的批次程式)。
      2. vars(設定環境設置)
      3. clean-all清除
      4. build-dh(產生表頭DH檔案)
      5. build-ca(產生CA,Certificate Authority憑證)

    snip20161214_1
    snip20161214_2

  5. 產生的憑證存在於keys這個子目錄,D:\Program Files\OpenVPN\easy-rsa\keys,將這個目錄下的ca.crt與ca.key取出來,準備上傳到RouterOS。
    snip20161214_3
  6. 上傳到RouterOS的檔案夾之後,開啟終端機(terminal)執行下面兩個指令將憑證匯入到系統裡:
    [jerry@routeros] /certificate>import file=ca.crt
    [jerry@routeros] /certificate>import file=ca.key
  7. 在Winbos或網頁管理介面檢查是否匯入正常
    snip20161214_4
  8. 若匯入正常則前面標籤為KT。
  9. 接著設定OPENVPN,利用WINBOS/網頁,按下PPP –> OVPN Server,再依照下面圖示輸入並選擇:PORT, Mode, Certificate的憑證,以及最後面支援的認證加密方式即可。
    snip20161214_7
  10. 設定帳號、Profile、IP POOL、與防火牆就不在此多做敘述,可參考這個地方

Windows客戶端設置:

  1. 先下載客戶端軟體:點擊到下載處,下載後安裝過程不再敘述。
  2. 將RouterOS的ca.crt與ca.key兩個檔案下載,並存放到客戶端軟體安裝目錄下的config位置,例如D:\Program Files\OpenVPN\config,另外製作一個auth.cfg,這檔案存放登入的帳號密碼,格式如下:
    user1
    1234
    

    user1:帳號, 1234:密碼

  3. 在同一個目錄再製作設定檔,副檔名必須為ovpn例如client.ovpn,內容如下範例:
    client
    dev tun
    proto tcp
    remote "xxx.xxx.xxx.xxx" 1194
    ca ca.crt
    keepalive 10 120
    cipher AES-256-CBC
    auth SHA1
    auth-user-pass auth.cfg 
    verb 5
    ;push "redirect-gateway local def1"
    ;push redirect-gateway
    route 0.0.0.0 0.0.0.0 192.168.89.1
    
  4. remote 後面接routeros的網址,後面連接的Port位置。
  5. ca 就是告知憑證的地方
  6. auth-user-pass告知採用帳密方式登入,帳密則儲存於auth.cfg這個檔案。
  7. 一般採用push redirect-gateway或push redirect-gateway local def1就可以指定把所有流量導入vpn接口,但有時候採用無線網路或其他網路會更改WAN時無效,所以可以加入route指令強迫將default gateway轉入。
  8. 到此基本上已經完成,只要在下面的icon點擊,按右鍵在按下connect即可連線。

snip20161214_8

snip20161214_9

最後確認是否連線,只要打開cmd視窗,執行tracert www.hinet.net看看是否從routeros出去即可。

macOS客戶端設置:

    1. 首先,下載客戶端軟體:按這裡
    2. Tunnelblick.com是個開放原始碼的軟體,好用又方便,比OpenVPN Connect好用許多。
    3. 下載安裝後,仍採用ovpn設定檔進行匯入,設定檔的範例如下:
      client
      dev tun
      proto tcp
      remote xxx.xxx.xxx.xxx 998
      ca /Users/xxxxx/openvpn_files/ca.crt
      keepalive 10 120
      cipher AES-256-CBC
      auth SHA1
      auth-user-pass /Users/xxx/openvpn_files/auth.cfg
      verb 5
      push redirect-gateway
      
    4. 首先也是要把routeros的ca.crt與ca.key放到一個指定目錄,例如:自身的目錄底下做一個openvpn_files的子目錄,把ca.crt, ca.key放到這裡,另外,帳密檔案(前面已述)也放在同一個目錄,然後依照上面的設定檔指定位置即可。
    5. 另外,auth.cfg如windows所述,也要放在同一個目錄下。
    6. 最後用push redirect-gateway來告知流量都要往vpn導入,但是還有個地方必須設定才可以,在設定裡要把第一項,如下圖,打勾才行!!snip20161214_10
    7. 以上設定好基本上就已經完成,再依照下面方式點擊登入即可。

snip20161214_11

 

Android客戶端設置:

首先,須先製作一個設定檔,此設定檔可以提供Android與iOS來使用,除了類似Windows/macOS的寫法外,最主要把ca內容也寫進去,就不再提供ca.crt/ca.key兩個檔案了。因此,只要匯入此設定檔與auth.cfg即可。

client
dev tun
proto tcp
remote xxx.xxx.xxx.xxx 998
keepalive 10 120
cipher AES-256-CBC
auth SHA1
auth-user-pass auth.cfg
verb 5
redirect-gateway
<ca>
-----BEGIN CERTIFICATE-----
MIID6TCCA1KgAwIBAgIJAMdQ8zo5QJVoMA0GCSqGSIb3DQEBCwUAMIGqMQswCQYD
VQQGEwJUVzELMAkGA1UECBMCVFcxDzANBgNVBAcTBlRhaXBlaTEiMCAGA1UEChMZ
<<<< ca.crt裡面的內容拷貝複製到這個地方>>>>
yWXDkv30Z7gfDCiZcJcF5PfROJeDpPQoVIgRTOzCAz8N3+awWIkRLUyFCk3FWiBH
CO6mikuz8szxhtNNZZkntnEsFyjW3s0aGuYSzQAJ3Rp2XRiYm7X5sPerBGTL
-----END CERTIFICATE-----
</ca>

<key>
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOmHGjK2riMqBq4+
JgSUNJqKoz9fz9SY3Wsol423syUZNNX4htlLP/XtJ6U9r0f4Rqr+P/YaXb4c8AAc
<<<< ca.key裡面的內容拷貝複製到這個地方>>>>
gw7RBGga25wpEyRFyPIoGP5oG7uEsBlv0wRdzLr/7dqORIXWVXH01xkCQDpWw9zW
J+3h8UyEWKIaeIMsffxchQzjpxFqr5w/NBAcZdJUndExpPb5c6dDWT5la0wjo/un
up1QejfWdFR9vuU=
-----END PRIVATE KEY-----
</key>
接著到GOOGLE PLAY下載軟體:GOOGLE PLAY
然後,將此設定檔(xxx.ovpn)與auth.cfg透過usb,拷貝到一個目錄下,然後打開openvpn app,進行匯入
import --> import Profile from SD card,然後選擇所存放的目錄,找到該ovpn檔案,進行匯入即可。
接著按下Connect即可連線到RouterOS的VPN Server

iOS客戶端設置:

App下載網址:iTunes App Store

iOS的設定檔與Android可共用,就不再多述。只要將設定檔與auth.cfg匯入即可。方法如下:

將iPhone/iPad連到電腦,打開iTunes,然後將這設定檔與auth.cfg複製到OpenVPN的地方,如下所示,即可。

snip20161214_12 然後在iPhone/iPad打開openvpn,即會出現設定檔的名稱,加入即可。

Mac OS X 設定NAT與port forwarding

Mac OS X版本:OS X El Capitan 10.11

Mac OS 的防火牆軟體在10.10已經將IPFW取消,改用OpenBSD的PF,有關PF的User guide 可參考:https://www.openbsd.org/faq/pf/,或在此下載PDF說明。

PF 原則上在Mac OS X都會自動啟動,如果不讓PF於開機時啟動,可以執行下面的指令:

# rcctl disable pf

重啟Mac即可生效。

下面二個指令可啟動與關閉PF功能:

# pfctl -e
# pfctl -d

PF於系統開機時(Booting),會讀取pf.conf這個設定檔(位於 /etc/pf.conf),透過rc的scripts來載入的。主要也是透過pfctl這個指令來執行設置。其他常用的pfctl指令如下:

# pfctl -f /etc/pf.conf 載入pf.conf這個設定檔
# pfctl -nf /etc/pf.conf 解析/etc/pf.conf這個設定檔,但不載入
# pfctl -sr 顯示目前防火牆的設置
# pfctl -ss 顯示現在連線狀態
# pfctl -si 顯示過濾狀態以及統計
# pfctl -sa 顯示所有狀態訊息
其他完整的指令可按下這裡進行詳閱

以下僅針對pf.conf有關NAT與Port Forwarding的防火牆設置的簡單說明:

順序很重要,Port Forwarding的指令必須在NAT之前,否則會出現錯誤訊息

Port forwarding:

若要將ppp連線或對外接口的特定port轉換到內網某個特定IP的特定port,例如:tcp 9922轉換到內網192.168.1.5的ssh (port 22)則設定為:

rdr on ppp0 proto tcp from any to 222.3.15.2port 9922 -> 192.168.1.5 port 22

外網的IP為222.3.15.2,當外面連接這個地址port 9922則轉到192.168.1.5 port 22這個位址:

rdr on ppp0 proto tcp from any to 222.3.15.2 port 1935 -> 192.168.1.18

則連接到外網222.3.15.2的port 1935則轉到192.168.1.18的相同位址(port 1935)。

NAT讓內網可以透過這台MAC連上Internet

nat on ppp0 from 192.168.1.0/24 to any -> 222.3.15.2
pass from 192.168.1.0/24 to any keep state

222.3.15.2為外網IP,以上定義內網192.168.1.0/24皆可轉為222.3.15.2外網IP直接連上Internet

 

『華藏淨宗學會』專用播放器開發完成

滑動2

個人第一次以Adobe Flash Builder開發的Adobe AIR for Desktop應用程式,也學習了許多Flex開發所需要的編程技巧。例如,利用Flex外掛as3corelib.swc  用來解析JSON (JavaScript Object Notation)、Flash HTTPService的安全性問題、VideoPlayer物件在進行Live直播所遭遇到bug,因而改用VideoDisplay進行開發播放器、檔案管理、下載文件…等等問題。都在此次編程1200多行程序列裡,鍛煉自己在編程上的功夫。

程式碼(源代碼)有興趣的,可發郵件一起分享。已編譯好的程式,可在下面連結,直接下載:

http://www.thesolarsystems.net/downloads/hwadzan.exe — Windows環境安裝程式。

http://www.thesolarsystems.net/downloads/hwadzan.dmg — MacOS環境安裝程式。

http://www.thesolarsystems.net/downloads/hwadzan.air — 若已安裝Adobe AIR可直接下載此程式快速安裝。

爾後不定時發佈此程式源代碼的部分說明,請先進不吝賜教。