顯示具有 網路 標籤的文章。 顯示所有文章
顯示具有 網路 標籤的文章。 顯示所有文章

星期二, 10月 21, 2008

VirtualBox 與 tuntap interface

從純 User 的角度來看,比起 VMWare,VirtualBox 的好處是,不必載入一堆有的沒有的核心模組(只有一個 vboxdrv),而且少了一堆 init script。付出的代價是... 某些方面的設定多了一些,不過這些設定並不複雜,只是麻煩些罷了。

如果您也跟我一樣不想讓 VirtualBox 用內部的 NAT,而是透過 Host Interface 直接上網,可以這麼作。首先假設網路拓樸長這樣:

  1. 增加一個 bridge 介面
    這個根據系統,會有不同的設定。在 Gentoo(baselayout-2)下,請安裝 usermode-utilities 與 bridge-utils,並修改 /etc/conf.d/net 這個檔案:
    config_eth0="null" # eth0 設為 null,並且把其他跟 eth0 有關的設定都拿掉
    bridge_br0="eth0" # 讓 bridge 由 eth0 組成
    config_br0=( "192.168.1.254/24" ) # 改成您的 IP
    #config_br0=( "dhcp" ) # 如果您要讓這台機器走 dhcp
    brctl_br0=(
        "setfd 0"
        "sethello 0"
        "stp off"
    )
    routes_br0=( 'default via 192.168.1.1' ) # 如果用 dhcp,請註解掉。
    fallback_br0=( "apipa" ) # 可有可無...

    ...

    link_ppp0="br0" # 如果有 adsl 撥接,請改成透過 br0。

    ...
  2. 增加相應的 init script
    $ sudo ln -s /etc/init.d/net.{lo,br0}
  3. 修改 /etc/sudoers
    加入以下這行:
    %vboxusers ALL=(ALL) NOPASSWD: /usr/bin/VBoxAddIF, /usr/bin/VBoxDeleteIF
  4. 加入一個 helper script
    放在哪裡都可以。為了讓所有的 User 都可以用,我放在 /usr/bin/VBoxIFManager.sh,別忘了 chmod +x 喔!
    #!/bin/bash

    IF="${1}"
    ACTION="${2}"
    BRIDGE="br0"

    case "${ACTION}" in
    up)
        sudo VBoxAddIF "${IF}" "${LOGNAME}" "${BRIDGE}" > /dev/null 2>&1
        ;;
    down)
        sudo VBoxDeleteIF "${IF}" > /dev/null 2>&1
        ;;
    esac

    echo "${IF}"
  5. VirtualBox 內的設定
    在 Virtual Machine Settings 裡的 Networking 下...
    • Attached to 選 Host Interface
    • Interface name 留空白
    • Setup Application 填入「/path/to/VBoxIFManager.sh vbox0 up」
    • Terminate Application 填入「/path/to/VBoxIFManager.sh vbox0 down」
    其中 vbox0 可以改成任意字串,如 winxp、fbsd、palatis_is_very_handsome 之類的。

星期一, 5月 12, 2008

怠惰的程式員設計的 php template engine

想要從敝系畢業的話,必須先考過系上的程式能力檢定。雖然他有提供練習用伺服器,但是用起來很囉唆,要裝一堆軟體、設定 IP 等等有的沒的。

為了讓拙荊方便練習,上學期中我就抽空寫了個功能目標類似的小網站給她,還有其他程檢沒過的同學們玩。不過... 到最後來玩的都是過的,沒過的都懶得玩 = =

Anyway,這門零學分不上課的必修課可是系上唯一有開暑修的課,意思是說這些沒過的傢伙暑假又得再考一次。於是我想把上學期寫的這個東西拿出來整理一下,看看有沒有可以改進的地方...

想進化的第一個門檻就是,之前寫的時候時間有點趕,整個程式以 procedural 為主,完全沒有考慮到安全性、擴充性、與維護等等議題。首先把 Program 與 Presentation 分開,就需要用到一個 template engine。但是 php 的 template engine 都是 Smarty 一類的大傢伙,我實在不想也懶得把他抓進來放到我這只有兩三個檔案的小專案裡面。於是,這個東西就誕生了!

<?php
// 設定 Template 檔案所在目錄
define('_STUPIDITY_TEMPLATE_DIR_', '/home/username/public_html/project_name/stupidity');

class Stupidity
{
    function assign($key, $value)
    {
        $this->_assigned[$key] = $value;
    }

    function get($key)
    {
        return $this->_assigned[$key];
    }

    function say($key)
    {
        echo $this->_assigned[$key];
    }

    function render()
    {
        global $stupidity;
        include_once(_STUPIDITY_TEMPLATE_DIR_ . '/' .
            $this->template_filename);
    }
}

$stupidity = new Stupidity();

?>

用起來也很簡單,在程式的部份先 include stupidity.php,設定 template filename,assign 資料以後,再 render 就行了:

====== index.php ======
<?php
include('stupidity.php');
$stupidity->template_filename = 'index.stupid';
$stupidity->assign('author', 'Palatis');
$stupidity->render();
?>

====== stupidity/index.stupid ======
<html>
  <head>
    <title>I N D E X</title>
  </head>
  <body>
    <h1>I N D E X</h1>
    <p>Copyright 2008 by <?php $stupidity->say('author'); ?>.>/p<
  </body>
</html>

BSD License!不過我沒有對它作過任何測試,如果爆掉的話就... 好自為之喔!

BTW... 這個檢定系統 Google 會想買嗎?XD~

星期三, 4月 30, 2008

Gentoo 下的 DNS 設定(Modular Network)

在 Gentoo 下,設定網路是那麼容易也那麼的不容易。不經大腦的把 /etc/conf.d/net 砍掉的話,一切就使用美好的預設設定。但是若要更改一點點東西,就很令人 OOXX。

最近想把 dns server 換成 OpenDNS,但是每次 dhcp 跟 ppp 都把我的 resolv.conf 亂改成自己想要的內容(如 192.168.1.1 或 hinet dns),真是令人火大。

好在有 openresolv 這個好東西,裝了以後就沒煩惱了!雖說這個主要是給 vpn 用的...

首先安裝:

# emerge openresolv

然後設定:

# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a $INTERFACE

請把 $INTERFACE 換成您的 interface,如 eth0 或 ppp0:

# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a eth0
# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a ppp0

然後讓他更新:

# resolvconf -u

這麼一來,就可以用 OpenDNS 查 domain name 了!

# host -v palatis.iiiii.info
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55262
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN A

;; ANSWER SECTION:
palatis.iiiii.info. 28 IN A 220.141.34.251

Received 52 bytes from 208.67.222.222#53 in 157 ms
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14133
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN AAAA

Received 36 bytes from 208.67.222.222#53 in 156 ms
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16198
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN MX

Received 36 bytes from 208.67.222.222#53 in 168 ms

星期一, 6月 04, 2007

喂喂,別盜用我的無線網路!

在 oftc 的 #dot,pnt 兄分享了一篇文章。

喂喂!這也太狠了吧?XD~

看吧,只要稍微學會 Linux,你就可以做這種事惡整盜用你家 wlan 的鄰居!

星期日, 3月 25, 2007

netconsole & syslog-ng

最近我的筆電動不動就 kernel panic,也不知道到底出了什麼問題。想看 backtrace 也不行,因為總是在 X 底下死掉,沒有 console 讓我看 log。而 kernel panic 的時候 print 出來那些東西,也不會跑進 syslog 裡。所以啦,只好讓他 log 到 remote 了...

其實,在 Gentoo 要用 netconsole 是很簡單的。因為是 "NET"console,所以當然會有一台 client 一台 server。首先假設我們的環境看起來像這樣:

  • Server:192.168.1.1:6667
  • Client:192.168.1.99:6665

Client 端(Kernel module 與 cancd)

首先在 client 上,編譯核心的時候,選擇 netconsole 模組(記得選 M 唷!):

  Device Drivers  --->
    Network device support  --->
      <M>   Network console logging support (EXPERIMENTAL)
      [*] Netpoll support for trapping incoming packets
      [*] Netpoll traffic trapping

好啦,雖然我不知道最下面兩個是幹嘛的,不過還是把他們打開吧(反正打開也不用錢...)!順便打開 Magic SysRq:

    Kernel hacking  --->
      [*] Magic SysRq key

編譯並安裝,請把 {N} 替換為您的 cpu core 數量 +1:

# make modules -j{N} && make modules_install

然後,裝上 cancd(CA NetConsole Daemon)...

# emerge cancd -va

設定 /etc/conf.d/netconsole:

# 填入 Server 的 IP,這裡以 192.168.1.1 為例:
TGT_IP='192.168.1.1'

# 與該 IP 對應的 device
DEVICE=eth0

# 如果沒寫的話,會用該 device 的第一個 IP 位置。
# 如果該設備在開機時不會拿到 IP 位置,則您必須在這裡輸入它。
SRC_IP=''

# Client 要使用的 Port,可以隨便給。以下為預設值!
SRC_PORT=6665

# Server 端的 Port,當然要與 Server 上設定的相同
TGT_PORT=6667

# 如果要使用廣播,則輸入 'broadcast'。但是要注意安全性!
# 我們不用,所以就不輸入了...
TGT_MAC=''

# 紀錄的等級,從 [0..7] 分為:
# EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG
# 恩... 我選了 7 (DEBUG)
LOGLEVEL='7'

將 netconsole 加入 default runlevel 並啟動它...

# rc-update add netconsole default
# /etc/init.d/netconsole start

「咦~」您也許會問,「就這樣丟 log 出去不會連線失敗嗎?那 Server 咧?」。別急別急,反正也不會直接有訊息丟出來(唔,如果您很倒楣的,Client 在此時 Kernel Panic 了,那我只能說很抱歉 = =),馬上接著來設定 Server!

Server 端(Syslog-ng)

編輯 /etc/syslog-ng/syslog-ng.conf,「加入」以下設定(別把上面之前的東西刪掉喔,不然本來系統的 log 就不知道要記到哪裡去了 = =):

# 首先是 ip 與 port,如果不知道要改哪裡,
# 請把 Linux 分區 format 掉,去買套 Windows Vista。
source net_src { udp(ip(192.168.1.1) port(6667)); };

# 在這裡設定紀錄檔,此以 /var/log/net_msgs 為例。
destination net_msgs { file("/var/log/net_msgs"); };

# 接著是要從哪裡紀錄到哪裡...
log { source(net_src); destination(net_msgs); };

# 如果要順便寫到 tty12,就加入以下這行:
# (一般來說都是 tty12 吧?要看之前上面的設定。)
log { source(net_src); destination(console_all); };

好啦,重新啟動 syslog-ng 吧!用 reload 他就會重新讀取設定檔了,不必用 restart。

# /etc/init.d/syslog-ng reload

測試一下!

恩... 我想,您剛才應該有把 Magic SysRq 打開吧?如果有的話,請在 Client 按下 Alt-SysRq-m,然後去 Server 看一下 /var/log/net_msgs 從 Client 傳來的訊息!

星期二, 2月 13, 2007

圖片加密函式庫

最近獨孤木前輩弄了個 Diggirl.Net 出來,服務的內容... 恩... 連過去玩一圈就知道了。於是,就搞得一些相簿的主人不開心了!

其實,我也認為任何資料只要放到網路上(應該說,資料公開以後),就不能再做什麼進一步的禁止行為了。因為網路本身是一種類似「群播(broadcast)」的機制,放出去的東西就是放出去了,沒什麼好限制的。就好像你想到台北車站前面大喊「我腦殘啊!」,卻又不想讓任何人聽到,是不可能的事情一樣。所以,圖片如果不想流出去,就好好收在自己的硬碟裡吧!

Okay... 以上是前言,接下來進入我實際想到的東西。

也許,在某些時候,你會希望能在相簿上分享某些圖片,卻又只想給指定的某些人看到。其實有很多 PKI 早已行之有年,也在很多關鍵應用上扮演重要的角色。所以,應該也可以應用到這個狀況上來!

讓我們拿 Alice 跟 Bob 來當例子,他們是我眾多虛擬朋友中的兩位:

Alice 想傳一些裸照給 Bob,可是又怕被別人看。因為有幾萬張照片要傳,用 email 又太花時間了。於是,她決定選用由 Palatis Inc. 所開發的圖片加密函式庫!

首先,他使用程式提供的兩套軟體,產生適當的 keypair,並使用該 keypair 將資料加密:

  1. 使用函式庫提供的 keygen 產生 keypair (pubkey, prikey)
  2. 將自己的裸照 (naked*.{jpg,png,gif,bmp,tiff, ... }) 經程式轉為 bitmap (naked*.bmp),並使用 pubkey 加密以後,轉回 png 一類非破壞性壓縮的圖檔 (naked*_secured.png)。於是,轉出來的東西用其他圖形函式庫看起來,就像是白胡椒鹽撒在黑胡椒鹽(... 總之就是胡椒鹽)上一樣。

再來,將這些胡椒鹽照片傳送到適合大量下載的網路空間(如網頁、相簿、ftp、bt)上。

使用另外的管道(如 email)將 prikey 送給 Bob,並祈求 Bob 不會把她的裸照洩漏出去。當然,該 email 會用其他軟體(如 GnuPG)加密。(或簽章,否則 Bob 可能也不知道收到的是否真的是 Alice 的裸照。)

Bob 本來去 Alice 的相簿看到的只是一堆胡椒鹽的裸照,但是當他拿到 Alice 送來的 prikey 以後,世界頓時亮了起來!

  1. Bob 把 Alice 給他的 prikey 放到函式庫搜尋 key 的資料夾(如 /home/bob/.libsecreatpic/received_keys/)底下。
  2. 然後用他心愛的網頁瀏覽器(順便廣告一下 Firefox!)開啟 Alice 的相簿。

Yeah~胡椒鹽都不見了,取而代之的,是 Alice 性感火辣(?)的曲線!

至於實做細節的部份,因為沒空,所以以後再想 *flee*。

星期二, 9月 19, 2006

你會上網買新台幣 $236,600,000 的東西嗎?

知名網路公司 PCHome 在網路上賣遊艇耶!

有誰會在網路上買一台價值超過兩億三千萬的遊艇呢?即使買了,要怎麼付錢呢?如果刷卡,有什麼卡一個月可以刷六百五十萬(36 期 0 利率)的嗎?如果有,我還真想知道 XD~~

照 PCHome 標錯價格的機率,等他少標個幾個零就可以趕快去下標了。

星期六, 4月 08, 2006

盡信新聞不如無新聞

嗯... 不是因為它說 Linux 壞話我才跳出來,是因為這起新聞「IThome - 愚人節駭客惡搞Linux網站」(相關的還有「中時電子報:一至四日 入侵比例佔全球七成 攻擊台灣 國際駭客發動網路戰」等)實在太扯了。

根據中華民國著作權法的第九條,新聞著作可以全文引用。為了避免這些新聞網站怕丟臉撤下原 post,所以這裡把中時的報導貼過來(因為它比較短...)。

2006.04.06  中國時報
一至四日 入侵比例佔全球七成 攻擊台灣 國際駭客發動網路戰
趙國明/台北報導

台灣的電腦資訊能力世界聞名,卻被國際電腦駭客組織列為主要侵入攻擊目標。調查局日前發現,國內共有近二百個網站遭到自稱un-root的國際駭客組織入侵,並置換網站首頁,受害單位包括政府部門、民間企業及學校,台灣已被國際駭客組織列為全球主要的攻擊入侵目標之一。

調查局指出,自四月一日至四月四日,陸續發現國內網站遭到自稱un-root的國際駭客組織入侵,並置換網站首頁,受害單位包括政府部門、民間企業、大學院校、國中小學,初步研判應是駭客為了證明自己的駭客功力,所進行的炫耀式攻擊。

調查局電腦犯罪偵辦科目前除針對尚未恢復的網站進行通知,並針對遭入侵網站進行清查過濾及分析比對,以進一步瞭解攻擊發生的原因與駭客入侵之目的,是否有重要政府機密資料或企業機密遭竊。

近二百個網站遭攻擊

調查局經分析後發現,此次受攻擊的網站遍佈全世界,共約有三百多個網站遭受攻擊,台灣部分則近二百個網站,接近七成,顯然台灣已經成為亞洲地區,甚至於是全世界主要的被攻擊國家,其中九五%的電腦設備是以Linux系統為主。

過去一般使用者的電腦作業系統多是安裝微軟視窗(Windows)平台,但隨著開放原始碼的興起,企業基於預算的考量,免費的Linux逐漸成為市場的主流,但是因為Linux的維護與防毒能力大多是靠有志之士自動自發的維護,品質難以與微軟視窗作業系統匹敵,也自然成為駭客攻擊的對象。去年以前,Linux遭受攻擊的比率還低於兩成,現在因為使用逐漸普及,導致攻擊的頻率逐漸升高,目前已接近四成。

防駭危機感亟待加強

調查局在處理類似案件時,曾與某重要的資訊安全A級單位(資訊安全要求最高的等級)聯繫,通知可能因為網站權限設定有問題,導致任何人都可以在網站上放入任何的檔案,該單位卻質疑表示權限本來就是開放的,不以為意,令調查局對國內資訊防駭觀念的淡薄,深感憂心。

網頁遭駭客置換的情況最易被發現,據現有網頁遭攻擊情形分析,台灣地區每月約有五百至一千個網站遭駭客置換成功,但潛在性的犯罪黑數更難發現,尤其是被植入木馬的狀況恐怕更為嚴重,這種入侵方式從外觀上很難發現,此類入侵事件,可能遠遠超過置換網頁模式的數十倍。

而根據 chihchun 的調查,其中許多東西都是胡扯亂寫的。

其中提到,台灣地區有兩百餘網站被入侵(接近七成)一事,根本就是胡扯。一般人以為「網址不同 = 不同伺服主機」就算了,寫資訊新聞的人不知道就該抓去重修電腦網路。不同 dn 是可以指向相同一個 ip 的。如 palatis.blogspot.com 與 freesamael.blogspot.com。在 4/1 ~ 4/4 被攻擊的兩百個台灣網站,其實只是兩百個不同的 dn,實際上只有 17 台機器。

再者,文中也提到被攻擊的機器中有 95% 是 Linux 機器........ 他們是眼睛瞎了看不到統計資料中那堆 Win 2003 嗎!?好啦,如果只算台灣區 + 兩百個網站被入侵來算,的確是 95%。可是這只能推斷出兩點 - (1) 台灣的公司為了省錢大部分都用 Linux,可是卻沒請網管(或是請到等於沒請的網管)。(2) 台灣的網管普遍 Linux 訓練不足。

不過政府機關的資安控制也很扯,之前總統府網站也曾經被入侵,宣佈 4/1 愚人節為國定假日放假一天。後來查出是一名高中生做的,而當時的總統府網站跑的是 Windows 2000。政府的作法是最後把總統府網站丟給中研院管理。