NetFilter IPTables
Introduction 當封包抵達 Linux 防火牆的時候,依照它的目的地可以進入 Linux 主機由應用程式接收,或者是經由另外的介面轉送出去。 Netfilter 就是在封包進入以及轉出主機中的路徑上,加上一些掛載點(Hook)並使用封包所屬的table來決定如何處置封包。 掛載點(Hook)、表格(Table)
在netfilter中,定義了五個掛載點(Hook)分別是Pre-Routing、Local-in、Local-out、Forward和Post-Routing
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
當封包經過這些掛載點,就可以依照事先規定的動作來處理封包,如Accept、Drop、Queue、Return、Log、Mark、Reject、 Masquerade、Redirect等動作。
當封包由介面可接收後會先進入Pre-Routing Hook,再由Routing判斷封包是要進入本機或是要送到另依個網路中 如果是送到本機上則會進入Local-In來檢查封包 如果是要送到另依個網路則送到Forward 檢查 如果封包由本機送出則會先進入Local-out 檢查,最後如果封包要送到媒體上則會進入Post-Routing中檢查
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
Netfilter還定義了三種表格 filter、NAT、Mangle,讓使用者能夠在不同的表格中取得他所需要的功能
filter table filter table中所包含的掛載點一共有三個分別是Local-in、Forward以及Local-out DROP、REJECT、ACCEPT以及LOG
Filter LOG紀錄該封包資訊 REJECT退回該封包 ACCEPT讓封包通過 DROP丟棄封包
NAT table 在NAT table中包含三個掛載點Pre-Routing、Local-Out和Post-Routing,提供了操作NAT時所需要的全部功能。 轉譯封包位址資訊
Nat SNAT轉譯來源位址 DNAT轉譯目的位址 MASQUERADE轉譯來源位址成為 NIC 的位址 REDIRECT轉送至本機某個 Port
mangle table mangle table中所包含的掛載點Pre-Routing、Local-out,他是用來在封包標頭中增加一些資料來幫助linux kernel network sub-system來分類封包 他的動作包括TTL、TOS以及增加MARK標示封包。
Mangle TTL修改 Time To Live 資訊 MARK標記該封包 TOS設定 Type Of Service 資訊
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
如果當我分別在Pre-Routing、Post-Routing和filter上分別增加: iptables –A INPUT –p icmp –j LOG iptables –A OUTPUT –p icmp –j LOG iptables –A FORWARD –p icmp –j LOG
Pre-Routing Forward Post-Routing Routing Routing Local-in Local-out Linux Protocol Stack
心得 參數 PORT Protocol IP
iptables 指令 -N建立新的chain -X移除空的chain -P變更chain的標準規則 -L列示在chain中的規則 -F將一個chain中的規則排除掉 -Z將封包和位元組計數器歸零
-A加入一個新的規則 -I插入一個新的規則 -R置換一個規則 -D刪除一個規則 參數值前面加”!”代表”Not” -p ! TCP
清空現有的rules 刪除自訂chains 設定預設policy iptables –F iptables –X iptables –P INPUT DROP iptables –P FORWARD DROP iptables –P OUTPUT DROP
Example 允許192.168.2.0/24能夠telnet 到140.134.4.20 #iptables –A FORWARD –s 192.168.2.0/24 –d 140.134.4.20 –p tcp --dport 23 –j ACCEPT #iptables –A FORWARD –s 140.134.4.20 –d 192.168.2.0/24 –p tcp --sport 23 –j ACCEPT
192.168.2.200上逢甲BBS轉到210.64.125.5 #iptables –t nat –A PREROUTING –s 192.168.2.200 –d 140.134.4.5 –p tcp --dport 23 –j DNAT --to-destination 210.64.125.5
指令順序的問題
netfilter處理判斷順序 Tables Chains Rules Policy