`

iptables原理与使用

阅读更多

转自鸟哥的私房菜。

原理分析与概念介绍

iptables 的表格 (table) 與鏈 (chain)

事實上,那個圖 9.3-1 所列出的規則僅是 iptables 眾多表格當中的一個鏈 (chain) 而已。 什麼是鏈呢?這得由 iptables 的名稱說起。為什麼稱為 ip"tables" 呢? 因為這個防火牆軟體裡面有多個表格 (table) ,每個表格都定義出自己的預設政策與規則, 且每個表格的用途都不相同 。我們可以使用底下這張圖來稍微瞭解一下:

iptables 的表格與相關鏈示意圖
圖 9.3-2、iptables 的表格與相關鏈示意圖

剛剛圖 9.3-1 的規則內容僅只是圖 9.3-2 內的某個 chain 而已 ! 而預設的情況下,咱們 Linux 的 iptables 至少就有三個表格,包括管理本機進出的 filter 、管理後端主機 (防火牆內部的其他電腦) 的 nat 、管理特殊旗標使用的 mangle (較少使用) 。更有甚者,我們還可以自訂額外的鏈呢! 真是很神奇吧!每個表格與其中鏈的用途分別是這樣的:

  • filter (過濾器) :主要跟進入 Linux 本機的封包有關,這個是預設的 table 喔!
    • INPUT :主要與想要進入我們 Linux 本機的封包有關;
    • OUTPUT :主要與我們 Linux 本機所要送出的封包有關;
    • FORWARD :這個咚咚與 Linux 本機比較沒有關係, 他可以『轉遞封包』到後端的電腦中,與下列 nat table 相關性較高。
  • nat (位址轉換) :是 Network Address Translation 的縮寫, 這個表格主要在進行來源與目的之 IP 或 port 的轉換,與 Linux 本機較無關,主要與 Linux 主機後的區域網路內電腦較有相關。
    • PREROUTING :在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
    • POSTROUTING :在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)
    • OUTPUT :與發送出去的封包有關
  • mangle (破壞者) :這個表格主要是與特殊的封包的路由旗標有關, 早期僅有 PREROUTING 及 OUTPUT 鏈,不過從 kernel 2.4.18 之後加入了 INPUT 及 FORWARD 鏈。 由於這個表格與特殊旗標相關性較高,所以像咱們這種單純的環境當中,較少使用 mangle 這個表格。

所以說,如果你的 Linux 是作為 www 服務,那麼要開放用戶端對你的 www 要求有回應,就得要處理 filter 的 INPUT 鏈; 而如果你的 Linux 是作為區域網路的路由器,那麼就得要分析 nat 的各個鏈以及 filter 的 FORWARD 鏈才行。也就是說, 其實各個表格的鏈結之間是有關係的!簡單的關係可以由下圖這麼看:

iptables 內建各表格與鏈的相關性
圖 9.3-3、iptables 內建各表格與鏈的相關性

上面的圖示很複雜喔!不過基本上你依舊可以看出來,我們的 iptables 可以控制三種封包的流向:

  • 封包進入 Linux 主機使用資源 (路徑 A) : 在路由判斷後確定是向 Linux 主機要求資料的封包,主要就會透過 filter 的 INPUT 鏈來進行控管;
  • 封包經由 Linux 主機的轉遞,沒有使用主機資源,而是向後端主機流動 (路徑 B) : 在路由判斷之前進行封包表頭的修訂作業後,發現到封包主要是要透過防火牆而去後端,此時封包就會透過路徑 B 來跑動。 也就是說,該封包的目標並非我們的 Linux 本機。主要經過的鏈是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。 這路徑 B 的封包流向使用情況,我們會在本章的 9.5 小節來跟大家作個簡單的介紹。
  • 封包由 Linux 本機發送出去 (路徑 C) : 例如回應用戶端的要求,或者是 Linux 本機主動送出的封包,都是透過路徑 C 來跑的。先是透過路由判斷, 決定了輸出的路徑後,再透過 filter 的 OUTPUT 鏈來傳送的!當然,最終還是會經過 nat 的 POSTROUTING 鏈。
Tips:
有沒有發現有兩個『路由判斷』呢?因為網路是雙向的,所以進與出要分開來看!因此,進入的封包需要路由判斷, 送出的封包當然也要進行路由判斷才能夠發送出去啊!瞭解乎?
鳥哥的圖示

由於 mangle 這個表格很少被使用,如果將圖 9.3-3 的 mangle 拿掉的話,那就容易看的多了:

iptables 內建各表格與鏈的相關性(簡圖)
圖 9.3-4、iptables 內建各表格與鏈的相關性(簡圖)

透過圖 9.3-4 你就可以更輕鬆的瞭解到,事實上與本機最有關的其實是 filter 這個表格內的 INPUT 與 OUTPUT 這兩條鏈,如果你的 iptables 只是用來保護 Linux 主機本身的話,那 nat 的規則根本就不需要理他,直接設定為開放即可。

不過,如果你的防火牆事實上是用來管制 LAN 內的其他主機的話,那麼你就必須要再針對 filter 的 FORWARD 這條鏈,還有 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 進行額外的規則訂定才行。 nat 表格的使用需要很清晰的路由概念才能夠設定的好,建議新手先不要碰!最多就是先玩一玩最陽春的 nat 功能『IP 分享器的功能』就好了! ^_^!這部份我們在本章的最後一小節會介紹的啦!

規則的觀察與清除

如果你在安裝的時候選擇沒有防火牆的話,那麼 iptables 在一開始的時候應該是沒有規則的,不過, 可能因為你在安裝的時候就有選擇系統自動幫你建立防火牆機制,那系統就會有預設的防火牆規則了! 無論如何,我們先來看看目前本機的防火牆規則是如何吧!

[root@www ~]# iptables [-t tables] [-L] [-nv]

選項與參數:
-t :後面接 table ,例如 nat 或 filter ,若省略此項目,則使用預設的 filter
-L :列出目前的 table 的規則
-n :不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!
-v :列出更多的資訊,包括通過該規則的封包總位元數、相關的網路介面等


範例:列出 filter table 三條鏈的規則

[root@www ~]# iptables -L -n

Chain INPUT (policy ACCEPT)    <==針對 INPUT 鏈,且預設政策為可接受

target               prot opt source     destination  <==說明欄

RH-Firewall-1-INPUT  all  --  0.0.0.0/0  0.0.0.0/0
    <==規則跳到 RH 鏈去檢查


Chain FORWARD (policy ACCEPT) <==針對 FORWARD 鏈,且預設政策為可接受

target               prot opt source     destination
RH-Firewall-1-INPUT  all  --  0.0.0.0/0  0.0.0.0/0


Chain OUTPUT (policy ACCEPT) <==針對 OUTPUT 鏈,且預設政策為可接受

target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)  <==自訂鏈的規則順序

target     prot opt source     destination
ACCEPT     all  --  0.0.0.0/0  0.0.0.0/0                  <==第 1 條規則

ACCEPT     icmp --  0.0.0.0/0  0.0.0.0/0    icmp type 255 <==第 2 條規則

ACCEPT     esp  --  0.0.0.0/0  0.0.0.0/0                  <==第 3 條規則

ACCEPT     ah   --  0.0.0.0/0  0.0.0.0/0                  <==底下類推共 9 條規則

ACCEPT     udp  --  0.0.0.0/0  224.0.0.251  udp dpt:5353
ACCEPT     udp  --  0.0.0.0/0  0.0.0.0/0    udp dpt:631
ACCEPT     tcp  --  0.0.0.0/0  0.0.0.0/0    tcp dpt:631
ACCEPT     all  --  0.0.0.0/0  0.0.0.0/0    state RELATED,ESTABLISHED
REJECT     all  --  0.0.0.0/0  0.0.0.0/0    reject-with icmp-host-prohibited


範例:列出 nat table 三條鏈的規則

[root@www ~]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

在上表中,每一個 Chain 就是前面提到的每個鏈囉~ Chain 那一行裡面括號的 policy 就是預設的政策, 那底下的 target, prot 代表什麼呢?

  • target:代表進行的動作, ACCEPT 是放行,而 REJECT 則是拒絕,此外,尚有 DROP (丟棄) 的項目!
  • prot:代表使用的封包協定,主要有 tcp, udp 及 icmp 三種封包格式;
  • opt:額外的選項說明
  • source :代表此規則是針對哪個『來源 IP』進行限制?
  • destination :代表此規則是針對哪個『目標 IP』進行限制?

在輸出結果中,第一個範例因為沒有加上 -t 的選項,所以預設就是 filter 這個表格內的 INPUT, OUTPUT, FORWARD 三條鏈的規則囉。由於預設規則中,INPUT 與 FORWARD 的規則一致,因此 CentOS 將兩條鏈的規則寫在一塊,變成一個自訂鏈 RH-Firewall-1-INPUT 的鏈!你得要注意的是,最後一條規則的政策是 REJECT (拒絕) 喔! 所以,雖然 INPUT 與 FORWARD 的政策是放行 (ACCEPT),不過其實不合前面 8 條規則的封包全部都會被第 9 條規則拒絕。

不過這個指令的觀察只是作個格式化的查閱,要詳細解釋每個規則會比較不容易解析。舉例來說, 我們將上述的九條規則依據輸出結果來說明一下,結果會變成:

  1. 無論任何來源 (0.0.0.0/0) 且要去任何目標的封包,不論任何封包格式 (prot 為 all),通通都接受
  2. 只要是 icmp 類型為 255 號的,就予以放行
  3. 只要是封包格式為 esp 的,就予以放行 (特殊功能)
  4. 只要是封包格式為 ah 的,就予以放行 (特殊功能)
  5. 只要是要傳送給目標為 224.0.0.251 且為 udp 埠口 5353 的,就予以接受
  6. 只要是傳給 port 631 的 udp 封包就接受
  7. 只要是傳給 port 631 的 tcp 封包就接受
  8. 只要是封包狀態為 RELATED,ESTABLISHED 就予以接受
  9. 全部的封包資訊通通拒絕

最有趣的應該是第一條規則了,怎麼會所有的封包資訊都予以接受?如果都接受的話,那麼後續的規則根本就不會有用嘛! 其實那條規則是僅針對每部主機都有的內部迴圈測試網路 (lo) 介面啦!如果沒有列出介面,那麼我們就很容易搞錯囉~ 所以,近來鳥哥都建議使用 iptables-save 這個指令來觀察防火牆規則啦!因為 iptables-save 會列出完整的防火牆規則,只是並沒有規格化輸出而已。

[root@www ~]# iptables-save [-t table]

選項與參數:
-t :可以僅針對某些表格來輸出,例如僅針對 nat 或 filter 等等


[root@www ~]# iptables-save

# Generated by iptables-save v1.3.5 on Wed Jan 26 18:25:15 2011
*filter                       <==星號開頭的指的是表格,這裡為 filter

:INPUT ACCEPT [0:0]           <==冒號開頭的指的是鏈,三條內建一條自訂

:FORWARD ACCEPT [0:0]         <==三條內建鏈的政策都是 ACCEPT 囉!

:OUTPUT ACCEPT [4:496]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT    <==針對 INPUT 的規則

-A FORWARD -j RH-Firewall-1-INPUT  <==針對 FORWARD 的規則

-A RH-Firewall-1-INPUT -i lo -j ACCEPT
 <==針對自訂鏈 RH 的規則

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Jan 26 18:25:15 2011

由上面的輸出來看,有底線的那條規則當中, -i lo 指的就是由 lo 介面卡進來的封包! 這樣看就清楚多了!因為有寫到介面的關係啊!不像之前的 iptables -L -n 嘛!這樣瞭解乎! 不過,既然這個規則不是我們想要的,那該如何修改規則呢?鳥哥建議,先刪除規則再慢慢建立各個需要的規則! 那如何清除規則?這樣做就對了:

[root@www ~]# iptables [-t tables] [-FXZ]

選項與參數:
-F :清除所有的已訂定的規則;
-X :殺掉所有使用者 "自訂" 的 chain (應該說的是 tables )囉;
-Z :將所有的 chain 的計數與流量統計都歸零


範例:清除本機防火牆 (filter) 的所有規則

[root@www ~]# iptables -F

[root@www ~]# iptables -X

[root@www ~]# iptables -Z


由於這三個指令會將本機防火牆的所有規則都清除,但卻不會改變預設政策 (policy) , 所以如果你不是在本機下達這三行指令時,很可能你會被自己擋在家門外 (若 INPUT 設定為 DROP 時)!要小心啊!

一般來說,我們在重新定義防火牆的時候,都會先將規則給他清除掉。還記得我們前面談到的, 防火牆的『規則順序』是有特殊意義的 ,所以囉, 當然先清除掉規則,然後一條一條來設定會比較容易一點啦。底下就來談談定義預設政策吧!

分享到:
评论

相关推荐

    android流量防火墙iptables原理详解

    Android 流量防火墙 Iptables 原理详解 Android 流量防火墙是一种基于 Iptables 的防火墙解决方案,旨在限制单个应用的联网状态。Iptables 是一个功能强大的 IP 信息包过滤系统,可以用于添加、编辑和删除规则,...

    iptables防火墙原理介绍和配置

    iptables防火墙原理介绍和配置,还有详细的案例

    iptables原理与实战.pptx

    介绍了iptables的原理与使用方式,希望对大家有用。iptables是一个用来对包过滤规则进行管理的用户态程序; iptables最初由Rusty Russell开发,于1998年发布第一个版本; 基于netfilter框架实现,本质上是linux...

    iptables工作原理

    iptables

    Iptables原理[整理].pdf

    Iptables原理[整理].pdf

    iptables防火墙的研究与实现.pdf

    iptables防火墙的研究与实现.pdf 对做Linux防火墙的毕业设计和想了解Linux防火墙有帮助,需要有点基础哦

    iptables常用命令和使用

    iptables的工作原理在于对数据包进行过滤,它主要由三个表组成:`filter` 表、`nat` 表和 `mangle` 表。 #### 二、iptables的表结构 1. **Filter表**:这是默认的表,主要用于过滤数据包,包括 `INPUT`、`OUTPUT` ...

    iptables详解 .pdf

    iptables 详细介绍,随着k8s的兴起,iptables被关注的人更多了。本书详细介绍了iptables的内容,带你滤清各种表及链。在阅读的同时,更多的是要动手操作。技术这一行,实践才是最重要的。

    linux下iptables使用

    介绍iptables编译,安装,启动以及iptables的工作原理,以及一些编写规则和范例

    Linux运维-52-Linux云计算-安全防御 - iptables 原理.mp4

    Linux运维-52-Linux云计算-安全防御 - iptables 原理.mp4

    iptables应用手册详细介绍

    iptables 应用手册详细介绍 iptables 是 Linux 核心里的 Netfilter 子系统所提供的唯一工具程序,用于创建防火墙、网址...通过理解 iptables 的原理和应用,管理员可以更好地使用 iptables 来保护自己的系统和网络。

    Iptables速查手册

    ### Iptables速查手册知识点解析 #### 一、Iptables简介与基本概念 **Iptables** 是一个在Linux...通过对iptables的基本概念、工作原理、命令使用等方面的深入理解,可以帮助管理员更加高效地管理和保护网络环境。

    iptables 高级使用研讨

    ### iptables 高级使用研讨知识点详解 #### 1. 基础部分 ##### 1.1 REDIRECT与DNAT的区别...通过上述知识点的学习,可以更加深入地理解iptables的工作原理及其高级使用方法,这对于网络管理员来说是非常宝贵的技能。

    iptables 使用总结

    总结了iptables原理,在各个场景下的使用方法,并给出了sh脚本的实现过程

    iptables防火墙应用指南

    需要注意的是,这张流程图是为了简化理解而制作的,与实际流程可能略有差异,但并不影响对iptables工作原理的理解。 #### 2. iptables的高级用法 在后续章节中,我们将详细介绍iptables的各种高级用法,包括但不...

    Iptables详细介绍

    Iptables详细介绍秒速了Iptables的基本概念知识,运行环境,运行原理等内容。对Iptables的结构构成和各部分协同工作做了介艄。并对常用Iptables的操作代码做了解释并举例。看了此文档后,读者即可以学会对iptables的...

    iptables高级应用实战案例

    通过本知识点的学习,读者将掌握iptables中SNAT和DNAT的原理和配置方法,了解如何通过iptables实现复杂的网络地址转换,以及如何为网络流量设置安全策略,确保网络访问的安全和稳定。这些技能对于网络管理员来说非常...

    Iptables 指南 1.1.19(中文版、英文版、html版)

    iptables相信玩过linux的人并不陌生,该指南详细的介绍了iptables的原理,配置。中文版、英文版。

    Linux下使用Iptables配置NAT防火墙

    分析防火墙技术原理和防火墙类别,结合校园网实际设计使用Linux下的Iptables 防火墙NAT 方案,能够实现NAT和对网络进行用户管理和信息过滤,并能防范一定的网络攻击手段和防病毒 能力,保护校园网内主机的安全和重要...

    ubuntu防火墙iptables使用教程

    这篇文章向读者展示了如何一步一步建立静态防火墙来保护您的计算机,同时在每一步中,我力图向读者讲述清楚原理。在这篇教程之后,你将能理解到防火墙内在过滤机制,同时也能自己动手创建符合自己要求的防火墙。 1、...

Global site tag (gtag.js) - Google Analytics