Linux iptables防火墻原理與常用配置
Linux系統中,防火墻(Firewall),網址轉換(NAT),數據包(package)記錄,流量統計,這些功能是由Netfilter子系統所提供的,而iptables是控制Netfilter的工具。iptables將許多復雜的規則組織成成容易控制的方式,以便管理員可以進行分組測試,或關閉、啟動某組規則。iptable只讀取數據包頭,不會給信息流增加負擔,也無需進行驗證。
iptables結構
iptables由4表、5鏈和用戶在鏈內寫入的各種規則所組成。
1、表:容納各種規則鏈;
表是按照功能分的類,具體功能如下:
(1)raw表:用來決定是否對數據包進行狀態跟蹤。(不常用)
(2)mangle表:為數據包設置標記,有ACK、SYN、FIN、RST、PSH、URG等標記。(不常用)
(3)nat表:修改數據包的IP地址、端口等信息。(網關型防火墻常用)
(4)filter表:確定是否放行數據包。(常用)
2、鏈:容納各種防火墻規則;
鏈是按照時機分的類。
(1)input:處理入站請求包
(2)output:處理出站包(就是響應、應答包)
(3)forward:處理轉發數據包,實現不同網段間的通信
(4)prerouting:在包做路由選擇之前應用此鏈的規則
(5)postrouting:在數據包做路由選擇之後應用此鏈的規則
表的處理優先級:raw > mangle > nat > filter
詳細的數據包流程:
iptable應用場景
上圖是應用場景的簡單拓撲描述,下面的應用場景舉例,都以上圖為參考.
系統啟動的時候所有的默認策略都是ACCEPT,在下面的場景舉例中,我們都是在這種前提下設定iptable的。下面每個場景舉例都是獨立的,沒有相關聯性的。
網關服務器安全策略
目標 : 網關服務器系統自生安全策略,只對內網用戶開放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
說明: 防火墻的策略順序一般都是 從 非信任 ==> 信任,默認關閉所有訪問權限,然後按照需要逐條開放訪問權限.
共享上網(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地址轉換
內網的服務器對外服務(端口映射)
目標:使外網用戶可以訪問到局域網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
在網關服務器進行透明代理
目標: 使局域網用戶,訪問外網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
註意:iptables寫入的規則重啟會自動失效,需要使用/etc/rc.d/init.d/iptables save 保存到文件,重啟才會自動讀取文件上的配置,且使用iptables save保存之後,重啟iptables服務:service iptables restart
iptables命令詳解 iptables(選項)(參數) -t<表>:指定要操縱的表; -A:向規則鏈中添加條目; -D:從規則鏈中刪除條目; -i:向規則鏈中插入條目; -R:替換規則鏈中的條目; -L:顯示規則鏈中已有的條目; -F:清楚規則鏈中已有的條目; -Z:清空規則鏈中的數據包計算器和字節計數器; -N:創建新的用戶自定義規則鏈; -X:用於刪除用戶自定義的空鏈,使用方法跟-N相同,但是在刪除之前必須要將裏面的鏈給清空; -P:定義規則鏈中的默認目標; -h:顯示幫助信息; -p:指定要匹配的數據包協議類型; -s:指定要匹配的數據包源ip地址; -j<目標>:指定要跳轉的目標; -i<網絡接口>:指定數據包進入本機的網絡接口; -o<網絡接口>:指定數據包要離開本機所使用的網絡接口。
iptables命令選項輸入順序:
iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作
表名包括:
raw:高級功能,如:網址過濾。
mangle:數據包修改(QOS),用於實現服務質量。
nat:地址轉換,用於網關路由器。
filter:包過濾,用於防火墻規則。
規則鏈名包括:
INPUT鏈:處理輸入數據包。
OUTPUT鏈:處理輸出數據包。
PORWARD鏈:處理轉發數據包。
PREROUTING鏈:用於目標地址轉換(DNAT)。
POSTOUTING鏈:用於源地址轉換(SNAT)。
動作包括:
ACCEPT:接收數據包。
DROP:丟棄數據包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址轉換。
DNAT:目標地址轉換。
MASQUERADE:IP偽裝(NAT),用於ADSL。
LOG:日誌記錄。
本文出自 “夜色” 博客,請務必保留此出處http://liuqun.blog.51cto.com/3544993/1982094
Linux iptables防火墻原理與常用配置