2010年7月25日 星期日

網路封包分析的好幫手—Wireshark 擷取分析、防範攻擊無所不包

http://www.netadmin.com.tw/index.asp
文.蔡一郎

資訊安全是近幾年相當熱門的話題,在一個封閉的網路環境中,才有可能實現一個絕對安全的網路環境, 在網際網路中是不太可能存在這樣的條件。目前,網路環境中大多建置了各式各樣的網路安全設備,如防火牆(Firewall)、入侵偵測防禦系統 (IPS)、內容閘道器(Content Gateway)等,這些設備大多只能夠針對已知的特徵進行過濾和阻擋惡意行為,對於新型態或無法明確定義特徵的行為,則幾乎都達不到防護的要求。
網路封包的解析是目前經常用來解決現有設備不足的最佳方案。分析網路封包,除了能夠找出 異常的行為和網路流量之外,也可以用來學習各種不同通訊協定,是網路管理人員不可或缺的技能。網路提供使用環境,人類是網路的使用者,許多在真實社會發生 的事件,仍然會在網路上重演,但是更為隱匿,這也是發展資訊安全技術的重點所在。

認識網路封包分析

網路封包是目前網路用來傳送資料的最小單位。封包因為不同的應用服務或通訊協定,而有各種不同的大小。一個封包由標頭(Header)和資料(Data) 所組成,封包的屬性被詳細地定義在標頭中,包括所使用的通訊協定、來源的IP位址、來源的通訊埠、目的地的IP位址、目的地的通訊埠等欄位,不過並非所有 的通訊協定都有相同的欄位資料,由於採用不同的通訊協定,網路封包的結構都有些許的差異。

在網路上傳送網路封包,路由器(Router)主要是依據封包標頭所記載的目的地IP位址進行路由的交換,以確定依據目前的路由表(Routing Table)能夠將封包送到目的地。因此,在網路架構中的適當位置擷取網路封包,就可以取得相關的資訊進行行為分析。目前常見的網路封包分析工具有 Tcpdump、Sniffer、NetXRay、Wireshark(Ethereal)等,其中Wireshark雖然屬於Open Source軟體,但是所具備的功能卻足可媲美許多商業軟體。在GNU GPL通用授權的保障之下,使用者可以免費取得軟體及其程式碼,並擁有修改原始碼與客製化的權利。

一般而言,之所以想要解析網路封包,大致上有以下幾種原因:瞭解電腦網路目前進行的動作、監聽側錄另一台電腦網路連線、瞭解網路程式如何運行以及學習網路 通訊協定。透過網路封包的工具,使用者可以掌握目前網路上的通訊和使用者行為模式。準備擷取網路封包時,必須配合Hub、Y-TAP或Switch進行網 路介面的對應,這是因應Switch本身設備的特性而必須進行的設定。大多數中高階的交換器都會提供Port Mirror或Port Mapping功能,這樣才能夠確保安裝網路封包分析工具的設備能夠正確地擷取到網路封包。

▲網路的架構圖

網路封包分析工具(Network Packet Analyzer)並不是入侵偵測(防禦)系統,既不會對擷取到的網路封包提出警告,當然也不可能針對任何網路封包進行阻擋的動作。網路封包分析工具主要 是解析網路封包,透過軟體的介面解析網路封包,以呈現使用者真實的網路行為。

通訊協定簡介

因應不同的網路服務,目前網路使用相當多不同類型的通訊協定,這些通訊協定可以視為「溝通」的語言,讓資訊透過相同的語言在網路上進行交流,以下列舉出在網路層、傳輸層與應用層常見的通訊協定。

TCP/IP的架構 通訊協定
網路層 IP(IPv4,IPv6,IPv9)、OSPF、IS-IS、BGP、IPsec、ARP、RARP、RIP、ICMP、ICMPv6等
傳輸層 TCP、UDP、DCCP、SCTP、RTP、RSVP、IGMP、PPTP等
應用層 DHCP、DNS、FTP、Gopher、HTTP、IMAP4、IRC、NNTP、XMPP、POP3、SIP、SMTP、SNMP、SSH、TELNET、RPC、RTCP、RTSP、TLS、SDP、SOAP、GTP、STUN、NTP等
連結層 Ethernet、Wi-Fi、MPLS等

目前網路上有許多不安全的通訊協定,這些通訊協定大多採用明碼的方式傳送,經常造成資訊外洩,如HTTP、TELNET、POP、SMTP等。這些通訊協 定也都應用在常見的網路服務,包括網頁瀏覽、電子郵件接收與傳送,以及遠端管理連線等。傳統的網路服務程序,因為在網路上用明文傳送數據、用戶帳號和用戶 密碼,很容易受到中間人(Man-in-the-middle)方式的攻擊。

TCP是目前網路上最常見的通訊協定,屬於TCP/IP模型中的Application Layer(應用層),能夠確保資料正確可靠地傳送到目的地,TCP連接包含連線建立、資料傳送和連線終止三個狀態。必須完成三向交握,才能夠建立連線。

Client→Server 發送 SYN
Server→Client 發送 SYN/ACK
Client→Server 發送 ACK

HTTP(HyperText Transfer Protocol)是一種網際網路上應用相當廣泛的網路協定,使用者端和伺服端之間可以透過HTTP來傳輸資料,因為在瀏覽大多數的網站時,都會採用網域 名稱的方式,因此在整個建立連線的過程,會先查詢DNS。使用UDP 53埠向系統設定的DNS伺服器進行查詢,待取得解析後的IP位址後,才會進行TCP三向交握的處理,以建立使用者端與伺服器端的連線。

▲HTTP通訊協定

Telnet協議是TCP/IP協議族中的一員,是Internet遠端登入服務的標準協議和主要方式,傳統Telnet連線通訊所傳輸的資料並未加密, 這代表所輸入及顯示的資料,包括帳號名稱和密碼等隱密資料,可能會遭其他人竊聽,因此目前大多數設備都已經使用安全遠端登入的通訊協定SSH來取代 Telnet。由於SSH採用了加密的機制來保護所傳送的資料,因此透過Wireshark就可以很容易地發現SSH所傳送的網路封包,其內容都經過加密 處理,不像Telnet使用明文的方式來傳送資料。

Wireshark簡介

Wireshark的前身就是大名鼎鼎的Ethereal,目前最新的版本是1.0.2版,各位可以直接到Wireshark的官方網站 (www.wireshark.org)下載,在網站上提供了許多不同作業系統的版本,可以安裝在各種常見的作業系統中,在資訊安全領域 中,Wireshark被廣泛應用在網路封包的解析,目前已經能夠解析超過七百種的通訊協定,所以對於目前網路上所使用的通訊協定,幾乎都能夠辨識與解 析。此外,Wireshark也結合了強大功能的過濾器,讓使用者可以針對特定的目標分析網路封包,有助於通訊協定的行為研究與異常行為的偵測。

▲Wireshark官方網站(www.wireshark.org)

Wireshark也支援其他軟體所擷取下來網路封包檔案,以下是目前能夠支援的格式,幾乎涵蓋了所有常見的工具軟體:

libpcap, tcpdump and various other tools using tcpdump's capture format
Sun snoop and atmsnoop
Shomiti/Finisar Surveyor captures
Novell LANalyzer captures
Microsoft Network Monitor captures
AIX's iptrace captures
Cinco Networks NetXray captures
Network Associates Windows-based Sniffer and Sniffer Pro captures
Network General/Network Associates DOS-based Sniffer (compressed or uncompressed) captures
AG Group/WildPackets EtherPeek/TokenPeek/ AiroPeek/EtherHelp/PacketGrabber captures
RADCOM's WAN/LAN Analyzer captures Network Instruments Observer version 9 captures
Lucent/Ascend router debug output
HP-UX's nettl
Toshiba's ISDN routers dump output
ISDN4BSD i4btrace utility
traces from the EyeSDN USB S0
IPLog format from the Cisco Secure Intrusion
Detection System
pppd logs (pppdump format)
the output from VMS's TCPIPtrace/TCPtrace/ UCX$TRACE utilities
the text output from the DBS Etherwatch VMS utility
Visual Networks' Visual UpTime traffic capture
the output from CoSine L2 debug
the output from Accellent's 5Views LAN agents
Endace Measurement Systems' ERF format captures
Linux Bluez Bluetooth stack hcidump -w traces
Catapult DCT2000 .out files

如果之前使用過上述的軟體擷取好檔案,就能夠直接透過Wireshark開啟並且運作所提供的各種過濾器與統計分析的功能進行處理,解決原工具可能無友善 使用者介面的問題,例如純文字模式的tcpdump就無法提供像Wireshark一樣強大的過濾器與圖形介面。將tcpdump的檔案載入到 Wireshark中,就能夠快速針對封包的內容與網路封包所隱藏的行為進行分析,使用上相當的方便。

Wireshark的操作介面

Wireshark雖然不是商業軟體,但是所提供軟體介面相當優秀,具備完整的過濾器和統計分析的功能。其操作介面分成幾個主要的部份,包括最上方的功能 表和各種工具列、網路封包的清單、封包的標頭和封包的內容,並且以不同的顏色來代表各種不同的通訊協定或是過濾條件。這樣的設計讓使用者在擷取網路封包的 過程中,就能夠即時瞭解目前網路上所傳送的網路封包類型。由於Wireshark可以解析超過七百種的通訊協定,因此幾乎所有協定都能夠解碼,就算將來有 新的通訊協定推出,也會因為其採用開放原始碼的授權方式,而能夠快速地發展解析新通訊協定所需要的程式,這對於適應未來網路的發展相當重要。

另外,在網路封包清單中,可以針對不同的網路通訊協定或過濾規則指定顏色,這種設計方式可以協助使用者快速辨識各種不同通訊協定,或是過濾規則符合目前網路流量的情況,能夠更直覺地進行後續處理。

▲Wireshark的使用者介面

啟動Wireshark程式之後,將會自動載入通訊協定的解碼以及偵測目前系統上的網路介面。以目前Wireshark的版本而言,能夠辨識相當多的網路 介面裝置,除了實體的網路介面卡之外,虛擬機器(Virtual Machine)所使用的虛擬網卡大多也能夠辨識,因此從系統上同時針對虛擬機器中的作業系統來分析網路通訊協定相當容易。在網路介面卡清單中,可以瀏覽 即時的網路狀態,例如目前進入該網路介面的封包數和每秒的封包量。Wireshark另外也提供了三個控制按鈕,可以針對後續的處理程序進行控制,如果想 要進一步的瞭解網路介面卡的細部資訊,按下〔Details〕按鈕即可查看。如果在準備擷取網路封包之前,想要設定擷取網路封包時的處理機制或是套用的過 濾條件,可以按下〔Options〕按鈕進行修改。
▲網路介面卡清單與控制按鈕

在選項設定畫面中可以選擇準備擷取的網路介面卡,透過下拉式選單就能夠輕易地找到想要擷取的網路介面卡。在預設的情況下,Wireshark會將擷取到的 網路封包儲存在記憶體中,不過這樣的方式不適用在長時間的網路封包收集上,因此如果想要進行長時間的網路封包收集,可以指定儲存的檔案名稱,以及是否要分 割成多個檔案,並且可以指定分割檔案的規則等。另外,針對擷取網路封包時的畫面處理方式,建議在此勾選自動捲動(Automatic scrolling in live capture)功能,如此一來在主畫面上就能夠自動地捲動網路封包清單的捲軸,可以直接觀察到最新的網路封包資料。最後,在名稱的反解上,可以選擇是否 啟動MAC Name、Network Name和Transport Name的解析,這個項目依據實際的需求來決定即可。
▲擷取網路封包的選項

此外,針對網路封包所使用的通訊協定, Wireshark在預設的情況下會啟用所有能夠辨識的通訊協定,不過使用者仍然可以自行選擇想要比對的通訊協定種類。

如果確定某些通訊協定並不存在於收集網路封包的環境中,則可以停用這些通訊協定,這在較繁忙的網路環境中將能降低比對的協定種類與數量,也可以避免因為硬體效能的問題而遺失原本打算擷取的網路封包。通訊協定清單中提供詳細的描述,可以做為是否啟用這些通訊協定的參考。

▲啟用的通訊協定

以Wireshark的操作介面配合滑鼠右鍵的快速功能表選單,就能夠輕易地過濾或追蹤所指定網路封包或特定的通訊協定,這對使用者而言是相當方便的設計。

Wireshark的主要功能

Wireshark提供了圖形化的操作介面和功能完整的過濾器,提供使用者相當友善的操作方式,能夠快速地找到想要分析的網路封包。透過其內建的通訊協定 解析功能,使用者可以掌握每一個網路封包的詳細資訊,除了能夠瞭解封包所傳送的內容之外,也可以學習各種通訊協定的行為模式。

▲使用過濾條件(http)

前面介紹了HTTP建立連線的過程,在輸入想要開啟的網址時,必須先透過DNS伺服器進行名稱的解析。藉由Wireshark所擷取到的網路封包,很容易觀察到這個現象,以驗證整個行為的模式是否符合預期。
▲DNS與TCP的三向交握

Wireshark具備功能十分完整的過濾器(Filter),使用者可以輸入關鍵字或條件,協助鎖定分析目標。在條件輸入的欄位內,如果使用的語法正確,底色將會變成綠色,反之,則會出現紅色底色,提醒使用者必須確認所輸入的過濾條件以及語法是否有誤。
▲Wireshark具備功能完整的過濾器(Filter)

ARP是區域網路中常見的通訊協定,主要是用來查詢網路介面卡的實體位址。在區域網路中擷取封包時,若配合「arp」當作過濾的條件,將會發現如下圖的畫面,在這裡可以發現許多廣播封包正詢問區域網路中是否存在這些電腦。

在正常情況下,如果在區域網路內收到這類型的網路封包已連上網路的主機將會進行回應,因為經常會看到一些閘道器(Gateway)或路由器 (Router)發送出來的詢問封包,而這些封包正在找尋該網段中電腦或設備所使用的MAC位址。若配合過濾器,則必須輸入「arp」以作為過濾的條件, 這樣可以很容易地將焦點聚集在ARP這個通訊協定上。

▲ARP通訊協定

當發現有興趣進一步分析的網路封包,在點選該網路封包後,就可以透過滑鼠右鍵的功能表選單,直接指定交談時的過濾器,這樣就能夠很快地產生過濾條件,並且自動填入過濾規則的欄位中。
▲轉換過濾器的條件

Wireshark針對通訊協定提供了完整的Follow TCP/UDP Stream功能,能夠依序追蹤網路封包所傳送的內容,此種方式可以將有關聯性的網路封包一起呈現,如此在進行網路行為或通訊協定的行為分析時,將更為清楚易讀。
▲Follow TCP Stream功能

針對已收集到的網路封包,可以進一步針對來源和目的地位址進行交談行為的分析,透過清單的方式,很快地就會知道那些IP之間的通訊,以及所使用的通訊協定為何,在這個統計的分析中,仍然可以得知封包的數量、每秒的封包量以及封包的大小等等。
▲交談的統計

在統計分析的畫面,同樣可以快速地製作出過濾的規則。在指定的項目上,透過滑鼠右鍵的功能表選單,直接指定【Apply as Filter】,並且選擇想要分析的流量。指定時必須仔細思考要觀察與不需要觀察的項目有那些,如此過濾規則時,可成為參考的依據。
▲建立過濾規則

當完成過濾規則之後,將會自動將產生好的過濾條件,直接填入過濾器的欄位中,不論是正在收集或是單純想要分析以往收集的資料,都能夠透過這樣的方式分析網路封包。
▲自動產生過濾規則

Endpoint的統計畫面會統計目前收集到的封包,主要分成「Ethernet」、「Fiber Channel」、「FDDI」、「IPv4」、「IPX」、「JXTA」、「NCP」、「RSVP」、「SCTP」、「TCP」、「Token Ring」、「UDP」、「USB」和「WLAN」進行統計與分析。每一個項目都將終端的主機詳列成清單,並且統計各個主機所傳送的網路封包數量與大小。
▲Endpoint的統計畫面

統計的資料可以事後分析,也可以即時分析,因此想要瞭解目前網路上的使用情況,透過統計分析的功能,就能夠更清楚掌握網路的現況。對於所收集到的網路封 包,可以針對主機或是通訊協定進行分析,也可以選擇特定主機流入或流出的網路封包進行分析。當然,也可以依據通訊的雙方進行分析,不同的條件都可以在 Wireshark中統計與分析,以提供不同的資訊給使用者。

Wireshark的應用

Wireshark提供完的網路協定分析功能,透過各種統計分析能夠掌握目前網路的狀態,目前支援相當多種不同層級的統計與分析方式,可以統計每一種通訊 協定在整個收集網路封包的過程中,佔有多少的比例、封包的總量、封包大小的總和,以及每一秒送了多少Mbit的資料等,這些數據讓使用者能夠輕易地掌握目 前網路的現況。

▲通訊協定的統計

Wireshark還提供了一項相當貼心的設計,針對目前所收集到網路封包,可以任意指定一個想要納入防火牆管理的網路封包,直接產生出不同平台使用的安 全規則,這對於管理防火牆的工程師而言是相當好用的工具,因為能夠依據所產生好的安全規則直接組態設定到設備上,縮短相當多的處理時效。先指定好設備的廠 牌後,就可以依據Filter的內容,配合所指定的處理方式,轉換成設備組態所需要的安全規則,使用上相當方便。
▲直接產生不同平台使用的安全規則

如果想要在網路封包中找尋特定的字串,可以利用Wireshark所提供的搜尋封包功能,開啟「Edit/Find Packet」功能之後,可以發現這裡提供了三種不同的模式:「Display filter」、「Hex value」以及在找尋字串時所要使用「String」模式。接著,輸入想要找尋的字串即可,例如username或pass等,這些必須是明文的字串才 行,一般而言可以針對所傳送的參數進行搜尋。

▲尋找特定的字串

一些不安全的通訊協定(如POP),在使用者端的郵件軟體向郵件伺服器進行收信的動作時,會將使用者帳號與密碼以明文的方式進行傳送,此時如果透過Wireshark進行分析時,將會發現使用者的帳號與密碼資料,因而造成機敏資料外洩的問題。

在網路攻擊或異常流量的偵測上,以DDoS攻擊對於網路流量的影響最大。在極短的時間內會收集到相當多的封包,進而影響到網路的頻寬和伺服器本身的效能, 例如遭受到大量的UDP網路封包攻擊時,透過網路封包的分析,就能夠得知許多假冒來源IP位址的網路封包正針對特定的目標傳送大量的UDP網路封包。

▲不安全的通訊協定(POP)

如果攻擊的方式是使用TCP進行,則可以看到三向交握的第一個SYN網路封包,這樣的攻擊模式會造成受到攻擊的主機必須耗費相當多的系統資源,等待遠端的 電腦回應SYN/ACK的網路封包。當資源耗盡時,受攻擊的主機就無法再提供網路服務。這樣的攻擊行為同樣可以透過Wireshark所擷取到的網路封包 進行分析,進而掌握攻擊者的攻擊方式。

▲遭受DDoS攻擊時的網路封包現象(TCP)

Wireshark面對大量的攻擊封包時,有可能會因為系統效能不彰而影響到所收集到的網路封包,此時增加記憶體的容量、使用Gigabit以上的網路介面卡或是更高速的中央處理器,就能夠改善這個問題。

導入雲端運算的成功關鍵

http://www.netadmin.com.tw/article_content.asp?sn=1007200002
文.許慧嫻

雲端服務已經成為新的趨勢,更是網路轉型的開端,不過雲端服務真的那麼容易又美好嗎?是的,如果企業能夠用最有效益且具彈性的方式建構雲端基礎,那麼導入雲端服務將取得競爭優勢。然而怎樣才是最好的雲端運算導入步驟呢?

近來聽到有許多導入雲端的架構與想法,但事實上每家企業應慎思本身在導入雲端運算前的架構與其須補強之處。大多數企業其實都只看到伺服器集中化、虛擬化或 是服務整合,卻忽略了雲端運算最重要的根本—網路架構。雖然在伺服器與服務上做了相當多的改變,卻因為基礎網路架構不完整且缺乏彈性,結果還是讓雲端運算 功虧一簣。

俗話說,工欲善其事,必先利其器。對於雲端運算而言最佳的網路架構,就是能夠提供高彈性、高可用性且高適應性,經過技術論證及實例探討之後,有5大步驟是確保雲端運算導入成功的關鍵,分別是分割、集中化、匯集、自動化與自由化。

第一步:分割。分割聽起來很聳動,但卻是系統管理者,甚至是企業高層應該要優先決定的事。什麼科技需要作為導入基礎?如果基礎無法確立且紮實,就很難建構具彈性、延展性及高性能的應用服務。

第二步:集中化。集中化並不單只是常見的伺服器集中化或網路集中化,更重要的是在集中化之後我們要採取何種資料派送模式。在終端機模式、Server-client架構跟P2P等不同模式選擇之下,整體企業網路的架構與連線都需要正確的調整,因此企業應該要妥善選擇。

第三步:網路匯集。當前置作業都確立之後,必須從網路頻寬、路徑、架構與傳遞方式,這些會影響雲端運算效益的瓶頸或關鍵環節,建構高彈性的基礎設施,提高網路服務的效率。

第四步:自動化。管理員處理負責處理許多瑣碎且單純的網路管理,像是流量控制、負載平衡或是認證審核等,這些都應該讓系統自動處理,而不需要人力的參與。透過自動化機制,便能夠大幅降低管理者的工作負擔,同時也讓回應更快速。

第五步:自由化。虛擬化與網路自動化所帶來的最高益處,就是讓系統跟管理員都更為自由。任何連線或服務要求,都能夠自由地在系統中傳遞,可以在不受干擾或 阻礙下,得到最佳服務效益;而管理者更能從繁瑣的工作中獲得解放,可以將心力專注在關鍵地商業營運上,讓企業競爭力更佳。

當企業從原本固定式網路架構成功轉移成雲端運算時,就不再需要為了臨時出現的尖峰流量或服務需求,預先規劃並建置過高的相關設備;而能夠以動態方式,適度轉移其他系統的能量以因應所需。

衝擊恐比Y2K還嚴重,IFRS箭在弦上,企業及早因應

http://www.netadmin.com.tw/article_content.asp?sn=1007200007
文.余采霏
原題名: 從資訊流程到ER報表,衝擊恐比Y2K還嚴重,IFRS箭在弦上,IBM籲企業及早因應

對所有上市櫃的企業來說,國際會計準則(International Financial Reporting Standards,IFRS)是個難纏且頭痛的問題。由於政府將在2013年起正式採用IFRS規範,因此,企業必須在2012年就做好準備,將所有的 財務報表轉化為符合IFRS規範的財報,而在此同時台灣會計處理準則(ROC GAAP)依然需要並存。
這涉及到兩個問題,首先須清楚台灣會計處理準則(ROC GAAP)與IFRS到底存在那些差異性,第二個問題則是IT如何協助企業完成符合IFRS規範的財報。前者屬於會計範疇暫不討論,但後者對於IT造成的 影響卻不小,因為IFRS涵蓋三大範疇的改變,包括企業報表、作業流程以及IT系統。
雖然在IT架構中只會對ERP系統有所影響,但IT人員如何將IFRS應用整合至ERP系統內,或是如何改良系統來支援IFRS專案卻是一門學問,例如企 業報表如何調整?過去不需認列的應計負債現在需要重新定義或收入延後認列,這些影響著企業日常運作及月結和年結作業,如何從作業流程中得到改善?如何妥善 蒐集和轉換資料,並且考量到系統架構以減少企業內部的衝擊?這些都是IT人員在協助企業的過程中會面臨到的問題。
台灣IBM公司工商事業群總經理劉鏡清指出,到了2012年,將近有5000家的企業必須準備好符合IFRS規範的財務報表,然而根據他的瞭解,多數的企業現在仍在觀望階段。
「這會是一個很大的挑戰,一項完整考量的IFRS系統的導入至少需要費時8個月,企業若不從現在開始著手,明年IFRS造成的衝擊將比Y2K還嚴重,因為Y2K只需要系統的修正,而IFRS卻會涉及到會計原則、帳務與報表等流程的改變。」
他表示,在雙軌制的要求下,企業想要以人工方式處理報表作業與財務報告,以符合IFRS規範並不是一項聰明的選擇,這將會導致企業支付更多的人工成本,而 且相關的交易資訊流的驗證與事後追蹤審查,將是沉重的負擔。另一方面,企業的流程也將更為複雜且紊亂,最後財務部門可能必須投入更多時間及人力才能支應。
隨著2012年的時間逼近,劉鏡清預期企業的作法除了置換或導入已經符合IFRS法規的ERP系統外,應該還會出現另一種外掛程式的解決方案,例如EXCEL或外部介接其他小系統方式執行。
不過他認為外掛程式的成效至今仍不能判定,或許短期內可以紓解IFRS帶來的衝擊,但長期下來無法支應企業集團業務拓展,而必須重新啟動規劃建置新系統, 這樣反而更浪費IT與人力成本,「還是要從企業未來的競爭力來審慎看待這件事,IBM會建議企業遵循四個階段部署,從差異分析、瞭解導入IFRS的需求及 不同解決方案的優缺點、設計符合的專案,最後則是持續優化,如此一來才能真正改善企業體質,提升競爭力。」

企業流程管理七大準則

http://www.netadmin.com.tw/article_content.asp?sn=1007020001
文.Bill Rosser(Gartner副總裁與資深分析師)

目標一致.重要價值
組織願意長期接受企業流程管理的重要因素是為了能提早看到方案帶來的實質成效。然而選擇企業流程管理方案需注意七大要素,另外也需注重幾項與態度和管理風 格相關的實務,它們同樣也是影響方案執行成功的關鍵。一旦遵循這些準則,就能有很高的成功率,可大大提高企業採用企業流程管理方案的興趣。
縮小規模
為達最佳效果,企業宜先從小規模試起,方案規模不用太大,或許只需改善其中一部分流程即可。而執行的時間長度也應只針對近程目標,或許不超過60至90天。另外,宜避免挑戰過於複雜的部分,最好是針對較簡單且組織技術允許的範圍。
重要價值
提高企業績效必須被視為是達到業績目標的一大重要因素。所有企業流程中僅有一部分被認為對達到終極目標有著重要價值,例如預測的流程。預測精準與否對整體表現影響極大。
對準目標
選擇流程需考量的另一個因素,便是對準組織或企業單位的重要目標與策略。倘若企業流程管理績效提升與對準目標、滿足因應對策直接相關,企業流程管理的吸引力便會隨之增加。
適當的評量指標
唯有透過評量方能了解與信任企業流程管理所帶來的進步價值。要留下深刻的印象,必須對進步情況採取量化的評估。另外,也需要完善和嚴格的結案評估與審查,或許是進行更長期的結果評估。
目標一致
所有流程相關人士必須對期待提高的業績目標達成共識。以上敘述雖然看似簡單明瞭,但不同的團體卻對如何協助方案運作有著不同看法。值得注意的是,在某些案件中,在達成共識上所花費的心力可能和建立企業流程模型所花費的心力一樣多。
熱情的業務主辦者
想要將案子做得又快又好,並將訊息順利傳遞至組織各處,絕不可缺少熱情的業務主辦者。他並非專案管理人,而是貢獻點子,以及能鼓勵業務執行員工和企業流程管理人員的人士。業務主辦者帶領團隊克服障礙並且做出決策,在完成一項任務後,仍將持續對同事和上司做出貢獻。
業務用戶的投入
讓實際參與流程的人員加入有助大幅提高成功機率。這裡所謂的加入是指提供新觀點以檢視他們的表現,讓流程看起來易懂和引起興趣。而成功代表的是要讓使用者覺得自己是專家,並感受到他們對所做的和所從事的事物擁有自主權,且看到改進的方式。
一般說來,若能達成此目標便意味著所採用的模式和方法是好的,有助達到業績目標,其績效評估方式也是有意義的。

四種類型一次說清楚,路由協定設定疑難排解

http://www.netadmin.com.tw/article_content.asp?sn=1007200010
文.胡凱捷

從這篇文章開始,筆者將整理出各種常見路由協定的疑難排解技巧,包含如何檢視路由協定的設定值,以 及如何做到即時的偵錯技巧。而為了讓讀者快速容易地了解偵錯的過程與指令的用法,都會透過範例來解說,這樣讀者就更能真正明白指令輸出結果的含意,而範例 中也會大略介紹設定路由協定環境的指令。這裡將介紹RIP路由協定、IGRP路由協定、EIGRP路由協定和OSPF路由協定等相當知名且常用的路由協 定。
若要做路由協定相關的疑難排解,當然不一定只有以下所介紹的這些方法,而是要看當時遇到 的情況而定。有時候不一定是路由協定的問題,且偵錯方法也很多,通常可以查看Routing Table,或是透過「show running-config」指令來查看目前正在使用的路由器設定值,或是執行「show ip protocols」指令來查看協定的設定情況。

偵錯的方法其實千變萬化,唯有深入明白每一個環節,清楚所有運作的關鍵以及原理,才能夠真正靈活地運用偵錯的技巧。

RIP路由協定

先從RIP路由協定開始介紹,直接來看一個簡單的範例。假設網路架構圖如下所示,現在要在每一台路由器設備上都套用RIP路由協定並加以啟動。

上圖中有X,Y與Z三台路由器設備,其中路由器X接到172.16.1.0和10.1.1.0兩個網段,其兩邊介面的IP分別為172.16.1.1與10.1.1.2,因此路由器X的RIP路由協定設定指令如下:

RouterX(config)#router rip RouterX(config-router)#network 172.16.0.0 RouterX(config-router)#network 10.0.0.0

其中,172.16.0.0和10.0.0.0分別代表路由器所接的兩個網路區段的Major Network Number。同理,因為路由器Z接到192.168.2.0和10.1.2.0兩個網段,假設路由器Z針對這兩個網段的IP分別為 192.168.2.1與10.1.2.3,則在路由器Z上設定RIP路由協定的指令如下:

RouterZ(config)#router rip RouterZ(config-router)#network 192.168.2.0 RouterZ(config-router)#network 10.0.0.0

在設定IP網路區段的Major Network Number時,哪一個網段先設定,哪一個網段後設定,並沒有差別,只要「都設定」就可以。接著剩下的就是路由器Y,路由器Y連接到10.1.1.0和 10.1.2.0兩個網段。假設路由器Y在這兩個網段的IP位址為10.1.1.5和10.1.2.7,則要在路由器Y上設定RIP路由協定的指令如下:

RouterY(config)#router rip RouterY(config-router)#network 10.0.0.0

因為10.1.1.0網段和10.1.2.0網段的Major Network Number相同,所以只要設定一次即可。

檢視RIP路由協定設定的方法
檢視RIP路由協定的指令是「show ip protocols」。這裡以上面的範例來說明,假設要檢視路由器Z的RIP路由協定設定值,則執行結果如下:

RouterZ#show ip protocols
Routing Protocol is “rip”
Sending updates every 30 seconds, next due in 15 seconds Invalid after 180 seconds, hold down 180, flushed after 240
Outgoing update filter list for all interfaces is
Incoming update filter list for all interfaces is
Redistributing: rip
Default version control: send version 1, receive any version Interface Send Recv Triggered RIP Key-chain Ethernet0 1 1 2 Serial2 1 1 2 Routing for Networks: 10.0.0.0 192.168.2.0 Routing Information Sources: Gateway Distance Last Update (this router) 120 01:12:34 10.1.2.7 120 01:01:56 Distance: (default is 120)

由上面的執行結果可以看出路由器Z設定成使用RIP路由協定,這可以從執行結果的第一行看出。接著,由第二行可以發現這個路由資料會每隔30秒互相傳遞一次,而且能夠看出下一次傳送路由資訊的時間為15秒之後。而這每隔30秒傳送一次路由資訊的設定是可以改變的。

接著,觀察輸出結果的第三行「Invalid after 180 seconds, hold down 180, flushed after 240」。第一個180秒代表如果這台路由器Z經過180秒都沒有收到由其他路由器所傳過來的路由更新資訊,則路由器Z會將相關的路由路徑標示為可能無法 到達,即Possibly Down。而「hold down 180」中所指的180則是Hold-Down Timer的時間,所以當路由器Z發現有Possibly Down的路由資訊時,就會馬上啟動Hold-Down Timer。

如果經過180秒後,都沒有再收到這筆路由資訊的更新,路由器Z就會把這筆路由資訊視為無法到達。至於最後的「flushed after 240」所指的是,若經過240秒後都沒有再收到任何關於這筆路由資訊的更新,則路由器Z會把這筆資料從Routing Table中移除。

在顯示結果的後半部,有一行顯示「Routing for Networks:」。而在此行後面接了兩個網段,這代表目前這台路由器將會處理這兩個網段的路由資訊。至於接在「Routing Information Sources:」後面的IP位址,則代表這些位址會傳送路由的更新資訊給目前這台路由器。讀者應該可以聯想到,後面所接的120指的就是RIP路由協定 的AD值。如果覺得這樣的檢視資訊過於複雜,也可以執行以下的指令以便顯示比較簡短的設定值:

RouterZ#show ip interface brief

RIP路由協定即時偵錯
如果想即時查看目前這台路由器更新路由資訊的情況,可以執行「debug ip rip」指令。一旦執行這個指令,往後如果這台路由器收到或是發送任何路由資訊的更新時,就會馬上把相關的資料列印在螢幕以便即時偵錯。以上述的例子來講 解,假設在路由器Z上執行「debug ip rip」指令,則執行結果如下列所示:

RouterZ#debug ip rip
RIP protocol debugging is on
RouterZ#
00:04:06: RIP: received v1 update from 10.1.2.7 on Serial2 00:04:06: 10.1.1.0 in 1 hops 00:04:06: 172.16.1.0 in 2 hops 00:04:11: RIP: sending v1 update to 255.255.255.255 via Ethernet0(192.168.2.1)
00:04:11: network 10.0.0.0, metric 1 00:04:11: network 172.16.1.0, metric 3 00:04:11: RIP: sending v1 update to 255.255.255.255 via Serial2(10.1.2.3)
00:04:11: network 192.168.2.0, metric 1

透過這個指令,可以在第一時間得知目前這台路由器如何更新自己的Routing Table以及如何影響其他路由器的Routing Table。上面的資訊看起來似乎很亂,接著就來一一解釋。一開始執行「debug ip rip」指令之後,第一行看到的是:

RIP protocol debugging is on

這代表目前已經開啟偵錯模式。接著,路由器就會等待下一次要接收或發送路由更新的資訊。而接下來三行代表收到由其他路由器送過來的路由更新:

00:04:06: RIP: received v1 update from 10.1.2.7 on Serial2 00:04:06: 10.1.1.0 in 1 hops 00:04:06: 172.16.1.0 in 2 hops

10.1.2.7是路由器Y在10.1.2.0網段的IP位址,因此這邊第一行代表的就是「從本地端的Serial 2介面收到由10.1.2.7路由器所發送的RIPv1的路由更新資訊」,而下面兩行則顯示出所得到的路由更新有哪些。其中,第二行代表「從路由器Z開始 算,經過一個路由器設備後,可以到達10.1.1.0網段」。同樣地,第三行代表的是「從路由器Z開始算,經過兩個路由器設備之後,可以到達 172.16.1.0網段」。

而接下來如下的這三行,第一行代表正在目前這台路由器Z的Ethernet0介面傳送路由更新資訊到其他設備中。假設Ethernet0是路由器Z接往192.168.2.0網段的介面,由這一行中也可以看出所傳送的正是RIP路由協定,而且是v1版本。

另外,255.255.255.255是Broadcast位址,所以此路由資訊是藉由Broadcast方式送出。而後面兩行顯示所送出的路由更新資料有哪些。

00:04:11: RIP: sending v1 update to 255.255.255.255 via Ethernet0(192.168.2.1) 00:04:11: network 10.0.0.0, metric 1 00:04:11: network 172.16.1.0, metric 3

從這裡的第二行可以看出路由器Z想傳送的資料就是「透過我這台路由器,經過一台設備可到達10.0.0.0網段」,同樣地,下一行代表「透過我這台路由 器,一共經過三台設備可到達172.16.1.0網段」。至於執行結果的最後兩行,讀者也就可以清楚明白其含意了。(更多精采文章詳見網管人第54期)

開源防火牆搭配優質外掛,自建Netfilter-Recent,抵禦拒絕服務攻擊

http://www.netadmin.com.tw/article_content.asp?sn=1007020010
文.吳惠麟
原題名:開源防火牆搭配優質外掛,封殺攻擊連線來源,自建Netfilter-Recent,抵禦拒絕服務攻擊

自從2000年全球駭客串連於中國農曆新年期間發動「拒絕服務攻擊」(Denial of Service,DoS)的「中國新年攻擊」事件一舉癱瘓各大著名的商務網站如eBay,Yahoo等發生後,拒絕服務攻擊手法即一戰成名。
由於DoS此類攻擊技術的門檻較低,僅需足夠的硬體及網路上隨手可得的攻擊程式,因此相 關的攻擊事件層出不窮,也常使網管人員頭痛不已。本期筆者將使用netfilter架構中的recent模組來偵測並阻斷拒絕服務攻擊,以防止此類的攻 擊。希望能達到下列的功能,而本解決方案所需的套件如下表所示:

●可記錄嘗試拒絕服務攻擊或暴力攻擊的惡意來源IP。 ●可即時阻斷正在攻擊的來源。 ●提供一個網頁介面的管理,可方便管理者查看惡意來源IP。

何謂DoS
DoS攻擊主要是利用TCP/IP通訊協定的漏洞來發動洪水封包,就像組成一支Call In部隊,不斷地Call In被攻擊公司的客服專線,而使得客服專線無法正常的服務,來癱瘓受害者主機或利用服務主機程式的漏洞實施緩衝器溢位的攻擊(Buffer Overflow)讓服務主機程式當掉,進而停止服務。以TCP/IP通訊協定的漏洞來實施DoS攻擊,可分為下列幾種攻擊型式:

TearDrop
當封包資料在網路上傳輸時,會據MTU(Maximum Transmission Unit)來設定最大的切割長度並記錄被切割封包的位移值(Offset),當封包到達目地端後,目的主機即利用位移值來重組封包以復原資料。

TearDrop攻擊則是利用IP封包重組的漏洞。假造含有不正確位移值的封包,當這些封包到達目的主機後,可能會在重組的過程,因為無法處理不正確的位 移值,而可能造成一些系統當機。如下圖示,在Linux系統下可利用ifconfig指令來查詢MTU資訊,而每個片段會是1500。

Land攻擊
在TCP/IP協定的定義中,IP封包的來源位址可自行定義,不一定為有效位址。Land攻擊即是利用此種特性,透過IP Spoofing(IP欺騙)技術將SYN封包的來源位址與目的位址設定為相同位址。當目的位址接收到此類封包後,根據三向式握手(Three-way Handshake)動作回應SYN-ACK封包給來源位址,由於來源位址與目的位址相同,所以會回應ack封包,而建立空連接。在大量的Land攻擊 下,即會建立大量的空連接,藉以消耗光受害端主機的資源。

ARP攻擊
ARP(Address Resolution Protocol)協定是用來取得網卡的MAC位址的協定,例如10.4.1.2(以下稱為來源端)欲連線到10.4.1.10(以下稱目的端),來源端 會先查詢本機的arp表格,以Windows為例,可利用「arp -a」指令查詢本機的arp表格,即IP與MAC的對應表,如右上圖示。

倘若arp表格中沒有10.4.1.10相關的紀錄,則會發出arp廣播,詢問是否有10.4.1.10主機,如果10.4.1.10存在,則會回應 arp Response封包,內含IP與MAC對應的資料,告知本身的MAC位址。而後,來源端會將10.4.1.10及所屬的MAC位址寫入arp表格,流程 如下圖示。

而ARP攻擊(ARP Spoofing)即是由一個攻擊主機不斷的發出偽造的ARP Response封包,內含被攻擊者主機IP及攻擊者主機的MAC位址,如下圖示。

若上圖中其他主機欲連線至被攻擊端主機時接收ARP Response,如果接收到攻擊端所發出的ARP Response封包,便會將該錯誤的ARP資訊寫入自己的ARP Table內,之後若要連線到被攻擊端主機,即會將封包送往攻擊端的主機,因為ARP Table記錄被攻擊端主機的MAC為攻擊端主機的MAC,此種攻擊方式稱為ARP欺騙,其可能會造成下列的後果:

拒絕服務攻擊
假如攻擊者所發出的ARP Response封包,IP位址為被攻擊端的主機,而MAC卻是一個不存在的主機。那接收到此ARP Response封包的主機,會因此無法連線到這個被攻擊主機上,因為MAC位址不正確。

中間人攻擊
以上例而言,假如攻擊者所發出的ARP Response封包,IP位址為被攻擊端的主機,而MAC卻是一個卻是攻擊者主機的MAC。假如攻擊成功的話,其他主機要連往被攻擊端主機時,會將封包 送往攻擊者主機上,因為被攻擊端主機的MAC填的是攻擊者主機的MAC,而攻擊者可在處理完封包後,再將封包轉發到真正的主機,如此使用者並不會察覺到任 何的異樣,但封包已經過攻擊者主機(中間人)處理過(如側錄),所以此種攻擊法又稱為中間人攻擊。

由上述說明得知,如果正牌之被攻擊主機回應的ARP Response速度比攻擊者所發出的ARP Response速度還要快,則其他主機所接收到的ARP Response封包是正確的(此種攻擊則未必能成功)。

此外,利用設定靜態ARP表格(將重要的主機如Gateway以靜態設定方式設定ARP)也可使ARP攻擊失效。

在Windows系統下,使用「arp -s [ip] [MAC]」指令即可在ARP表格中新建一筆紀錄,因此一般的資安建議,均會要求使用者用靜態的ARP設定來設定重要主機的MAC紀錄,以避免此類的攻擊。

SYN Flood攻擊
TCP採三向式握手以建立連線,如下圖示。SYN Flood攻擊即利用上述第三步驟,在接受目的端的SYN-ACK封包後卻不回應ACK封包。如此可迫使受害者主機端須維護一份非常大的半連接列表,而被 害主機將會因須耗費大量的主機資源來維護此份半連接列表,而可能造成受害者主機因資源耗盡而中止服務。

(更多精采文章詳見網管人第54期)

網路版RAID1:運用DRBD實現MySQL即時同步與備援切換

http://www.netadmin.com.tw/article_content.asp?sn=1007200009
文.徐秉義
原題名: 網路版RAID1,打造高可用性,運用DRBD實現MySQL,即時同步與備援切換

DRBD(全名為Distributed Replicated Block Device)能夠即時複製(Replicated)區塊裝置(Block Device)到網路上另一台電腦的Block Device以達到高可用性的目的,簡單的說,就是「網路版的RAID1」。
將MySQL Server的Data File放到DRBD上,配合Heartbeat控管,可做到MySQL Server高可用性的即時同步與Failover備援切換。本文就是以MySQL搭配DRBD與Heartbeat來實現高可用性(High Availability)。

環境準備

此範例須建立兩台Server,作業系統版本為CentOS 5.4 x86_64,主機名稱(Host Name)分別為Server1和Server2。其架構圖如下:

Server1(Master) eth0 192.168.1.31(外部IP) eth1 192.168.100.31 (與Server2對接,用作 DRBD傳輸) eth0:0 192.168.1.30 (由Heartbeat控管,作為提供服務之IP) /dev/sda(系統磁碟) /dev/sdb(放置data file之磁碟)

Server2(Slave) eth0 192.168.1.32(外部IP) eth1 192.168.100.32 (與Server1對接,用作DRBD傳輸) eth0:0 192.168.1.30 (由Heartbaet控管,作為提供服務之IP) /dev/sda(系統磁碟) /dev/sdb(放置data file之磁碟)

磁碟分割

分別在Server1與Server2主機上使用指令「fdisk /dev/sdb」,來分割第二顆磁碟,新增一個同樣大小的分割區(Partition)。磁碟分割後,先不要格式化。

安裝必要軟體

先使用指令「yum list | grep drbd」找到相關軟體後,再使用指令「yum install -y drbd83 kmod-drbd83」安裝DRBD應用程式。

接著執行指令「yum list | grep heartbeat」找到相關軟體,然後使用指令「yum install -y heartbeat heartbeat-ldirectord heartbeat-pils heartbeat-stonith」安裝Heartbeat應用程式。

觀察右上角這張圖片之後可以發現,雖然看似已經成功安裝好Heartbeat,但實際測試後卻發覺它並沒有安裝好,必須再執行一次「yum install -y heartbeat」指令。

隨後,使用指令「yum list | grep mysql」找到相關軟體,並輸入指令「yum install -y mysql-server」安裝MySQL Server。但須注意的是,以上的應用程式,在Server1與Server2上都必須安裝才行。

設定範例

接下來示範相關設定檔案,實際操作一次,讀者就可以深入了解了。

設定hosts

首先開啟「/etc/hosts」編寫如下圖的內容。編寫完成之後,可以利用scp指令將「/etc/hosts」直接複製至Server2。

這裡要特別提醒的是,DRBD、Heartbeat對於伺服器節點(Node)之間溝通是使用主機名稱解析IP的方式,這個主機名稱其實是執行指令 「uname -n」的結果,如果DNS Server沒有將其正確解析,強烈建議寫到兩台主機的「/etc/hosts」檔案內(就像上述設定一樣)。

通常主機名稱都是命名成標準FQDN方式,例如server1.example.com、server2.example.com,如此DRBD與 Heartbeat設定內有關主機名稱的部分也都要跟著修改正確(與「uname -n」執行的結果一樣),此時的「/etc/hosts」內容示範如下:

127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.1.31 server1.example.com server1 192.168.1.32 server2.example.com server2

簡單來說,也就是主機名稱一定要能夠解析出IP位址才行。

設定MySQL

開啟「/etc/my.cnf」修改內容如下。此設定是為了要將MySQL資料改放到「/db」目錄下,也就是DRBD磁碟的掛載點下。

編寫完成後,可將「/etc/my.cnf」直接scp複製至Server2。

接著,使用指令「mkdir /db」建立目錄。最後,Server1與Server2兩台主機要一併改設定檔和建立目錄。

(更多精采文章詳見網管人第54期)

知名 GUI lib 簡評 (GTK+, Qt, wxWidgets)

http://blog.udn.com/keithmin/679610
(按:原文有些地方句讀錯誤,或語義欠詳,我有補綴一些字)

GTK+

     GTK+ 主要用在 X Window 上,入門門檻較高。特色是,他用不具有物件功能的純"C" 語言,模擬物件導向。 所以寫起來比較複雜艱澀,而且充滿大量巨集,使用和除錯都不是很容易,但優點則是可以用 C,不需 C++,如果和 Win32 SDK 比較,不會難學多少,缺點是不易上手使用,而且文件比較缺,架構又非常複雜,且提供的東西比起其他無所不包的 library,是簡陋了一點,函數命名又臭又長。


    對於簡單的程式,GTK+ 會顯得太複雜,但是當你開始想擴充其他 library 也都沒提供的進階功能,就會開始讚嘆GTK+ 的架構嚴謹,還有超乎想像的高度彈性。 同樣的東西要用 MFC 來做反而會要人命並且多國語言的支援良好,內部也全面使用 UTF-8,相容性好,又是 unicode能夠習慣的話,GTK+ 值得推薦,但沒有很建議學,畢竟不好學,要用到熟會需要比較久,而且那樣很多 C++ 的功能會用不到。 GTK+ 有 C++ 版本叫做 GTK--,沒用過但看文件覺得,並沒有比 gtk+ 簡單到哪裡去。 因為 gtk+ 本來就是物件導向,所以即使換了 c++ 語言,寫起來架構還是差不多的。


    另外,gtk+ 有 Windows 版本,但缺點是,執行緩慢,不穩定,而且介面是使用 gtk+ 自己的,不是使用 Windows 內建的"Native" 原生圖形介面
,看起來會不太習慣。 Mac OS X 下可用 X11 來執行 gtk+但那樣出來的程式是長得像 UNIX 程式,而不是美美的 OS X Aqua 外觀。


wxWidgets

    wxWidgets 和 MFC 最接近, 命名習慣或架構都高度相似,會 MFC 幾乎不用重新學習有十餘年歷史,此外,他的物件封裝比 MFC 要好,提供的功能也多上太多,又跨平台一般知名的 MFC 程式都會選擇用 wxWidgets 改寫,來快速移植原程式到其他平台例如 eMule 用 wxWidgets 移植出 aMule, xMule, 還在開發中的 Filezilla 3...等


    而它最主要的特色是,他是"跨平台"的 "Native" GUI toolkit在各種平台上都可寫出使用該平台內建 Native 原生圖形介面的程式。 在 Windows 上就長得跟其他 Windows程式一樣,在 Linux 下就使用 gtk+ 的圖形介面,在 Mac OS X 下就可以使用華麗的Aqua 外觀風格,這點是非常強悍。 不像 gtk+ 到其他系統都還是只能用 gtk+ 自己的。(它的)缺點是,中文支援在有些地方會出問題,例如剪貼簿的操作。 得自己 patch但仍然相當推薦,即使是個龐大的 library,效能依舊不會太差,尤其在Windows 上執行速度並不輸 MFC,與其學 MFC,不如學 wxWidgets。


Qt

     Qt 的功能,應該是這三者加上 MFC 之中最強大的,文件也很完整,又有 RAD 工具可以輔助開發,並且有商業公司做強力後盾。不但有 Windows/X Window/Mac 版本,甚至還有嵌入式系統可用的版本,穩定性還不錯,物件封裝也算良好,資源比 GTK+ 或wxWidgets 多得非常多,而且發行公司提供了相當多範例,算是一家以開放原始碼成功營利的模範公司。 知名的 KDE 整個是用他開發,證明了他的穩定性和強大功能。


    缺點是如果你用他開發非 GPL 開放程式碼的軟體,必須以極昂貴的金額,購買商業版本。 而他的圖形介面並不完全是 "Native GUI",只是透過 theme 去模擬系統上的標準 GUI,所以看起來很像,卻會有些地方可以明顯看出破綻。 執行速度緩慢還有過於龐大則是另一個問題。 雖然封裝得很良好文件也齊全,並不代表他就很容易學還有一個嚴重問題是,他寫的不是標準 C++,他使用的 signal/slot 機制必須透過 Qt提供的 preprocessor 處理過才可以轉送給編譯器,這部份可能被限定用 qmake,算是一個可惜的地方,不過瑕不掩瑜,還是很推薦。忘了說,他內部也是 unicode,多國語言沒問題。

五種開源協議的比較 (BSD,Apache,GPL,LGPL,MIT)

http://www.awflasher.com/blog/archives/939

當Adobe、Microsoft、Sun等一系列巨頭開始表現出對”開源”的青睞時,”開源”的時代即將到來!

最初來自:sinoprise.com/read.php?tid-662-page-e-fpage-1.html(遺憾的是這個鏈接已經打不開了),我基本未改動,只是進行了一些排版和整理。
參考文獻: http://www.fsf.org/licensing/licenses/

現今存在的開源協議很多,而經過Open Source Initiative組織通過批准的開源協議目前有58種( http://www.opensource.org/licenses/alphabetical )。 我們在常見的開源協議如BSD, GPL, LGPL,MIT等都是OSI批准的協議。 如果要開源自己的代碼,最好也是選擇這些被批准的開源協議。

這裡我們來看四種最常用的開源協議及它們的適用範圍,供那些準備開源或者使用開源產品的開發人員/廠家參考。

BSD開源協議( original BSD license 、 FreeBSD license 、 Original BSD license )

BSD開源協議是一個給於使用者很大自由的協議。 基本上使用者可以”為所欲為”,可以自由的使用,修改源代碼,也可以將修改後的代碼作為開源或者專有軟件再發布。

但”為所欲為”的前提當你發布使用了BSD協議的代碼,或則以BSD協議代碼為基礎做二次開發自己的產品時,需要滿足三個條件:

如果再發布的產品中包含源代碼,則在源代碼中必須帶有原來代碼中的BSD協議。
如果再發布的只是二進制類庫/軟件,則需要在類庫/軟件的文檔和版權聲明中包含原來代碼中的BSD協議。
不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。 BSD由於允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發布和銷售,因此是對商業集成很友好的協議。 而很多的公司企業在選用開源產品的時候都首選BSD協議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發。

Apache Licence 2.0( Apache License, Version 2.0 、 Apache License, Version 1.1 、 Apache License, Version 1.0 )

Apache Licence是著名的非盈利開源組織Apache採用的協議。 該協議和BSD類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作為開源或商業軟件)。 需要滿足的條件也和BSD類似:

需要給代碼的用戶一份Apache Licence
如果你修改了代碼,需要再被修改的文件中說明。
在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議,商標,專利聲明和其他原來作者規定需要包含的說明。
如果再發布的產品中包含一個Notice文件,則在Notice文件中需要帶有Apache Licence。 你可以在Notice中增加自己的許可,但不可以表現為對Apache Licence構成更改。

Apache Licence也是對商業應用友好的許可。 使用者也可以在需要的時候修改代碼來滿足需要並作為開源或商業產品發布/銷售。

GPL( GNU General Public License )

我們很熟悉的Linux就是採用了GPL。 GPL協議和BSD, Apache Licence等鼓勵代碼重用的許可很不一樣。 GPL的出發點是代碼的開源/免費使用和引用/修改/衍生代碼的開源/免費使用,但不允許修改後和衍生的代碼做為閉源的商業軟件發布和銷售。 這也就是為什麼我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商業軟件公司開發的免費軟件了。

GPL協議的主要內容是只要在一個軟件中使用(“使用”指類庫引用,修改後的代碼或者衍生代碼)GPL 協議的產品,則該軟件產品必須也採用GPL協議,既必須也是開源和免費。 這就是所謂的”傳染性” 。 GPL協議的產品作為一個單獨的產品使用沒有任何問題,還可以享受免費的優勢。

由於GPL嚴格要求使用了GPL類庫的軟件產品必須使用GPL協議,對於使用GPL協議的開源代碼,商業軟件或者對代碼有保密要求的部門就不適合集成/採用作為類庫和二次開發的基礎。

其它細節如再發布的時候需要伴隨GPL協議等和BSD/Apache等類似。

LGPL( GNU Lesser General Public License )

LGPL是GPL的一個為主要為類庫使用設計的開源協議。 和GPL要求任何使用/修改/衍生之GPL類庫的的軟件必須採用GPL協議不同。 LGPL允許商業軟件通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟件的代碼。 這使得採用LGPL協議的開源代碼可以被商業軟件作為類庫引用並發布和銷售。

但是如果修改LGPL協議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須採用LGPL協議。 因此LGPL協議的開源代碼很適合作為第三方類庫被商業軟件引用,但不適合希望以LGPL協議代碼為基礎,通過修改和衍生的方式做二次開發的商業軟件採用。

GPL/LGPL都保障原作者的知識產權,避免有人利用開源代碼複製並開發類似的產品

MIT( MIT )

MIT是和BSD一樣寬範的許可協議,作者只想保留版權,而無任何其他了限制.也就是說,你必須在你的發行版裡包含原許可協議的聲明,無論你是以二進制發布的還是以源代碼發布的.

本文來自: http://www.awflasher.com/blog/archives/939