1. 程式人生 > >Linux iptables防火墻原理與常用配置

Linux iptables防火墻原理與常用配置

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防火墻原理與常用配置