歡迎您光臨本站 註冊首頁

iptables 詳細的使用指南

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

Linux系統中,防火牆(Firewall),網址轉換(NAT),數據包(package)記錄,流量統計,這些功能是由Netfilter子系統所提供的,而iptables是控制Netfilter的工具。iptables將許多複雜的規則組織成成容易控制的方式,以便管理員可以進行分組測試,或關閉、啟動某組規則。

iptable能夠為Unix、Linux和BSD個人工作站創建一個防火牆,也可以為一個子網創建防火牆以保護其它的系統平台。iptable只讀取數據包頭,不會給信息流增加負擔,也無需進行驗證。

1. 術語解釋

DNATDestination Network Address Translation 目標網路地址轉換。 DNAT是一種改變數據包目的ip地址的技術,經常和SNAT聯用,以使多台伺服器能共享一個ip地址連入Internet,並且繼續服務。通過對同一個 ip地址分配不同的埠,來決定數據的流向。SNATSource Network Address Translation源網路地址轉換。這是一種改變數據包源ip地址的技術, 經常用來使多台計算機分享一個Internet地址。這隻在IPv4中使用,因為IPv4的地址已快用完了,IPv6將解 決這個問題。

2. iptable 概述

2.1. iptable的鏈和表結構

如上圖可以看出,iptable總體結構.

2.2. 5個鏈(chain)

PREROUTING在數據包進入防火牆之後、路由判斷之前對數據包進行修改INPUT在數據包被路由到本地之後,但在用戶空間程序看到它之前對數據包進行修改OUTPUT用戶空間程序處理數據包后,由本地發出,再次被路由之前更改數據包FORWARD在最初的路由判斷之後、最後一次更改包的源地址之前對數據包進行修改POSTROUTING在所有路由判斷之後,對數據包進行修改

注意: 鏈 是每個數據包流需要經過的不同環節,你可以在不同的環節根據需要設置不同的過濾策略,每個鏈的默認策略都是Accept

2.3. 4個表(table)

Mangle表這個表主要用來mangle包,你可以使用mangle匹配來改變包的一些屬性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(後續流量控制TC等)Nat表此表僅用於NAT,也就是轉換包的源或目標地址。注意,就象我們前面說過的,只有流的第一個 包會被這個鏈匹配,其後的包會自動被做相同的處理(DNAT,SNAT,MASQUERADE)Filter表此表用來過濾數據包,我們可以在任何時候匹配包並過濾它們。 我們就是在這裡根據包的內容對包做DROP或ACCEPT的.

iptalbe中,要用 -t 參數指定要操作哪個表,如果沒有 -t 參數,就默認對filter表操作.Raw表優先順序最高,設置raw時一般是為了不再讓iptables做數據包的鏈接跟蹤處理,提高性能

注意: 表 是規則的集合組,每個表中的規則條目是按順序匹配的,你可以在數據包經過的不同環節設置規則,表的處理優先順序:raw > mangle > nat > filter

2.4. 詳細的數據包流程

從上圖可以看出,數據包流環節和表的配合使用方法

3. iptable應用場景

上圖是應用場景的簡單拓撲描述,下面的應用場景舉例,都以上圖為參考.

系統啟動的時候所有的默認策略都是ACCEPT,在下面的場景舉例中,我們都是在這種前提下設定iptable的。下面每個場景舉例都是獨立的,沒有相關聯性的。

3.1. 網關伺服器安全策略

目標 : 網關伺服器系統自生安全策略,只對內網用戶開放22埠(sshd服務)

#清空 filter table  [root@localhost]# iptables -F -t filter  [root@localhost]# iptables -X -t filter  [root@localhost]# iptables -Z -t filter      #清空 nat table  [root@localhost]# iptables -F -t nat  [root@localhost]# iptables -X -t nat  [root@localhost]# iptables -Z -t nat      #設置默認策略(INPUT鏈默認為DROP)  [root@localhost]# iptables -t filter -P INPUT DROP  [root@localhost]# iptables -t filter -P OUTPUT ACCEPT  [root@localhost]# iptables -t filter -P FORWARD ACCEPT      #迴環介面(lo),默認accept  [root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT      #只對內網用戶開放sshd服務  [root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

說明: 防火牆的策略順序一般都是 從 非信任 ==> 信任,默認關閉所有訪問許可權,然後按照需要逐條開放訪問許可權.

3.2. 共享上網(nat)

目標:使區域網的用戶都可以訪問外網的伺服器

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward  [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 

說明: SNAT 和 MASQUERADE 區別

SNAT : 不管是幾個地址,必須明確的指定要SNAT的ip,適合網關伺服器有固定地址或者是固定地址範圍. MASQUERADE : 是針對ADSL動態撥號這種場景而設計,從伺服器的網路介面上,自動獲取當前ip地址來做NAT,這樣就實現了動態SNAT地址轉換

3.3. 內網的伺服器對外服務(埠映射)

目標:使外網用戶可以訪問到區域網192.168.138.21這台HTTP服務

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward  [root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21  [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

3.4. 在網關伺服器進行透明代理

目標: 使區域網用戶,訪問外網web服務時,自動使用squid作web透明代理伺服器。

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward  [root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.138.1  [root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128   [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE    

via http://www.linuxde.net/2013/06/14620.html 



[火星人 ] iptables 詳細的使用指南已經有780次圍觀

http://coctec.com/docs/net/show-post-68152.html