1. 程式人生 > >linux 防火牆詳解

linux 防火牆詳解

一、linux防火牆基礎

1.防火牆概念
在電腦科學領域中,防火牆(Firewall)是一個架設在網際網路與企業內網之間的資訊安全系統,根據企業預定的策略來監控往來的傳輸。
防火牆可能是一臺專屬的網路裝置或是運行於主機上來檢查各個網路介面上的網路傳輸。它是目前最重要的一種網路防護裝置,從專業角度來說,防火牆是位於兩個(或多個)網路間,實行網路間訪問或控制的一組元件集合之硬體或軟體
2.功能:防火牆最基本的功能就是隔離網路,通過將網路劃分成不同的區域(通常情況下稱為ZONE),制定出不同區域之間的訪問控制策略來控制不同信任程度區域間傳送的資料流
3.IPTABLES實現方式
Linux系統的防火牆功能是由核心實現的,包過濾防火牆工作在TCP/IP的網路層
在這裡插入圖片描述


iptables有四表五鏈,表決定了資料報文處理的方式,鏈決定了資料報文流經的位置

規則表
filter表:包含三個鏈INPUT,OUTPUT,FORWARLD,(作用:確定是否放行該資料包)(過濾)
nat表:PREROUTING,POSTROUTING,OUTPUT (作用:修改資料包中的源、目標IP地址或埠)
mangle表:INPUT,OUTPUT,FORWARLD,PREROUTING,POSTROUTING,(作用:為資料包設定標記)
raw表:OUTPUT,PREROUTING(作用:確定是否對該資料包進行狀態跟蹤)
規則鏈:
input: 當收到訪問防火牆本機的資料包時(入站),應用此鏈中的規則。
output: 當防火牆向外傳送資料包時(出站),應用此鏈中的規則。
forward: 收到需要通過防火牆傳送給其他地址的資料包時,應用此鏈中的規則
prerouting:在進行路由選擇前處理資料包(判斷目標主機)應用此鏈
postrouting:在進行路由選擇後處理資料包(判斷經由哪一介面送往下一跳)應用此鏈
4.資料包匹配的流程:

分析資料報文進入本機後應用了哪些表規則以及鏈規則
如filter表的規則,filter表決定是否放行資料包通過,那如果通過,則必須經由INPUT鏈流入資料包,INPUT鏈是處理入站資料的,如果沒問題,繼續放行到使用者空間,再經由OUTPUT鏈將資料包流出
如nat表的規則,nat表主要實現轉發功能,資料包先經由PREROUTING鏈進行路由選擇,選擇好路線後再經由FORWARD鏈轉發資料,然後再進行一個路由選擇,最後由POSTROUTING鏈流出資料
在這裡插入圖片描述
規則表之間的優先順序
raw、mangle、nat、filter
規則鏈之間的優先順序
入站資料流向:來自外界的資料包到達防火牆,首先被PREROUTING規則鏈處理(是否被修改地址),之後會進行路由選擇(判斷該資料包應該發往何處),如果資料包的目的地址是防火牆本機,那麼核心將其傳遞給INPUT鏈處理,通過以後再交給上次的應用程式進行響應。
轉發資料流向

:來自外界的資料包到達防火牆後,首先被PREROUTING規則鏈處理,之後進行路由選擇,如果資料包的目標地址是其他外部地址,則核心將其傳遞給FORWALD鏈進行處理,然後再交給POSTROUTING規則鏈(是否修改資料包的地址等)進行處理。
出站資料流向:防火牆本身向外部地址傳送資料包,首先被OUTPUT規則鏈處理,之後進行路由選擇,然後交給POSTROUTING規則鏈(是否修改資料包的地址等)進行處理
規則鏈內部各防火牆規則之間的優先順序
依次按第1條規則、第2條規則、第3條規則、·····的順序進行處理,找到一條能夠匹配的資料包規則,則不再繼續檢查後面的規則(使用LOG記錄日誌的規則例外)如果找不到規則,就按照規則鏈的預設策略進行處理。

二、管理和設定iptables規則

1.語法格式
iptables [ -t 表名] 命令選項 [ 鏈名] [ 條件匹配] [ -j 目標動作或者跳轉]
2.iptables 命令
在這裡插入圖片描述
3.新增及輸入規則
#iptables -t filter -A INPUT -p tcp -j ACCEPT
在filter表的INPUT鏈的末尾新增一條防火牆規則

iptables -l INPUT -p udp -j ACCEPT
在filter 表的INPUT鏈中插入一條防火牆規則

iptables -l INPUT 2 -p icmp -j ACCEPT
在filter 表的INPUT鏈中插入一條防火牆規則,作為鏈中的第二條規則
4.檢視規則表
iptables -L INPUT --line-numbers
檢視filter 表INPUT鏈中所有規則,同時顯示各條規則的順序號

iptables -nvL
-L 選項放在最後,否則會將vn當成鏈名。檢視filter表各鏈中所有規則的詳細資訊,同時以數字形式顯示地址和埠號
5.刪除、清空規則
iptables-D INPUT 2
刪除filter 表INPUT 鏈中的第二條規則

iptables -F
不指定表名時,預設情況filter表

iptables -t nat -F
清空nat 表中各鏈的所有規則

6.設定規則鏈的預設策略
iptables -t filter -P FORWARD DROP
將filter 表中FORWARD 規則的預設策略設為DROP

iptables -p OUTPUT ACCEPT
將filter 表中OUTPUT規則的預設策略設為ACCEPT

獲得iptables 相關選項的幫助資訊
iptables -p icmp -h
檢視iptables 命令中關於icmp協議的幫助資訊
7. 條件匹配
流入、流出介面(-i 、-o)
來源、目的地址(-s 、-d)
協議型別(-p)
源埠、目的埠(–sport 、–dport)

埠匹配
-p udp --dport 53
匹配網路中目的埠是53的udp協議資料包
地址匹配
拒絕轉發來自192.168.1.11主機資料,允許轉發來自192.168.0.0/24網段的資料
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

埠和地址聯合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配來自192.168.0.1,去往www.abc.com的80埠的tcp協議資料包

8.動作匹配
ACCEPT DROP SNAT DNAT MASQUERADE
-j ACCEPT 通過,允許資料包通過本鏈而不攔截它
iptables -A INPUT -j ACCEPT
允許所有訪問本機IP的資料包通過
-j 丟棄、阻止資料包通過本鏈而丟棄它
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止來源地址為192.168.80.39的資料包通過本機
-j SNAT --to IP[:埠-埠] 源地址轉換,SNAT支援轉換為單IP,也支援轉換到IP地址池
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
將內網192.168.0.0/24的源地址修改為1.1.1.1

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
同上、修改成一個地址池裡的IP
-j DNAT --to IP [-IP][:埠-埠] 目的地址轉換,DNAT支援轉換為單IP,也支援轉換到IP地址池
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
把從ppp0 進來的要訪問的tcp/80的資料包目的地址改為192.168.0.1

9.顯示匹配的使用選項及功能:
顯式匹配的選項特別多,man iptables-extensions檢視具體用法
multiport(多埠)
–sport
–dports
iprange(ip範圍)
time(時間範圍)
string(字串) #對報文中的應用層資料做字串模式匹配檢測(通過演算法實現)
connlimit(連線限制)
limit(速率限制)
state(狀態) #追蹤本機上的請求和響應之間的資料報文的狀態。狀態有五種
–state state NEW:新連線請求
–state state ESTABLISHED:已建立的連線
–state state INVALID:無法識別的連線
–state state RELATED:相關聯的連線,當前連線是一個新請求,但附屬於某個已存在的連線
–state state UNTRACKED:未追蹤的連線
提示:
對於進入的狀態為ESTABLISHED都應該放行
對於出去的狀態為ESTABLISHED都應該放行
嚴格檢查進入的狀態為NEW的連線
所有狀態為INVALIED都應該拒絕