iptables 詳細的使用指南

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的鏈和表結構

ip_flow.PNG

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

2.2. 5個鏈(chain)

iptable_chain.png

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. 詳細的數據包流程

packet_flow.png

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

3. iptable應用場景

iptable_example.gif

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

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

3.1. 網關服務器安全策略

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

·········10········20········30········40········50········60········
01.#清空 filter table
02.[root@localhost]# iptables -F -t filter
03.[root@localhost]# iptables -X -t filter
04.[root@localhost]# iptables -Z -t filter
05.    
06.#清空 nat table
07.[root@localhost]# iptables -F -t nat
08.[root@localhost]# iptables -X -t nat
09.[root@localhost]# iptables -Z -t nat
10.    
11.#設置默認策略(INPUT鏈默認爲DROP)
12.[root@localhost]# iptables -t filter -P INPUT DROP
13.[root@localhost]# iptables -t filter -P OUTPUT ACCEPT
14.[root@localhost]# iptables -t filter -P FORWARD ACCEPT
15.    
16.#迴環接口(lo),默認accept
17.[root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT
18.    
19.#只對內網用戶開放sshd服務
20.[root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

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

3.2. 共享上網(nat)

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

·········10········20········30········40········50········60········
1.[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
2.[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服務

·········10········20········30········40········50········60········
1.[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
2.[root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21
3.[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

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

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

·········10········20········30········40········50········60········
1.[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
2.[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
3.[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128 
4.[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 

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

 

http://linux.cn/article-1586-1-qqmail.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章