<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 練習 26:網絡:封包過濾配置,`iptables` > 原文:[Exercise 26. Networking: packet filter configuration, iptables](https://archive.fo/D3zbt) > 譯者:[飛龍](https://github.com/wizardforcel) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) > 自豪地采用[谷歌翻譯](https://translate.google.cn/) 讓我以引用維基百科上的[`iptables`](http://en.wikipedia.org/wiki/Iptables)來開始: > `iptables`是一個用戶態應用程序,允許系統管理員配置由 Linux 內核防火墻(實現為不同的 Netfilter 模塊)提供的表,以及它存儲的鏈和規則。不同的內核模塊和程序目前用于不同的協議;`iptables`適用于 IPv4,`ip6tables`適用于 IPv6,`arptables`適用于 ARP,`ebtables`適用于以太網幀。 為了使用它,你必須了解以下概念: + [`LINKTYPE_LINUX_SLL`](http://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL.html) - `tcpdump`偽鏈路層協議。 + [以太網幀頭部](http://en.wikipedia.org/wiki/Ethernet_frame%23Header) - 以太網鏈路上的數據包稱為以太網幀。幀以前綴和起始分隔符開始。接下來,每個以太網幀都有一個頭部,其特征為源和目標 MAC 地址。幀的中間部分是載荷數據,包含幀中攜帶的其他協議(例如,互聯網協議)的任何頭部。該幀以 32 位循環冗余校驗(CRC)結束,用于檢測傳輸中數據的任何損壞。 + [IPv4 頭部](http://en.wikipedia.org/wiki/IPv4_header%23IPv4%20header) - IP 封包包括頭部部分和數據部分。IPv4 封包頭部由 14 個字段組成,其中 13 個是必需的。第十四個字段是可選的,適當地命名為:`options`。 + [TCP 段結構](http://en.wikipedia.org/wiki/Transmission_Control_Protocol%23TCP_segment_structure) - 傳輸控制協議接受來自數據流的數據,將其分割成塊,并添加 TCP 頭部來創建 TCP 段。TCP 段然后被封裝成互聯網協議(IP)數據報。TCP 段是“信息封包,TCP 用于與對方交換數據”。 我會提醒你,讓你獲取一些指南: + 閱讀相應的維基百科文章,直到你至少表面上理解了它(但是深入研究當然更好)。 + 展開站點左側的 IP 地址樹節點,并通過它來以你的方式實現。 + 展開 TCP 樹節點并執行相同操作。 + 閱讀 [Linux 網絡概念介紹](http://www.iptables.org/documentation/HOWTO//networking-concepts-HOWTO-3.html%23ss3.1)。這本指南很好,因為它甚至承認 互聯網是為情欲而生的。 比起 [Peter Harrison 的優秀指南](http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables),我沒辦法更好地描述`iptables`了。如果你從未使用過它,請先閱讀本指南。 但是,我將會將理論付諸實踐,并 在數據交換的一個非常簡單的情況下,逐步展示出`iptalbes`內部的內容。第一件事情是主要概念: `iptables` - 用于在 Linux 內核中設置,維護和檢查 IPv4 包過濾規則表的程序。可以定義幾個不同的表。每個表包含多個內置鏈,并且還可以包含用戶定義的鏈。 `ip6tables` - 用于 IPv6 的相同東西。 鏈 - 可以匹配一組數據包的規則列表。每個規則規定了,如何處理匹配的數據包。這被稱為目標,它可能是相同表中的,用戶定義的鏈的跳轉。 目標 - 防火墻規則為封包和目標指定了判別標準。如果數據包不匹配,就會檢查的鏈中的下一個規則;如果它匹配,則下一個規則由目標的值指定,該值可以是用戶定義鏈的名稱或特殊值之一: `ACCEPT` - 讓包通過。 `DROP` - 將數據包丟棄。 `QUEUE` - 將數據包傳遞給用戶空間。 `RETURN` - 停止遍歷此鏈,并在上一個(調用)鏈中的下一個規則處恢復。如果達到了內置鏈的結尾,或者內置鏈中的一個帶有`RETURN`的規則匹配它,鏈策略指定的目標決定了數據包的命運。 現在讓我們看看有什么默認的表和內置的鏈: | 表名 | 內置鏈 | 描述 | | --- | --- | --- | | `raw` | | 該表主要用于配置與`NOTRACK`目標結合的連接跟蹤的免除。它以較高的優先級在`netfilter`鉤子中注冊,因此在`ip_conntrack`或任何其他 IP 表之前調用。 | | | PREROUTING | 用于經過任何網絡接口到達的封包。 | | | OUTPUT | 用于本地進程生成的封包。 | | `mangle` | | 該表用于專門的數據包更改。 | | | PREROUTING | 用于在路由之前更改傳入的數據包。 | | | OUTPUT | 用于在路由之前更改本地生成的數據包。 | | | INPUT | 用于進入本機的數據包。 | | | FORWARD | 用于經過本機的數據包。 | | | POSTROUTING | 用于當數據包打算出去時,更改它們。 | | `nat` | | 當遇到創建新連接的數據包時,將查看此表。 | | | PREROUTING | 用于一旦數據包進來,就更改它們。 | | | OUTPUT | 用于在路由之前更改本地生成的數據包。 | | | POSTROUTING | 用于當數據包打算出去時,更改它們。 | | `filter` | | 這是默認表(如果沒有傳入`-t`選項)。 | | | INPUT | 用于發往本地套接字的數據包。 | | | FORWARD | 用于經過本機的數據包。 | | | OUTPUT | 用于本地生成的數據包。 | 好的,我們準備看看它實際如何運作。我會從我的家用計算機,使用 TCP 協議和`netcat`向`vm1`發送一個字符串`Hello world!`,`netcat`就像`cat`一樣,但是通過網絡。起步: 1\. 我將另一個端口,80,轉發到我運行 Linux 的家用 PC,所以我能象這樣連接它: ``` (My home PC) --> vm1:80 ``` 2\. 我將這個規則添加到`iptables`,來記錄`iptables`內部的數據包發生了什么。 ``` sudo iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 -j TRACE sudo iptables -t raw -A INPUT -p tcp -m tcp --sport 80 -j TRACE ``` 這是我的`vm1`上的`iptables`規則集: ``` root@vm1:/home/user1# for i in raw mangle nat filter ; do echo -e "\n-----" TABLE: $i '-----' ; iptables -t $i -L ; done ----- TABLE: raw ----- Chain PREROUTING (policy ACCEPT) target prot opt source destination TRACE tcp -- anywhere anywhere tcp dpt:www Chain OUTPUT (policy ACCEPT) target prot opt source destination TRACE tcp -- anywhere anywhere tcp spt:www ----- TABLE: mangle ----- Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination ----- TABLE: nat ----- Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ----- TABLE: filter ----- Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ``` 你可以看到,沒有其它規則了。另一種查看`iptables`規則的方式,是使用`iptables-save`工具: ``` root@vm1:/home/user1# iptables-save # Generated by iptables-save v1.4.8 on Fri Jul 13 08:09:04 2012 #(1) *mangle #(2) (3) (4) (5) :PREROUTING ACCEPT [15662:802240] :INPUT ACCEPT [15662:802240] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [12756:3671974] :POSTROUTING ACCEPT [12756:3671974] COMMIT # Completed on Fri Jul 13 08:09:04 2012 # Generated by iptables-save v1.4.8 on Fri Jul 13 08:09:04 2012 *nat :PREROUTING ACCEPT [18:792] :POSTROUTING ACCEPT [42:2660] :OUTPUT ACCEPT [42:2660] COMMIT # Completed on Fri Jul 13 08:09:04 2012 # Generated by iptables-save v1.4.8 on Fri Jul 13 08:09:04 2012 *raw :PREROUTING ACCEPT [15854:814892] :OUTPUT ACCEPT [12855:3682054] -A PREROUTING -p tcp -m tcp --dport 80 -j TRACE -A OUTPUT -p tcp -m tcp --sport 80 -j TRACE COMMIT # Completed on Fri Jul 13 08:09:04 2012 # Generated by iptables-save v1.4.8 on Fri Jul 13 08:09:04 2012 *filter :INPUT ACCEPT [35107:2459066] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [26433:10670628] COMMIT # Completed on Fri Jul 13 08:09:04 2012 ``` ` iptables-save`字段如下所示: | 字段 | 描述 | | --- | --- | | (1) | 表名稱 | | (2) | 鏈名稱 | | (3) | 鏈策略 | | (4) | 封包計數 | | (5) | 字節計數 | 3\. 我啟動`nc`來監聽端口 80: ``` nc -l 80 ``` 4\. 我向`vm1`發送字符串: ``` echo 'Hello, world!' | nc localhost 80 ``` 下面的是我的家用 PC 和`vm1`之間的交換: ``` 08:00:05.655339 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [S], seq 4164179969, win 65535, options [mss 1460], length 0 08:00:05.655653 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [S.], seq 4149908960, ack 4164179970, win 5840, options [mss 1460], length 0 08:00:05.655773 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [.], ack 1, win 65535, length 0 08:00:05.655868 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [P.], seq 1:15, ack 1, win 65535, length 14 08:00:05.655978 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [.], ack 15, win 5840, length 0 08:00:10.037978 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [F.], seq 15, ack 1, win 65535, length 0 08:00:10.038287 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [F.], seq 1, ack 16, win 5840, length 0 08:00:10.038993 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [.], ack 2, win 65535, length 0 ``` 讓我們回憶,數據如何交換。為此,讓我們拆開第一個封包。 ``` # (13) (15) (14) (16) (20) (17) (25) 08:00:05.655339 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [S], seq 4164179969, win 65535, # (8) (9) options [mss 1460], length 0 # (1) (2) (3) (4) (5) # ____ ____ ____ ___________________ ____ 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... # (6) (7) (8) (9)(10,11)(12) (13) # ____ ____ ____ ____ /\/\ ____ _________ 0x0010: 4500 002c a006 0000 4006 c2b5 0a00 0202 E..,....@....... # (14) (15) (16) (17) (18) # _________ ____ ____ _________ __________ 0x0020: 0a00 020f c94e 0050 f834 5801 0000 0000 .....N.P.4X..... # (19,20)(21) (22) (23) (24) (25) # /\/\ ____ ____ ____ ____ ____ 0x0030: 6002 ffff 6641 0000 0204 05b4 0000 `...fA........ ``` 我們封包中的字段和描述: | DOD 模型層 | OSI 模型層 | 位于 | 字段 | 描述 | | --- | --- | --- | --- | --- | --- | | 鏈路 | 物理/數據鏈路 | `LINUX_SLL` 頭部 | (1) | 封包類型 | | | | | (2) | `ARPHRD_` 類型 | | | | | (3) | 鏈路層 (MAC) 地址長度 | | | | | (4) | 鏈路層 (MAC) 源地址 | | | | | (5) | 協議類型 (IP) | | 互聯網 | 網絡 | IPv4 頭部 | (6) | 版本,互聯網頭部長度,差分服務代碼點,顯式擁塞通知. | | | | | (7) | 總長度 | | | | | (8) | 身份,主要用于源 IP 數據報的段的唯一性鑒定 | | | | | (9) | 標志,段的偏移 | | | | | (10) | 生存時間 (TTL) | | | | | (11) | 協議編號 | | | | | (12) | 頭部校驗和 | | | | | (13) | 源 IP 地址 | | | | | (14) | 目標 IP 地址 | | 傳輸 | 傳輸 | TCP 頭部 | (15) | 源 TCP 端口 | | | | | (16) | 目標 TCP 端口 | | | | | (17) | TCP 初始序列號 | | | | | (18) | ACK 編號字段 (空的,由于它是第一個封包) | | | | | (19) | | | | | | (20) | SYN TCP 標志 | | | | | (21) | TCP 窗口大小 | | | | | (22) | TCP 校驗和 | | | | | (23) | 緊急指針 | | | | | (24) | 可選字段的開始 | | | | | (25) | TCP 最大段大小 (最大傳輸單元 - 40 字節) | 讓我們看看`iptables`中,這個封包發生了什么: ``` #(1)(2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 # (13) (14) (15) (16) (17) (18) (19) (20) LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 # (21) (22) (23) (24) (25)(26) (27) SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) nat:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) ``` `iptables`日志的字段的描述: | 字段 | 描述 | | --- | --- | | (1) | 表名稱 | | (2) | 鏈名稱 | | (3) | 類型 (用于內建鏈的策略) | | (4) | 規則編號 | | (5) | 輸入接口 | | (6) | 輸出接口 (空的,因為封包的目標是 vm1 自身) | | (7) | MAC 地址 | | (8) | 目標 (vm1) MAC | | (9) | 源 MAC | | (10) | 協議類型:IP | | (11) | 源 IP 地址 | | (12) | 目標 IP 地址 | | (13) | IP 封包長度,以字節為單位 (不包括鏈路層頭部) | | (14) | IP 服務類型 | | (15) | IP 優先級 | | (16) | IP 生存時間 | | (17) | IP 封包 ID | | (18) | 協議類型:TCP | | (19) | TCP 源端口 | | (20) | TCP 目標端口 | | (21) | TCP 序列號 | | (22) | TCP 應答編號 | | (23) | TCP 窗口大小 | | (24) | TCP 保留位 | | (25) | TCP SYN 標志已設置 | | (25) | TCP 緊急指針未設置 | | (25) | TCP 選項 | 現在我將使用`tcpdump`輸出和`iptables`日志,并排(更多的是逐段)向你顯示這個交換。你的任務是逐行瀏覽這個交換,了解會發生什么。我建議你打印這個交換,并使用筆和紙進行處理它,你可以從[特殊頁面](http://nixsrv.com/llthw/ex26/log)打印它。你需要回答的問題是: + 每個字段的意思是什么?拿著鉛筆,將字段從`tcpdump`的蹤跡連接到原始數據包的十六進制數據,再到`iptables`日志。 + 數據包以什么順序進行處理?首先是哪個表,最后是哪個,為什么? + 為什么只有第一個數據包通過`nat`表進行處理? 這是輸出,看看: ``` 08:00:05.655339 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [S], seq 4164179969, win 65535, options [mss 1460], length 0 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... 0x0010: 4500 002c a006 0000 4006 c2b5 0a00 0202 E..,....@....... 0x0020: 0a00 020f c94e 0050 f834 5801 0000 0000 .....N.P.4X..... 0x0030: 6002 ffff 6641 0000 0204 05b4 0000 `...fA........ ` raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) nat:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=40966 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179969 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4) 08:00:05.655653 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [S.], seq 4149908960, ack 4164179970, win 5840, options [mss 1460], length 0 0x0000: 0004 0001 0006 0800 27d4 4568 0000 0800 ........'.Eh.... 0x0010: 4500 002c 0000 4000 4006 22bc 0a00 020f E..,..@.@."..... 0x0020: 0a00 0202 0050 c94e f75a 95e0 f834 5802 .....P.N.Z...4X. 0x0030: 6012 16d0 c224 0000 0204 05b4 `....$...... ' raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908960 ACK=4164179970 WINDOW=5840 RES=0x00 ACK SYN URGP=0 OPT (020405B4) UID=0 GID=0 mangle:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908960 ACK=4164179970 WINDOW=5840 RES=0x00 ACK SYN URGP=0 OPT (020405B4) UID=0 GID=0 filter:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908960 ACK=4164179970 WINDOW=5840 RES=0x00 ACK SYN URGP=0 OPT (020405B4) UID=0 GID=0 mangle:POSTROUTING:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908960 ACK=4164179970 WINDOW=5840 RES=0x00 ACK SYN URGP=0 OPT (020405B4) UID=0 GID=0 08:00:05.655773 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [.], ack 1, win 65535, length 0 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... 0x0010: 4500 0028 a007 0000 4006 c2b8 0a00 0202 E..(....@....... 0x0020: 0a00 020f c94e 0050 f834 5802 f75a 95e1 .....N.P.4X..Z.. 0x0030: 5010 ffff f0b1 0000 0000 0000 0000 P............. raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40967 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK URGP=0 mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40967 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK URGP=0 mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40967 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK URGP=0 filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40967 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK URGP=0 08:00:05.655868 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [P.], seq 1:15, ack 1, win 65535, length 14 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... 0x0010: 4500 0036 a008 0000 4006 c2a9 0a00 0202 E..6....@....... 0x0020: 0a00 020f c94e 0050 f834 5802 f75a 95e1 .....N.P.4X..Z.. 0x0030: 5018 ffff af45 0000 4865 6c6c 6f2c 2077 P....E..Hello,.w 0x0040: 6f72 6c64 210a orld!. raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=40968 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK PSH URGP=0 mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=40968 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK PSH URGP=0 mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=40968 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK PSH URGP=0 filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=40968 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179970 ACK=4149908961 WINDOW=65535 RES=0x00 ACK PSH URGP=0 08:00:05.655978 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [.], ack 15, win 5840, length 0 0x0000: 0004 0001 0006 0800 27d4 4568 0000 0800 ........'.Eh.... 0x0010: 4500 0028 377c 4000 4006 eb43 0a00 020f E..(7|@.@..C.... 0x0020: 0a00 0202 0050 c94e f75a 95e1 f834 5810 .....P.N.Z...4X. 0x0030: 5010 16d0 d9d3 0000 P....... ' raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14204 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179984 WINDOW=5840 RES=0x00 ACK URGP=0 mangle:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14204 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179984 WINDOW=5840 RES=0x00 ACK URGP=0 filter:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14204 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179984 WINDOW=5840 RES=0x00 ACK URGP=0 mangle:POSTROUTING:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14204 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179984 WINDOW=5840 RES=0x00 ACK URGP=0 08:00:10.037978 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [F.], seq 15, ack 1, win 65535, length 0 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... 0x0010: 4500 0028 a00e 0000 4006 c2b1 0a00 0202 E..(....@....... 0x0020: 0a00 020f c94e 0050 f834 5810 f75a 95e1 .....N.P.4X..Z.. 0x0030: 5011 ffff f0a2 0000 0000 0000 0000 P............. raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40974 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179984 ACK=4149908961 WINDOW=65535 RES=0x00 ACK FIN URGP=0 mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40974 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179984 ACK=4149908961 WINDOW=65535 RES=0x00 ACK FIN URGP=0 mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40974 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179984 ACK=4149908961 WINDOW=65535 RES=0x00 ACK FIN URGP=0 filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40974 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179984 ACK=4149908961 WINDOW=65535 RES=0x00 ACK FIN URGP=0 08:00:10.038287 IP 10.0.2.15.80 > 10.0.2.2.51534: Flags [F.], seq 1, ack 16, win 5840, length 0 0x0000: 0004 0001 0006 0800 27d4 4568 0000 0800 ........'.Eh.... 0x0010: 4500 0028 377d 4000 4006 eb42 0a00 020f E..(7}@.@..B.... 0x0020: 0a00 0202 0050 c94e f75a 95e1 f834 5811 .....P.N.Z...4X. 0x0030: 5011 16d0 d9d1 0000 P....... ' raw:OUTPUT:policy:2 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14205 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179985 WINDOW=5840 RES=0x00 ACK FIN URGP=0 UID=0 GID=0 mangle:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14205 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179985 WINDOW=5840 RES=0x00 ACK FIN URGP=0 UID=0 GID=0 filter:OUTPUT:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14205 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179985 WINDOW=5840 RES=0x00 ACK FIN URGP=0 UID=0 GID=0 mangle:POSTROUTING:policy:1 IN= OUT=eth0 SRC=10.0.2.15 DST=10.0.2.2 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=14205 DF PROTO=TCP SPT=80 DPT=51534 SEQ=4149908961 ACK=4164179985 WINDOW=5840 RES=0x00 ACK FIN URGP=0 UID=0 GID=0 08:00:10.038993 IP 10.0.2.2.51534 > 10.0.2.15.80: Flags [.], ack 2, win 65535, length 0 0x0000: 0000 0001 0006 5254 0012 3502 0000 0800 ......RT..5..... 0x0010: 4500 0028 a00f 0000 4006 c2b0 0a00 0202 E..(....@....... 0x0020: 0a00 020f c94e 0050 f834 5811 f75a 95e2 .....N.P.4X..Z.. 0x0030: 5010 ffff f0a1 0000 0000 0000 0000 P............. raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40975 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179985 ACK=4149908962 WINDOW=65535 RES=0x00 ACK URGP=0 mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40975 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179985 ACK=4149908962 WINDOW=65535 RES=0x00 ACK URGP=0 mangle:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40975 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179985 ACK=4149908962 WINDOW=65535 RES=0x00 ACK URGP=0 filter:INPUT:policy:1 IN=eth0 OUT= MAC=08:00:27:d4:45:68:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40975 PROTO=TCP SPT=51534 DPT=80 SEQ=4164179985 ACK=4149908962 WINDOW=65535 RES=0x00 ACK URGP=0 ``` ## 這樣做 ``` 1: sudo iptables-save 2: sudo iptables -t filter -A INPUT -i lo -j ACCEPT 3: sudo iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 4: sudo iptables -t filter -P INPUT DROP 5: sudo iptables -nt filter -L --line-numbers 6: ping -c 2 -W 1 10.0.2.2 7: sudo iptables -t filter -A INPUT --match state --state ESTABLISHED -j ACCEPT 8: sudo iptables -nt filter -L --line-numbers 9: ping -c 2 -W 1 10.0.2.2 10: sudo modprobe ipt_LOG 11: sudo iptables -nt raw -L --line-numbers 12: sudo iptables -t raw -A PREROUTING -p udp -m udp --dport 1024 -j TRACE 13: sudo iptables -t raw -A OUTPUT -p udp -m udp --sport 1024 -j TRACE 14: sudo tail -n0 -f /var/log/kern.log | cut -c52-300 & 15: nc -ulp 1024 & 16: echo 'Hello there!' | nc -u localhost 1000 17: <CTRL+C> 18: fg 19: <CTRL+C> 20: fg 21: <CTRL+C> ``` ## 你會看到什么 ``` user1@vm1:~$ sudo iptables-save # Generated by iptables-save v1.4.8 on Mon Jul 16 09:01:32 2012 *mangle :PREROUTING ACCEPT [45783:3411367] :INPUT ACCEPT [45783:3411367] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [30409:9552110] :POSTROUTING ACCEPT [30331:9543294] COMMIT # Completed on Mon Jul 16 09:01:32 2012 # Generated by iptables-save v1.4.8 on Mon Jul 16 09:01:32 2012 *nat :PREROUTING ACCEPT [24:1056] :POSTROUTING ACCEPT [755:41247] :OUTPUT ACCEPT [817:45207] COMMIT # Completed on Mon Jul 16 09:01:32 2012 # Generated by iptables-save v1.4.8 on Mon Jul 16 09:01:32 2012 *raw :PREROUTING ACCEPT [3171:197900] :OUTPUT ACCEPT [1991:1294054] -A PREROUTING -p udp -m udp --dport 80 -j TRACE -A OUTPUT -p udp -m udp --sport 80 -j TRACE COMMIT # Completed on Mon Jul 16 09:01:32 2012 # Generated by iptables-save v1.4.8 on Mon Jul 16 09:01:32 2012 *filter :INPUT ACCEPT [54:3564] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [28:2540] COMMIT # Completed on Mon Jul 16 09:01:32 2012 user1@vm1:~$ sudo iptables -t filter -A INPUT -i lo -j ACCEPT user1@vm1:~$ sudo iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT user1@vm1:~$ sudo iptables -t filter -P INPUT DROP user1@vm1:~$ sudo iptables -nt filter -L --line-numbers Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination user1@vm1:~$ ping -c 2 -W 1 10.0.2.2 PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data. --- 10.0.2.2 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1008ms user1@vm1:~$ sudo iptables -t filter -A INPUT --match state --state ESTABLISHED -j ACCEPT user1@vm1:~$ sudo iptables -nt filter -L --line-numbers Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination user1@vm1:~$ ping -c 2 -W 1 10.0.2.2 PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data. 64 bytes from 10.0.2.2: icmp_req=1 ttl=63 time=0.385 ms 64 bytes from 10.0.2.2: icmp_req=2 ttl=63 time=0.142 ms --- 10.0.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.142/0.263/0.385/0.122 ms user1@vm1:~$ sudo iptables -nt raw -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination user1@vm1:~$ sudo iptables -t raw -A PREROUTING -p udp -m udp --dport 1024 -j TRACE user1@vm1:~$ sudo iptables -t raw -A OUTPUT -p udp -m udp --sport 1024 -j TRACE user1@vm1:~$ sudo iptables -nt raw -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 TRACE udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1024 Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 TRACE udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:1024 user1@vm1:~$ sudo tail -n0 -f /var/log/kern.log | cut -c52-300 & [1] 10249 user1@vm1:~$ nc -ulp 1024 & [2] 10251 user1@vm1:~$ echo 'Hello there!' | nc -u localhost 1024 Hello there! raw:PREROUTING:policy:2 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=41 TOS=0x00 PREC=0x00 TTL=64 ID=57898 DF PROTO=UDP SPT=50407 DPT=1024 LEN=21 mangle:PREROUTING:policy:1 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=41 TOS=0x00 PREC=0x00 TTL=64 ID=57898 DF PROTO=UDP SPT=50407 DPT=1024 LEN=21 mangle:INPUT:policy:1 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=41 TOS=0x00 PREC=0x00 TTL=64 ID=57898 DF PROTO=UDP SPT=50407 DPT=1024 LEN=21 filter:INPUT:rule:1 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=41 TOS=0x00 PREC=0x00 TTL=64 ID=57898 DF PROTO=UDP SPT=50407 DPT=1024 LEN=21 ^C [2]+ Stopped nc -ulp 1024 user1@vm1:~$ fg nc -ulp 1024 ^C user1@vm1:~$ fg sudo tail -n0 -f /var/log/kern.log | cut -c52-300 ^C user1@vm1:~$ ``` ## 解釋 1. 列出所有表中的所有`iptables`規則。你看不到任何東西。 1. 允許`lo`([環回](http://en.wikipedia.org/wiki/Localhost))接口上的所有傳入流量。 1. 允許 TCP 端口 22 上的所有傳入流量,這是`ssh`。 1. 將默認`INPUT`策略更改為`DROP`,禁止所有傳入連接,除了 TCP 端口 22。如果在此丟失`vm1`的連接,則表示你做錯了,在 VirtualBox 中重新啟動并重試。 1. 列出當前的過濾器規則。注意:你可以按號碼刪除規則,如下所示:`sudo iptables -t filter -D INPUT 2`。請注意策略與規則完全不一樣。 1. 嘗試`ping`你的默認網關,失敗了。為什么是這樣,即使允許傳出連接(`Chain OUTPUT (policy ACCEPT)`)?傳出的數據包被發送到網關,但是網關的回復不能進入。 1. 添加一條規則,告訴`iptables`允許屬于已建立連接的所有數據包,例如來自`vm1`的所有連接。 1. 列出當前的過濾器規則。你可以看到我們的新規則。 1. `ping` `vm1`的默認網關,這次成功了。 1. 加載 Linux 內核模塊,它允許使用包過濾日志功能。 1. 添加規則,來記錄所有發往`vm1`任何接口的 UDP 端口 1024 的傳入數據包。 1. 添加規則,來記錄所有來自`vm1`任何接口的 UDP 端口 1024 的傳出數據包。 1. 列出`raw`表規則。 1. 在后臺啟動`tail`,將打印寫入`/var/log/kern.log`的所有新行。`cut`會在開頭刪除不必要的日志條目前綴。請注意后臺進程如何寫入終端。 1. 以服務器模式啟動`nc`,在`vm1`的所有接口上監聽 UDP 端口 1024 。 1. 以客戶端模式啟動`nc`,將字符串`Hello there!`發送到我們的服務器模式`nc`。`tail`打印出`kern.log`中的所有新行,你可以看到在 Linux 內核封包過濾器中,我們的單個 UDP 數據包從一個表到了另一個表。沒有回復,所以只有一個數據包被發送和處理。 1. 殺死客戶端模式`nc`。 1. 將服務器模式`nc`帶到前臺。 1. 殺死服務器模式`nc`。 1. 將`sudo tail -n0 -f /var/log/kern.log | cut -c52-300 &`帶到前臺。 1. 殺死它。 ## 附加題 這個練習本身已經很大了。只需要打印出日志,并使用鉛筆瀏覽它,直到理解了每一行的每個字段都發生了什么。如果你卡住了,去問別人:<http://nixsrv.com/llthw/ex26/log>。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看