Linux防火牆與NAT架設 2013/02/03
iptables架構 iptables是網路封包的過濾器,內部預設由三個鏈(chain)來 定義與控制經過的封包規則。分別為: filter: 主要用於本機的封包過濾規則。 nat: 用於來源與目的IP與port轉換,可 用來架設NAT環境。 mangle: 用來變換通過的封包標頭, 通常搭配nat一起使用。
iptables封包處理流程 – 1/2 iptables內部的三個chain對於封包的處理總共會有五個檢 查點: 檢查點 封包狀態 FORWARD 僅經過本機的封包(由一個介面卡進來,再從另一個出去的封包)。 INPUT 遞給本機行程(process)的封包。 OUTPUT 由本機行程送出的封包。 POSTROUTING 即將從網路介面離開的封包。 PREROUTING 剛從網路介面收進的封包。
iptables封包處理流程 – 2/2 封包處理流程圖 PREROUTING INPUT Process FORWARD OUTPUT mangle nat INPUT mangle filter eth* Process FORWARD mangle filter OUTPUT mangle nat filter POSTROUTING mangle nat eth# Process
iptables基本指令 – 1/2 觀察iptables規則 清除iptables規則 將流量統計歸零 各規則的流量統計 ~# iptables -L -n ~# iptables -L -n -v -x ~# iptables -X -F ~# iptables -Z
iptables基本指令 – 2/2 設定filter的預設Policy為ACCPET或DROP 設定收到封包的policy ~# iptables -P INPUT [DROP|ACCEPT] ~# iptables -P INPUT [DROP|ACCEPT] ~# iptables -P INPUT [DROP|ACCEPT]
進階封包規則實例 – 1/2 增補(Append)一條規則,允許介面卡lo收到任何 封包(參數:-A, -D, -i, -j) -s 來源IP, -d 目的IP, --sport 來源port, --dport 目的port ~# iptables -A INPUT -i lo –j ACCEPT // -A [檢查點] –i [介面卡] -j [封包規則] ~# iptables -A INPUT -i lo -p tcp -s 192.168.1.0/24 --dport 80 –j ACCEPT // -p [網路協定] -s 來源IP --dport目的port。 // 接受開頭為192.168.1的IP,想要連到port 80的TCP封包。
進階封包規則實例 – 2/2 以MAC address作為過濾規則(-m mac) 以連線狀態作為過濾規則(-m state) ~# iptables -A INPUT -m mac --mac-source aa:bb:cc:99:88:77 -j DROP // 禁止特定網路卡卡號送來的封包 ~# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT // 允許本雞主動建立連線(ESTABLISHED) 的封包。
小練習01 – 簡易防火牆 (1) 試著設定一個防火牆規則,阻擋所有的 INPUT封包。 (2) 允許port 80, port 22的INPUT封包。 (3) 允許icmp協定的封包。(提示:-p參數)
NAT簡介 – 1/3 (網路位址轉換,NAT,Network Address Translation) 一種IP封包通過路由器或防火牆時,重寫來源IP或目的 IP的技術,普遍用於將多台客戶端電腦使用同一個IP位 址上網的區域網路環境。 實際例子:IP分享器(虛擬IP:192.168.x.x)。
NAT簡介 – 2/3 NAT運作原理 NAT伺服器在內部會維護一個表格(NAT table),紀錄內網與外網 連線的通訊埠之對應關係。例如: 內網IP NAT Port 外網IP 192.168.1.1 : 5566 5566 140.112.72.172 : 23 192.168.1.2 : 7788 7788 74.125.134.90 : 22 … 192.168.1.3 : 80 8080 * : * 192.168.1.4 : 3306 9900
NAT簡介 – 3/3 NAT伺服器依照其功能可分為: 來源網路位址轉換(Source NAT) 用來使位於NAT後方區域網路中的電腦可透過修改封包中的 來源位址連上Internet中的其他伺服器。 目的網路位址轉換(Destination NAT) 用來使Internet中的其他伺服器,能夠透過NAT伺服器修改封 包中的目的位址,連到NAT伺服器後方區域網路中的電腦。
NAT實例圖 (1) 內網伺服器 (2) 內網PC透過NAT上網 (3) 本機通訊埠轉換 192.168.1.3:80 eth1 eth0 192.168.1.3:80 90.90.90.90:8080 eth1 eth0 192.168.1.3:xx 192.168.1.0:yy 90.90.90.90:zz 90.90.90.90:8080 90.90.90.90:80
1. 本機通訊埠轉換範例 將送入本機行程之前的封包,導引(REDIRECT)到 另一個通訊埠 重點: A. 需指定使用nat鏈 (投影片第五頁) B. 檢查點為封包進入前的PREROUTING C. 使用子參數--to-ports [port#] 置於-j REDIRECT之後 ~# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-pors 80 // 將連入本機port 8080的封包導引至 port 80
2. 架設NAT Server (1) 開啟封包轉送功能 (2) SNAT – 讓內部電腦可上網 (3) DNAT – 讓外部電腦可連到內部的網頁伺服器 echo "1" > /proc/sys/net/ipv4/ip_forward ~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ~# iptables -t nat -A PREROUTING -i eth0 –p tcp --dport 8080 -j DNAT --to 192.168.56.102:80
儲存/載入已設定的iptables規則 使用I/O重導向,儲存已設定的iptables參數。 要讓iptables在下次開機時自動設定,可以將 iptables.rule放在/etc資料夾,然後在開機時使用 /etc/rc.local載入來呼叫。 ~# iptables-save > /etc/iptables.rule Notes: iptables-save 中有很多註解,可再進一步修改。