--- tags: 1092, lsa --- # Week 04(2021/03/18) - Book mode https://hackmd.io/@ncnu-opensource/book [ubuntu server](http://ftp.ubuntu-tw.org/ubuntu-releases/18.04.5/ubuntu-18.04.5-live-server-amd64.iso) [VM VirtualBox](https://www.virtualbox.org/) ## iptable - netfilter - Linux 使用這個系統(內建的喔~) - 封包過濾機制 - 分析表頭 - chain - input - output - forward : 傳送網卡傳送的封包 - prerouting - postrouting : 網卡出去會改變封包的狀態 - 封包狀態 - new : 新的封包 - ESTABLISHED - RELATED - INVALID : 非法的封包 - UNKOWN : 不知道甚麼鬼的封包 - POLICY & TARGET - ACCEPT - DROP : 偵測到攻擊的,會直接丟掉(避免對方知道你在線上) - REJECT : 主動斷線的人會送封包告知對方 ex : tcp-recet - SNAT - DNAT - MASQERADE - REDIRECT - RETURN - QUEUE - LOG : 紀錄封包的狀態 - Fail2ban - 檢查 ssh 相關的登錄紀錄 - 可以防治一定程度的 暴力試密碼攻擊 - 把拒絕用戶加在 /etc/hosts.deny - 封包會進來,但在 application 層把他踢掉 - portsentry - 監聽常用的 port --- (流程圖)  - IPTABLE中,其中的規則是這樣設定的: - n張table,每張table裡有m個chain,每個chain裡面有一系列的rule  - 以上是iptables內建的table和chain - 每張table有各自負責的工作,不要把規則寫到任意table - filter: 負責過濾進入主機或離開主機、還有經過主機做forward的封包 - nat: 修改封包或來源目的位置,不能做過濾 - mangle: 針對封包其他欄位進行修改 e.g. ttl, tos… - 很少用 - raw - security - 可以在任意table內的任意chain之下添加任意rule,也可以添加自定義的chain,再在裡面添加rule - chain - filter: - input: 進入Linux主機的封包 - forwaord: 可以轉傳封包,和nat table關聯性高 - output: 從Linux主機出去的封包 - nat - output: 離開主機的封包的傳送過程 - prerouting: 進行路由判斷前要進行的規則 - postrouting: 進行路由判斷後要進行的規則 - rule包括(ACCEPT,DROP,REJECT,RETURN) - DROP - 直接丟棄,沒有respose - 不斷發送SYN,直到(TCP session)超時 - REJECT - 返回拒絕response,明確拒絕 - 連結馬上段開 - return - 如果是從A chain跳到B chain - 回到A chain,從跳出去的規則之後繼續往下 - 如果到默置chain或是目前在內建(built-in)chain之下 - 以默認Policy執行 ::: info - 面向公司內部最好使用REJECT,因為當該防火牆去阻擋特定port時(TCP port 113),使用DROP會導致所有同類連接都失敗,並且因為超時,所以無法得知是防火牆還是網路設備故障 - 外部使用DROP,更粗暴安全(TCP connect掃描時間更長 - 一定程度延緩hacker攻擊? ::: ---  - A - 判斷並確定目的是發向主機的封包的話,就會透過filter input進行過濾並進入 - B - 透過防火牆去後端 - 修改來源和目標IP - C - 從主機發出去的封包,經由filter output過濾並傳出 --- NAT === ## NAT ( Network Address Translation ) - 功能 - 在計算機網路中是一種在 IP 封包通過路由器或防火牆時重寫來源IP地址或目的IP位址的技術 - 運作型態 - 要連上網路需要有 Public IP,Privare IP 無法直接與 Internet 進行資料溝通 - 一般企業將它作為合法 IP 位址和私有位址之間的轉譯功能,因為目前 IP 位址逐漸不足,對外網路位址不能分配太多,於是就可以利用 NAT 來建構私有網路網路空間 1. **靜態 NAT ( Static NAT )**  - 內部與外部為一對一轉換,因此是靜態的 - 完全無法減少 public IP 的使用 - 主要應用於隱藏內部 IP 位址,但又需要提供資源給外部主機使用 2. **動態 NAT ( Dynamic NAT )**  - 內部與外部是多對多 - 外部是做非固定的動態隨機對應 - 減低外部攻擊者探測內部位址的機率 - 在運作當中是一對一 - 將若干個 public IP 做成一個群組( pool ),並宣告某個網段內的主機可以藉由 pool 索取 IP - 內部私有地址以及外部合法位址的數量要相同 - 如果不同的話,就如附圖所示,10個 public IP 被250個內部主機輪流使用 3. **埠口位址轉換 NAT ( Port Address Translation NAT, PAT NAT )**  - 利用 port address 轉換型的 NAT - 一般最常用的 - 一個 public IP 給多個 private IP 共用 - IP 位址+ port number - 優點 - 節省 public IP 的註冊 - 網路位址重疊時有解決方案 - 提供安全保護,不讓真實 IP 暴露在網路上 - 只需要一個 public IP 便可以讓多台主機同時上網 - 缺點 - 無法進行端到端 IP 追蹤 - 通信效率低 - 有些應用程式或協議需要將未經修改的封包傳到目的地, NAT 會更改端到端的地址,因此而阻止這些應用程式。 - EX:數位簽章,其完整性需要確保訊息在傳輸過程中沒被竄改,因此它會因為來源地址被修改而失敗 - 需要外部網路發起的 TCP 連接的服務或無狀態協議可能被中斷 - 通過 NAT 接入網路不只複雜還降低網路效能,通過 IPv6 已漸漸可以改變這些弊端,但 NAT 似乎會成為網路發展的絆腳石(? :::info 狀態協議: - 協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。即我們給伺服器發送 HTTP 請求之後,伺服器根據請求,會給我們發送數據過來,但是,發送完,不會記錄任何信息。 - 如果後續需要處理前面的訊息,便需要重傳,可以導致每次連接的數據量增大 - HTTP 協議就是其中一種 1. 每一次傳送都是點到為止,不造成不必要占用 2. 每次請求會傳輸大量重複訊息 3. 阻礙了需要動態交互的應用程式的實現 - 動態交互需要承先啟後,舉例來說像是最簡單的購物車,就需要去紀錄使用者之前裝入購物車的物品。 - 解決方法:Cookie、Session ::: ## SNAT&DNAT - SNAT - 在路由器後(POSTROUTING)將內網的 ip 地址修改為外網網卡的IP地址。 - 主機作為用戶端去訪問外網的伺服器  1. 用戶端發出的封包,來源是192.168.1.100,傳到 NAT 主機 2. NAT 的主機內部介面(192.168.1.2)接收到封包之後,發現封包的目的並非 Linux 主機,所以開始經過路由,將封包傳到可以連接 Internet 的Public IP 處 3. 由於 private IP 和 public IP 不互通,所以主機透過 NAT table 內的 POSTROUTING 將封包的來源偽裝成 Linux 的 public IP,並將兩個來源(192.168.1.100 及 public IP )寫入暫存記憶體,並將封包傳出 - DNAT - 在路由前(PREROUTING)將來自外網訪問的 public IP 及對應 port 的目的 IP 及 port 修改為內部伺服器的 IP 以及 port,實現發布內部伺服器。 - 讓內網作為伺服器為外網提供服務  - 假設主機內部開啟 www 功能,port 開在80,並且要讓 Internet 的主機連到我的內部伺服器 1. 外部主機要到我的 www 服務,需先連接到 NAT 伺服器上 2. NAT 主機已經設定要要分析 80 port 的封包,所以當它接收到封包後,會將目標 IP 從 public IP 改成 192.168.2.210 ,並將封包資訊紀錄 3. 經過路由後,來到 private 介面處,透過內部 LAN 傳到 192.168.1.210 4. 192.186.1.210 會回應資料給 61.xx.xx.xx 5. 經過路由判斷後,來到 NAT Postrouting 的鏈,然後透過剛剛第二步驟的記錄,將來源 IP 由 192.168.1.210 改為 public IP 後,就可以傳送出去了。 ARP table === - 找出 MAC 地址傳送封包 - 當發現要傳的封包沒有在 PC 的 ARP table,就會發送 arp request 給 switch - L3 (OSI) 以上的 switch 才看得懂 ip ,L3 以下的都看不懂 - hub in layer1 - switch in layer2 - switch 會認 MAC address :::info <span class="bt"> BT 補充</span> - 大家都可以亂傳封包,所以 arp 不安全 - [spoofing](https://zh.wikipedia.org/wiki/ARP%E6%AC%BA%E9%A8%99) - [QUIC](https://zh.wikipedia.org/wiki/QUIC) - HTTP/3 的底層就是 QUIC - QUIC anycase (補充) ::: - Routing table - Routing 將一個區網的封包送往另一個區網 - 看的是封包的 destination ip :::info <span class="bt"> BT 補充</span> 當 vnet 0-1(192.168.56.103) 要經由 ---> switch 1 ---> **Router 0** ---> switch2 ---> vnet 1-1 (192.168.57.5) 誰會先要 MAC Address? A: Router 0,要把 switch 想像成是透明的,Router 會經由 arp request 去詢問 vnet0-1 的 MAC Address 再經由 Router 換成目的地的 MAC Address (switch 不會做 arp request) ::: - gateway - 一個區網的出入口 <style> .bt { background-color: gray; color: white; font-size: 20px; font-weight: bolder; border-radius: 50% 20% / 10% 40%; } </style>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up