2013年9月28日 星期六

RFC 5969 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) -- Protocol Specification之筆記


Abstract

描述6rd prefix + IPv4 address的方式定址的優點,如automatic IPv6 prefix delegation to site, statless operation, simple provisioning and service等等。


Introduction

6rd機制成功的被商業化,被詳細記錄在RFC 5569。6rd是基於6to4改善而來,主要差異是在IPv6 Prefix的部分,6to4是用2002::/16,6rd是SP(service provider)自訂的prefix。6to4也可以被視為是6rd的subset,因為如果6rd的prefix是2002::/16就是6to4了。


Terminology

6rd prefix 被SP用來給6rd domain的IPv6 prefix。SP可以布署一個以上的6rd domain。
6rd CE (Customer Edge) 在6rd的布置中擔任CPE(Customer Premises Equipment)的角色或稱RG (Residential Gateway)。典型的CE有一個WAN site interface和一個以上的LAN interface,LAN端也稱為Customer-facing。提供IP6能力,WAN端也稱SP-facing。
6rd delegated prefix 由CE計算給Customer site端使用的IPv6 Prefix。
6rd domain 使用相同的virtual 6rd link的CEs和BRs的集合。SP可以有一個以上的6rd doamin。每個6rd domain必須使用不同的6rd prefix。
6rd Border Relay 被佈署在6rd domain的edge位置。IPv4-enabled interface用於6rd的IPv6 in IPv4 tunnel端。IPv6 interface用於連接IPv6網路。
BR IPv4 address 6rd Border Relay的IPv4 address。
6rd virtual interface encapsulation and decapsulation of IPv6 packets inside IPv4。


6rd Prefix Delegation

6rd delegated prefix是利用6rd prefix和CE的IPv4計算出來,用於customer site。如圖一:
當IPv4 address在6rd domain可以被aggregate,如10.0.0.0/8,則不使用全部的IPv4來計算,因為前面8bit可以被aggregate,所以使用後面24bit(即o bit為24)。
6rd不限於使用public IP,但如果private address會overlap,就應該被切成不同的6rd domain(使用不同的6rd prefix, 可以確保唯一性)。
即使相同的SP,也可能使用不同的IPv4 bit數,比如10.0.0.0/8和192.168.0.1/16之間的差異就可能會使用不同的IPv4MaskLen。
6rd delegated prefix是使用IPv4計算,所以IPv4 address的變動,也會影響6rd delegated prefix,因此建議以IPv4 address的lease time當成prefix的lifetime。


6rd Configuration

6rd有四個重要的configured value:
IPv4MaskLen ignore最高的幾個bit,比如IPv4 address range是10.0.0./8,那麼IPv4MaskLen就是8,使用後面24bit來計算6rd delegated prefix。
6rdPrefix 6rd IPv6 prefix
6rdPrefixLen 6rd IPv6 prefix length.
6rdBRIPv4Address 6rd Border Relay的IPv4 address.


Customer Edge Configuration
這四個configured value可透過TR-69,PPP或手動方式設定,這份RFC使用DHCP方式取得參數。

6rd DHCPv4 Option

6rdBRIPv4Address允許一個以上,不過OPTION_6RD只能限制最多只有一個6rd domain,不支援多個6rd domain。當6rd被啟動, CE會設定default route到BR,比如CE IP: 10.100.100.1/8, BR IP: 10.0.0.1, 6rdPrefix: 201:db8/32,那麼CE的routing table會是這樣:
     ::/0 -> 6rd-virtual-int0 via 2001:db8:0:100:: (default route)
     2001:db8::/32 -> 6rd-virtual-int0 (direct connect to 6rd)
     2001:db8:6464:100::/56 -> Null0 (delegated prefix null route)
     2001:db8:6464:100::/64 -> Ethernet0 (LAN interface)

Border Relay Configuration
BR的位址可以利用anycast address達到loading baalancing和reliability.


IPv6 in IPv4 Encapsulation

IPv6的Traffic class field必須被複製到IPv4的Tos欄位(可以參考RFC 4213/3056/2983/3168等)。

Maximum Transmission Unit
6rd的MTU應該被設成CE WAN side的MTU - 20 bytes(IPv4 header),如果IPv4 MTU是1500,那麼6rd Tunnel MTU應該被設成1500-20=1480。如果缺乏資訊,6rd MTU應該被設成1280。

Receiving Rules
為了防止spoofing攻擊,6rd的BR和CE應該根據6rd domain的參數,驗證6rd Tunnel的IPv4 address和IPv6 address的IPv4部分是否相符,不符合就drop。


IPv6 Address Space Usage

基本上就是6rd prefix length和IPv4MaskLen的取捨,如果要給user的6rd delegated prefix是 /60,而IPv4MaskLen是24(根據IPv4 aggregate的程度),那麼6rdPrefixLen就要給60-24=36。



    參考資料:
  1. RFC 5969 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) -- Protocol Specification




2013年9月21日 星期六

RFC 5569 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd)之筆記


Abstract

6rd是建立在6to4的機制上,提供ISP快速布建IPv6網路的機制,
和6to4相似處:
  statless IPv6(IPv6 prefix + IPv4 address information),並且將IPv6封裝在IPv4上在IPv4-only網路上傳送。
和6to4不同處:
  6to4使用2002::/16的prefix,而6rd使用ISP給的prefix。


Introduction

描述Free這間ISP成功的使用6rd快速布建IPv6網路(5周),而且低成本,變動少。


Problem Statement and Purpose of 6rd

ISP/Customer/Application之間的死結,影響IPv6布置的速度。
ISP等待Customer有需求才會想布置IPv6,而客戶只有當應程式需要IPv6才會想用IPv6,應用程式卻因為沒有IPv6所以在NAT底下繼續奮鬥。
ISPs wait for customer demand before deploying IPv6; customers don't demand IPv6 as long as application vendors announce that their products work on existing infrastructures (that are IPv4 with NATs); application vendors focus their investments on NAT traversal compatibility as long as ISPs don't deploy IPv6.

Problem
6to4的routing問題,6to4的IPv6 address是由IPv4算出來的,如:ISP給你10.1.1.1,你的6to4 address就是2001:0a01:0101::,另外一個ISP也給他的client相同的IPv4 Addresss,而他也使用了6to4,routing就出問題了。這個問題的癥結點就是相同的prefix,如果由ISP各自給合法的Prefix,就沒這問題了。因為即使是NAT,各自的Prefix還是會不同,IPv6 address仍可保證唯一。


Specification

6rd relay server的IPv4 anycast address可以由ISP自行決定,通常會避免掉192.88.99.1這個6to4專用address。

圖中說明,6rd CPE會負責將IPv6的packet封裝在IPv4裡面,並且往6rd relay server傳送,之後就可以送到IPv6的Network去,反過來,目的地是ISP的IPv6 prefix就會經由6RD relay server送到6rd CPE去。

    參考資料:
  1. 6to4 and 6rd
  2. RFC 5569 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd)





2013年9月14日 星期六

融券現償


102/09/04券賣國泰金$42.35,保證金38,200。
102/09/12現償國泰金$43.25,應退$42.35,因為已經賣在42.35。
102/09/13收到$38200 + $42350 - 費用(60+127+33) + 利息(3) = 80333。

年/月/日 股票別 股數 單價 價金 手續費 交易稅 淨付額 擔保品 融資金額 融券保證金 借券費
102/09/04
券賣
2882
國泰金
1,000 42.35 42,350 60 127 38,200 0 42,130 38,200 33

金額詳細算法:
保證金:成交價金x 保證金成數(90%)
42350 x 0.9 = 38115

借卷費:又稱融券手續費,成交價金x融券手續費率(0.08%)
42350 x 0.0008 = 33.88

賣出手續費:成交價金 x 賣出手續費率(0.1425% X 折扣)
42350 x 0.001425 = 60.35

證交稅:成交價金x證交稅率(0.3%)
42350 x 0.003 = 127.05

融卷放空可向券商收取利息,
利息=(擔保品價金+保證金) x 融卷利率(0.2%) x 融資券計息天數/365
(38200 + 42350) x 0.002 x 8 / 365 = 3.531


    參考資料:
  1. 券商優惠列表(含融資劵利率)




2013年9月7日 星期六

DHCPv6-PD


DHCPv6 Prefix Delegation (DHCPv6-PD)定義在RFC 3633,是DHCPv6的extension (option)。主要是用來和DHCPv6-PD server要求prefix給DHCPv6-PD client其他的interface。

Network layout如下:


Server端是Windows,使用dibber,設定檔如下(server.conf):
# Logging level range: 1(Emergency)-8(Debug)
log-level 8

# Don't log full date
log-mode short

iface "區域連線 35"
{

# clients should renew every half an hour
 T1 1800

# In case of troubles, after 45 minutes, ask any server
 T2 2700

# Addresses should be prefered for an hour
 prefered-lifetime 3600

# and should be valid for 2 hours
 valid-lifetime 7200
 
 class {
   pool 5000:1234::/48
 }

 # the following lines instruct server to grant each client
 # 1 or 2 prefixes (if you have uncommented second line with pd-pool or not). 
 # For example, client might get
 # 2222:2222:2222:222:2222:993f:6485:0/112 and 
 # 1111:1111:1111:1111:1111::993f:6485:0/112
 pd-class {
        pd-pool 2222:2222:1234::/48
        pd-length 48
        T1 11111
        T2 22222
    }
 
}


pd-pool 2222:2222:1234::/48
DHCPv6-PD server管理的prefix為2222:2222:1234::/48

pd-length 48
切割單位為48,等於全部發送出去。如果pd-length 56,則會切分2^(56-48) = 256個單位分發。也就是client會收到Prefix length = 56,Prefix Address = 2222:2222:1234:xx00::的訊息。


Client端是Linux,使用wide-dhcpv6,設定檔如下(/tmp/dhcp6c.conf):
interface br0 {
   send ia-pd 1;
};

id-assoc pd 1 {
    prefix-interface usb0 {
        sla-id 2;
    };
    prefix-interface usb1 {
        sla-id 3;
    };
};


send ia-pd 1:
送出id為1的pd請求

sla-len:
這裡省略了sla-len,sla-len的設定原則如下:
64 - (The length of the delegation you are getting)
如Server的pd-length為48,那麼這邊的sla-len就要設16,不過可以省略不設。

sla-id 0:
設定prefix id,範圍為0 ~ 2^sla-len,如 sla-len = 8,那麼範圍就是0~255。


執行結果
root@lte-iad:/ramdisk/tmp# ifconfig usb0
usb0      Link encap:Ethernet  HWaddr 11:22:33:E0:E3:B9
          inet6 addr: fe80::1122:33ff:fee0:e3b9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX byt.s:RX1920 (1.8 KiB)

root@lte-iad:/ramdisk/tmp# ifconfig usb1
usb1      Link encap:Ethernet  HWaddr 11:22:33:07:16:C7
          inet6 addr: fe80::1122:33ff:fe07:16c7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:1700 (1.6 KiB)

root@lte-iad:/ramdisk/tmp# ifconfig br0
br0       Link encap:Ethernet  HWaddr 11:22:33:97:F0:E6
          inet6 addr: fe80::1122:33ff:fe97:f0e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:630 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14577 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:75873 (74.0 KiB)  TX bytes:10922a79 (1.0 MiB)

root@lte-iad:/ramdisk/tmp# dhcp6c -c /tmp/dhcp6c.conf br0
Line: 418 *** family: 10, socktype: 1, protocol: 17, flags: 1, (sockaddr) address: ::, address len: 28 ***
Line: 502 *** family: 10, socktype: 1, protocol: 17, flags: 0, (sockaddr) addres,s: ff02::1:2, address len: 28 ***

root@lte-iad:/ramdisk/tmp# ifconfig usb0
usb0      Link encap:Ethernet  HWaddr 11:22:33:E0:E3:B9
          inet6 addr: 2222:2222:1234:2:1122:33ff:fee0:e3b9/64 Scope:Global
          inet6 addr: fe80::1122:33ff:fee0:e3b9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:5090 (4.9 KiB)

root@lte-iad:/ramdisk/tmp# ifconfig usb1
usb1      Link encap:Ethernet  HWaddr 11:22:33:07:16:C7
          inet6 addr: 2222:2222:1234:3:1122:33ff:fe07:16c7/64 Scope:Global
          inet6 addr: fe80::1122:33ff:fe07:16c7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:4928 (4.8 KiB)

root@lte-iad:/ramdisk/tmp# ifconfig br0
br0       Link encap:Ethernet  HWaddr 11:22:33:97:F0:E6
          inet6 addr: fe80::1122:33ff:fe97:f0e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1086 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30600 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:134671 (131.5 KiB)  TX bytes:2324630 (2.2 MiB)







2013年8月4日 星期日

RFC 4862 - IPv6 Stateless Address Autoconfiguration之筆記


1. Introduction


這份文件主要是在規範如何自動組態(autoconfigure)host的interface的IPv6 address,以及DAD(Duplicate Address Detection)驗證address的唯一性程序。
自動組態(autoconfigure)一詞有時候也稱為無狀態自動組態(stateless autoconfigure),也僅用於host,router則不在此RFC範圍內,而之所以稱為stateless autoconfigure是因為相較於statefull DHCPv6而言,網路上並沒有像DHCP server一樣的機器記錄address使用情況,所以稱為stateless。
"autoconfigure" = "prefix" + "interface ID",router會發出RA(Router Advertisement),RA通常會攜帶Prefix information,Host收到就會根據此Prefix information再加上"interface ID"組出IPv6 address。


IPv6 address有幾個狀態,當開始autoconfigure到DAD完成前,address是不能被指定到interface的,此時稱為tentative,當唯一性確認,並指定到interface開始到Preferred Lifetime結束前稱為"preferred",之後到Valid Lifetime結束前稱為"Deprecated",Valid Lifetime結束後就稱為Invalid。
如圖:



2. Terminology


tentative address、preferred address、deprecated address、invalid address分別被標是在上圖(IPv6 Address status)綠色線(time)以上的部分。preferred lifetime、valid lifetime則是分別被標示在綠色線(time)以下的部分。



3. Design Goals

  1. 不需要手動設定address
  2. 在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊。
  3. 在large sites底下沒有DHCPv6也能透過Router的RA進行address的configuration。
  4. 有renumbering的能力,透過lifetimes達成此目標。



4. Protocol Overview


Autoconfiguration只有在multicast-capable的link上執行,而且當該interface被enable就開始執行link-local的部分,這樣就能符合設計目標之一"在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊"。
Autoconfiguration的處理程序
  1. tentative link-local address自動產生,此時為tentative狀態。
  2. 執行DAD(Duplicate Address Detection),送出NS(Neighbor Solicitation)。
  3. DAD成功(隔一段時間沒有收到Neighbor Advertisement),將該address指定給該interface,相關的solicited-node multicast link-layer address也會被註冊到interface中。
    DAD失敗,需要手動設定IPv6 Address。



5. Protocol Specification


5.5.3 Router Advertisement Processing
  • 如果Autonomous flag沒被設定,忽略該Prefix Information。
  • 如果Prefix是Link-Local prefix,忽略該Prefix Information。
  • 如果Preferred lifetime大於Valid lifetime,忽略該Prefix Information。



Note
RFC 2464 - Transmission of IPv6 Packets over Ethernet Networks
    4. Stateless Autoconfiguration
        An IPv6 address prefix used for stateless autoconfiguration 
        of an Ethernet interface must have a length of 64 bits.



在XP上顯示IPv6 Address


在XP中可以使用指令"ipv6"操作IPv6相關設定,也可以使用netsh指令來操作。
以下圖是顯示IPv6的information:

其中第二條紅線, 是因為privacy為enable,XP自動產生位置。
第三條紅線, 則是根據網卡資訊,自動產生,後面的時間為 valid time / preferred time,因為preffered還大於0,所以這個Address處於preffered狀態(顯示於最前面的preferred)。
第四行紅線,則是會根據指定的IPv6 address,會註冊相對應的Solicited-node multicast address。


    參考資料:
  1. RFC 4862
  2. IPv6 Address Autoconfiguration
  3. RFC 2462 IPv6 Stateless Address Autoconfiguration




2013年7月28日 星期日

ubuntu 13.04英文版裝中文輸入(注音)


apt-get install scim-chewing scim-modules-table
System Settings > Language Support > Install / Remove Languages… 選Chinese

System Settings > Language Support > keyboard input method system 選SCIM

接著啟動SCIM刪除不必要的輸入法


增加切換下一個輸入法的組合鍵




2013年6月8日 星期六

RFC 5952 - A Recommendation for IPv6 Address Text Representation 之筆記


1. Introduction

RFC 5952主要在定義IPv6 address的表示法的標準化,主要原因是因為RFC 4291 - IP Version 6 Addressing Architecture定義了IPv6 address,且提供了一些彈性表示法,卻也因為彈性導致相同的address卻有不同的表示法(換言之,不同的表示法卻是指向同一address),這會導致一些問題產生。

以下的IPv6 address都是相同的:
2001:db8:0:0:1:0:0:1
2001:0db8:0:0:1:0:0:1 
2001:db8::1:0:0:1
2001:db8::0:1:0:0:1 
2001:0db8::1:0:0:1
2001:db8:0:0:1::1 
2001:db8:0000:0:1::1
2001:DB8:0:0:1::1 



2. Text Representation Flexibility of RFC 4291


2.1. Leading Zeros in a 16-Bit Field
'It is not necessary to write the leading zeros in an individual field.'
以0為開頭的字沒必要寫,因為這樣,所以0開頭的字母可寫可不寫,如:
2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001
2001:db8:aaaa:bbbb:cccc:dddd:eeee:001
2001:db8:aaaa:bbbb:cccc:dddd:eeee:01
2001:db8:aaaa:bbbb:cccc:dddd:eeee:1


2.2. Zero Compression
'A special syntax is available to compress the zeros. The use of "::" indicates one or more groups of 16 bits of zeros.'
'The "::" can only appear once in an address.'
可以將1個或多個的"0000"用::這個特殊寫法表示,不過只能出現一次如:
2001:db8:0:0:0::1
2001:db8:0:0::1
2001:db8:0::1
2001:db8::1


2.3. Uppercase or Lowercase
RFC 4291並沒有特別指明說要用大寫或小寫表示之。


3. Problems Encountered with the Flexible Model


簡單來說,就是比對會有問題,比如對eth0指定IPv6網址2001:db8:0:0:1::1,之後用ifconfig eth0| grep 來找卻找不到,因為ifconfig顯示的是2001:db8::1:0:0:1這個IPv6 address。大小寫的差異在UNIX系統更是常見,比如2001:db8:0:0:1:0:0:1和2001:DB8:0:0:1:0:0:1在比對沒有特別指明case insensitive參數就會視為不同。


4. A Recommendation for IPv6 Text Representation


4.1. Handling Leading Zeros in a 16-Bit Field
Leading zeros MUST be suppressed.0開頭的字母都必須被省略,如2001:0db8::0001這是不行的,必須寫成2001:db8::1。

4.2. "::" Usage
The use of the symbol "::" MUST be used to its maximum capability. The symbol "::" MUST NOT be used to shorten just one 16-bit 0 field.
表示式必須盡可能的簡化,而且只有一個"0000"時不能簡化。所以2001:db8:0:0:0:0:2:1是不正確的,應該被寫成2001:db8::2:1。而2001:db8::1:1:1:1:1卻是不正確的,應該被寫成2001:db8:0:1:1:1:1:1。
When there is an alternative choice in the placement of a "::", the longest run of consecutive 16-bit 0 fields MUST be shortened. When the length of the consecutive 16-bit 0 fields are equal, the first sequence of zero bits MUST be shortened.
簡而言之,就是如果有兩個可以簡化::的地方,挑表示式最小,如果都是最小,則挑第一個位置。如2001:0:0:1:0:0:0:1必須被簡化為2001::1:0:0:0:1。

4.3. Lowercase
用小寫表示之。


5. Text Representation of Special Addresses


IPv4-Mapped IPv6 addresses [RFC5214]的寫法要符合前面的規則,且後面為IPv4寫法,如0:0:0:0:0:ffff:192.0.2.1應該被寫成::ffff:192.0.2.1。


6. Notes on Combining IPv6 Addresses with Port Numbers


以下是一般結合port的寫法:
  • [2001:db8::1]:80
  • 2001:db8::1:80
  • 2001:db8::1.80
  • 2001:db8::1 port 80
  • 2001:db8::1p80
  • 2001:db8::1#80

建議使用第一種寫法[2001:db8::1]:80





2013年5月26日 星期日

Packet Filtering HOWTO 讀後筆記II


原文:Packet Filtering HOWTO


Packet Filtering HOWTO 讀後筆記I



7. Using iptables


Extensions to iptables: New Matches
iptables具備可擴充性(extensible),這表示我們可以在kernel或是iptable上新增新的功能。目前kernel和iptables已經具備許多的標準擴充功能,您可以在kernel/net/netfilter目錄底下看到許多的xt_XXX.c。在iptables也會有相對應的extensions,在extensions/libxt_XXX.c,iptables的extensions會被build成shared library,需要使用-m將extensions載入。如果要取得extensions('-p'的說明,只要在後面加上-h或是--help即可。
# iptables -p tcp --help
iptables v1.4.12

Usage: iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain            Append to chain
  --check   -C chain            Check for the existence of a rule
  --delete  -D chain            Delete matching rule from chain
  --delete  -D chain rulenum
                                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                                Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
                                Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
                                List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
                                Print the rules in a chain or all chains
  --flush   -F [chain]          Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
                                Zero counters in chain or all chains
  --new     -N chain            Create a new user-defined chain
  --delete-chain
            -X [chain]          Delete a user-defined chain
  --policy  -P chain target
                                Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
                                Change chain name, (moving any references)
Options:
    --ipv4      -4              Nothing (line is ignored by ip6tables-restore)
    --ipv6      -6              Error (line is ignored by iptables-restore)
[!] --proto     -p proto        protocol: by number or name, eg. `tcp'
[!] --source    -s address[/mask][...]
                                source specification
[!] --destination -d address[/mask][...]
                                destination specification
[!] --in-interface -i input name[+]
                                network interface name ([+] for wildcard)
 --jump -j target
                                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match       -m match
                                extended match (may load extension)
  --numeric     -n              numeric output of addresses and ports
[!] --out-interface -o output name[+]
                                network interface name ([+] for wildcard)
  --table       -t table        table to manipulate (default: `filter')
  --verbose     -v              verbose mode
  --line-numbers                print line numbers when listing
  --exact       -x              expand numbers (display exact values)
[!] --fragment  -f              match second or further fragments only
  --modprobe=          try to insert modules using this command
  --set-counters PKTS BYTES     set the counter during insert/append
[!] --version   -V              print package version.

tcp match options:
[!] --tcp-flags mask comp       match when TCP flags & mask == comp
                                (Flags: SYN ACK FIN RST URG PSH ALL NONE)
[!] --syn                       match when only SYN flag set
                                (equivalent to --tcp-flags SYN,RST,ACK,FIN SYN)
[!] --source-port port[:port]
 --sport ...
                                match source port(s)
[!] --destination-port port[:port]
 --dport ...
                                match destination port(s)
[!] --tcp-option number        match if TCP option set



Other Match Extensions
mac 這個module必須用'-m mac''--match mac'載入,用於比對source MAC,只能用於PREOUTING和INPUT這兩個chain。
limit 這個module必須用'-m limit''--match limit'載入,用於限制match的速率。--limit單位可以是/second、/minute、/hour或是/day,如5/s,每秒5個。--limit-burstnumber to match in a burst。用下圖來描述這兩者的涵義

limit-burst就是水桶的容量,limit就是水桶流出的流量,當packet裝滿水桶,後面的就會被丟棄,隨著時間過去,水桶會流出lmit個packet,就是可以再允許limit流進水桶。

7.4 Target Specifications
何謂target?what to do to the packets which match our tests. This is called a rule's target.(當match我們的條件之後,所要採取的動作就稱為rule的target)。target也可以是User-defined chains。

iptables是first match,packet進入INPUT這個chain後,會由第一條rule開始比對,如果比對成功並且有明確的target(ACCRPT/DROP)就會執行丟棄/同意packet並且終止比對,當target是另外一個chain時,就會jump到該chain中繼續進行比對,如果都沒有match,就會再回到原來的chain中繼續往下比對。
# iptables -A INPUT -p icmp
# iptables -A INPUT -p icmp -j LOG
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

    0     0            icmp --  any    any     anywhere             anywhere

    0     0 LOG        icmp --  any    any     anywhere             anywhere
         LOG level warning
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination


Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

# ping 127.0.0.1 -c 1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
[ 6975.682678] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.
0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 C
ODE=0 ID=4908 SEQ=0
[ 6975.697694] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.
0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=49768 PROTO=ICMP TYPE=0
CODE=0 ID=4908 SEQ=0
64 bytes from 127.0.0.1: seq=0 ttl=64 time=34.397 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 34.397/34.397/34.397 ms
# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

    2   168            icmp --  any    any     anywhere             anywhere

    2   168 LOG        icmp --  any    any     anywhere             anywhere
         LOG level warning
    2   168 ACCEPT     icmp --  any    any     anywhere             anywhere


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination


Chain OUTPUT (policy ACCEPT 2 packets, 168 bytes)
 pkts bytes target     prot opt in     out     source               destination

Extensions to iptables: New Targets
還有LOG、REJECT、RETURN和QUEUE等target。詳細用法請自行參考該page。




2013年5月25日 星期六

Packet Filtering HOWTO 讀後筆記I


原文:Packet Filtering HOWTO



3 What is a packet filter?


packet filter是一套軟體,會根據packet的header決定這個packet的命運,可能是ACCEPT(bypass)或是DROP,或是其他複雜的操作(NAT/QUEUE/LOG)。

3.2 How Do I Packet Filter Under Linux?
在Linux 1.1就有packet filtering功能,在1994年由Alan Cox根據BSD的ipfw移植過來,經過Jos Vos和其他人的努力,在1999年的Linux 2.4研發出第四代tool"iptables"使用至今。
iptables可以隨時的新增或刪除在kernel中的packet filtering table的rule,每當重新開機後,這些rule就會消失,您可以使用iptables-save/iptables-restore將這些rule存到檔案,或由檔案回存到kernel中。

6. How Packets Traverse The Filters


"filter"這個table有三個chain,分別是"INPUT""OUTPUT""FORWARD"。如下圖:

當packet傳入(incoming),會先經過Routing Decision,決定封包的去向(Local In/Forwarding/Drop),當封包經過filter的這三個chain的任何一個,都會進行rule的比對並且決定封包的去留,如果是Drop,就會立刻丟棄封包,如果是ACCEPT就會往下一個rule進行比對( `if the packet header looks like this, then here's what to do with the packet')。每一個chain都有所謂的default policy,當所有的rule在這個chain都不match,就會執行這個policy(DROP/ACCEPT)。

7. Using iptables


filter table內建的三個chain INPUT、OUTPUT和FORWARD是不能被刪除的,這裡有幾個對China進行操作的選項
  1. 新增一個chain / Create a new chain (-N).
  2. 刪除空白的chain / Delete an empty chain (-X).
  3. 改變內建的chain的policy / Change the policy for a built-in chain. (-P).
  4. 列出chain的rule / List the rules in a chain (-L).
  5. 清除所有在chain中的rule / Flush the rules out of a chain (-F).
  6. 清除chain中rule的counter / Zero the packet and byte counters on all rules in a chain (-Z).

以下是對rule進行操作的選項:
  1. 新增rule到chain的後面 / Append a new rule to a chain (-A).
  2. 插入rule到chain的某個位置 / Insert a new rule at some position in a chain (-I).
  3. 取代chain中某個rule / Replace a rule at some position in a chain (-R).
  4. 移除chain中某個rule / Delete a rule at some position in a chain, or the first that matches (-D).


7.2 Operations on a Single Rule
最常用到的就是append(-A)和delete(-D) rule到chain中,當然還有insert(-I)和replace(-R)。每一條rule基本上就是設定一些條件和target,當packet滿足這些條件,就會執行該target,可能是ACCEPT也可能是DROP。比如,我們要將source ip是127.0.0.1的ICMP做DROP:
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
#

[!] -s, --source address[/mask][,...] source address,除了可以使用IP以外,也可以是hostname,不過只有在設定的當下會做一次resolved。
[!] -p, --protocol protocol 可以是tcp、udp、udplite、icmp、esp、ah、sctp或是all,也可以是 /etc/protocols裡面的名稱,或是任何數值。
-j, --jump target This specifies the target of the rule; i.e., what to do if the packet matches it. Target也可以是 user-defined chain。
每個選項前面都可以加上!表示反向的意思。

要刪除之前設定的rule可以使用
iptables -D INPUT 1

或是
iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

第一種是刪除第一條rule,第二種是刪除符合-s 127.0.0.1 -p icmp -j DROP這個condition的rule。

常用的option還有:
[!] -i, --in-interface name packet由哪個interface收到,只能套用在INPUT、FORWARD和PREROUTING這些chain,interface name以+為結尾就表示pattern比對。如-i ppp+就會比對所有ppp開頭的interface。
[!] -o, --out-interface name packet會由哪個interface送出,只能套用在FORWARD、OUTPUT和POSTROUTING這些chain,同樣可以使用+



2013年5月1日 星期三

6 sigma上課筆記 - Interactions Plot


人視視覺上的動物,所以由圖形上來了解趨勢會比一堆數據來的容易些,在6 sigma上課筆記 - 二維表格轉Minitab格式 中,我們想知道Temp和Press對yeild有哪什麼影響,正交互作用?逆交互作用?以及有沒有交互作用?
在Minitab中可以用Interactions Plot功能來判斷。基本判斷方法:如果圖形呈現平行,就是沒有交互作用。如果圖形呈現不對稱(有增強作用)或交叉(互逆作用),就是有交互作用。
Stat > ANOVA > Interactions Plot



由圖可知有交互作用。


6 sigma上課筆記 - 二維表格轉Minitab格式


上課的時候老師有說到,我們常常拿到的表格是二維的,最好把他轉成統計上常用的格式Stack Rows(switch rows to columns),為什麼要這種格式呢?因為這樣如果增加實驗因子,整個表格不會有太大變動。
假設實驗數據如下:



我們可以在Minitab 14中執行Data > Stack > Rows


因為Press 1/Press 2這兩column的資料是要堆疊的,所以放置在to be stacked。
Store stacked data in是堆疊後的資料,我們放在下一個空白的 column,並且命名為yield。
Store column subscripts in是column這個factor,我們是Press 1/Press 2,所以我們命名為Press。
Expand the following columns while stacking rows就是row這個factor,我們是Temp 1/Temp 2,所以我們命名為Temp。


最後就是跑出來的worksheet了