iptables/netfilter入門

  iptables是Linux中的重要組件,它是對報文進行過濾,在2001年的1月Linux 2.4內核發布以來,就已經是Linux的一部分了。  
  現在的iptbales已經成為了功能很大的防火墻,具備了專有的商業防火墻的大多數的功能了。

1、防火墻簡介

  防火墻是我們在外網接收數據進行過濾的第一道防線,也可能是最后一道防線,它是一個隔離工具,工作在主機或網絡的邊緣,對經由的報文根據預先定義好的規則或者說是識別標準進行檢測,對于能夠匹配到的報文則根據預先生成的規則進行處理的一套組件。防火墻也有分類,其分類主要以下兩種:  
  硬件防火墻:主要在硬件級別上實現部分功能。  
  軟件防火墻:主要在應用軟件邏輯在通用硬件的基礎上實現。

防火墻拓撲.png

2、iptables/netfilter簡介

iptables是一個生成規則,可以保存到文件重載使用的一個用戶命令,工作在應用層當中,它解析命令行并將防火墻策略傳遞給內核。而在netfilter中,它是一個防火墻的框架,將iptables的規則承載并生效,本身并不對數據包進行過濾,它只是允許可以過濾數據包的函數掛接到內核中適當位置。

3、規則鏈與策略

  眾所周知,內核是面向硬件從而用來對硬件進行管理和驅動,它也有不同的功能,進程管理、內存功能、網絡協議棧功能、安全功能、文件系統、驅動程序等。那么防火墻就工作在網絡協議棧上,它是安全功能的一種,其功能在內核中共分為五個,分別是路由前(prerouting)、路由后(postrouting)、導入(input)、導出(output)和轉發功能(forward)。使其規則生效,我們稱之為鉤子函數,工作在netfilter之上。我們可以自己定義一個規則鏈,而后手動關聯至指定的鉤子上,使其生效。  
  在iptables命令當中對以上功能是一樣的,不過是要在netfilter當中生效,對于在iptables當中來說,我們稱之為"規則鏈",我們自己定義規則是要寫到上面去的,而每個鏈都有屬于它的功能,其功能分為四個,我們稱之為"表",優先級我們也是由高而低。分別是:

raw::關閉nat表上啟用的鏈接追蹤機制 
mangle:拆解報文,做出修改,而后重新封裝
NAT:負責地址解析轉換。修改數據包中的源、目標IP地址或端口
filter:對數據包進行過濾

  每一個功能對應一個鉤子函數,分別是:

raw:prerouting、output 
mangle:prerouting、forward、postrouting、input、output nat:
prerouting、input、output、postrouting
filter:input、forward、output

默認的表和鏈的示意圖.png

4、iptables命令使用

  我們知道,我們的操作都是在shell界面下來進行的,根本無法直接接觸內核,對于防火墻來說也是一樣,它也是有用戶命令的,可以定義不同的表,每個表都包含幾個內部的鏈,也能包含用戶定義的鏈。
 每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處 理與之相匹配的包。這被稱作'target'(目標),也可以跳向同一個表內的用戶定義的鏈。安裝netfilter位于內核中的tcp/ip協議棧報文處理框架,對于iptables來說,在CentOS
 5/6中用來生成規則,可保存于文件中以反復裝載生效。  
iptables的命令格式如下:

# iptables [-t table] COMMAND [chain] [PARAMETERS] [-m matchname [per-match-options]][-j targetname [per-target-options]]

  以上就是命令的格式,使用iptables管理時,都會有它的子命令,其子命令如下:  
  COMMANDs:  
  鏈管理:

-N, --new-chain chain    新建一個自定義的鏈 
-X, --delete-chain [chain]    刪除用戶自定義的引用計數器為0的鏈
-F, --flush [chain]    清空指定規則鏈上的規則 
-E, --rename-chain old-chain new-chain 重命名鏈
-Z, --zero [chain [rulenum]]    置零計數器 
-P, --policy chain target   設置規則鏈的默認值,默認值有:ACCEPT、DROP

  需要注意的是:每個規則都由兩個計數器,一個是packets,它是被本規則所匹配到的所有報文的個數;另一個是bytes,被本規則所匹配到的所有報文的大小之和。

  除了鏈管理之外,還有規則管理以及規則顯示,其子命令如下:  
規則管理:

-A, --append chain rule-specification   追加新規則與指定鏈的尾部 
-I, --insert chain [rulenum] rule-specification   插入新規則于指定鏈的指定位置,默認為首部 
-R, --replace chain rulenum rule-specification   替換指定的規則為新的規則 
-D, --delete chain rulenum   根據規則編號刪除規則 
-D, --delete chain rule-specification   根據規則本身刪除規則

  規則顯示:

-L, --list [chain]    列出規則     
    -v, --verbose  詳細信息    
    -n, --numberic  數字格式顯示主機地址和端口號     
    -x,--exact    顯示計數器的精確值     
    --line-numbers  列出規則時,顯示其在鏈上的相應的編號 
-S, --list-rules [chain]  顯示指定鏈上的所有規則

  以上就是對于子命令的規則介紹,但是添加添加規則時,還需考量一下因素:  
  1、實現的功能:用于判定規則添加至那個表中。  
  2、報文流經的位置:用于判定規則添加至那個鏈當中。  
  3、報文的流向:判斷規則何為"源",何為"目標"。  
  4、匹配條件:用于編寫正確的匹配規則,條件如下:  
    (1) 專用于某種應用的同類規則,匹配交小的放前面。  
    (2) 專用于某種應用的不用淚規則,匹配較大的放在后面。  
    (3) 用于通用目的的規則放在前面。  
  以上就是我們添加規則時所考量的因素,其中filter表就是防火墻的核心所在,那么在所有的規則編輯或者定義完成之后,自然少不了它的匹配條件,那么匹配條件也分為兩種,一種是通用匹配和擴展匹配,另一種是跳轉目標,歸結如下:

[!] -s, --source address[/mask][,...]  檢查報文的源IP地址是否鍍鉻此處指定的范圍,或是否等于此處給定的地址。
[!] -d, --destination address[/mask][,...]  檢查報文的目標IP地址是否符合此處的指定范圍,或是否等于此處。 
[!] -p, --protocol protocol     匹配報文中的協議,可用值為tcp, udp, icmp等,或者"all",亦可以數字格式指明協議。 
-m, --match match  調用指定的擴展匹配模塊來匹配條件檢查機制。 
[!] -i, --in-interface name  限定報文僅能夠從指定的接口流入。
[!] -o, --out-interface name  限定報文僅能夠從指定的接口流出。

  以上就是通用匹配,接下來介紹跳轉目標,選項為-j,那么跳轉目標每個意義都不一樣,歸結如下:  
  1、ACCEPT允許通過。  
  2、LOG:記錄日志信息。  
  3、REJECT:拒絕通過,給出提示。  
  4、DROP:直接丟棄,不給出任何回應。  
  其中REJECT和DROP的操作都是將數據包拒絕,但REJECT會再回復一條“您的信息我已收到,但被扔掉了”,那通過ping命令測試REJECT如下:

[root@localhost ~]# ping -c 4 192.168.10.10 
PING 192.168.10.10 (192.168.10.10)56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
From 192.168.10.10 icmp_seq=2 Destination Port Unreachable 
From 192.168.10.10 icmp_seq=3 Destination Port Unreachable 
From 192.168.10.10 icmp_seq=4 Destination Port Unreachable 
--- 192.168.10.10 ping statistics --- 
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms

  好的,對于選項的匹配規則注意事項已經介紹的差不多了,那么接下來我們該做一小例子了,在做試驗要注意一點,都必須將22好端口開啟通過,不然的話,你的遠程會話就連接不上去了。  
在下一篇當中我們接觸iptables進階。

原創文章,作者:劉 祥宇,如若轉載,請注明出處:http://www.www58058.com/67309

(0)
劉 祥宇劉 祥宇
上一篇 2017-01-30
下一篇 2017-01-31

相關推薦

  • CentOS7的啟動及Systemd的管理?

    CentOS7的啟動流程     POST–>Boot Sequence–>Bootloader–>kernel+initramfs(initrd)–>rootfs–>/sbin/init    &n…

    Linux干貨 2016-09-21
  • 利用heartbeat v2版搭建高可用mysql

    一、實驗環境  1)實驗圖        2)同步時間;確??梢允褂弥鳈C名通信;確??梢允褂胹sh秘鑰方式進行彼此登錄;由于是兩臺設備,需要仲裁;  確??梢允褂弥鳈C名通信 web1修改hosts文件如下: 172.16.2.12 SQL1.linux.com SQL1 172.…

    Linux干貨 2015-07-08
  • 07程序包管理器簡介

    源代碼命名方式,name-version.tar.gz|bz2|xz,    –>version:major.minor.release 要將一個源代碼程序安裝到Linux系統上,一般有兩個方法。 1、找到源代碼,手動編譯安裝。解壓,./configure  –> make –&g…

    Linux干貨 2016-11-03
  • CentOS6.7上編譯安裝MariaDB

    CentOS6.7上編譯安裝MariaDB

    系統運維 2016-06-03
  • CentOS 6開機啟動流程理論篇

    CentOS 6開機啟動流程理論篇 centos 系統的啟動流程 grub 破壞Linux的核心文件再修復體驗系統啟動流程 概述 任 何系統啟動的第一步必然是加電,然后計算機硬件會主動地讀取BIOS來加載硬件設備信息并檢測,之后系統會主動地讀取第一個有引導程序的設備,該引導程序 (grub)可以指定使用哪個內核來啟動,并將其加載至內存當中運行,同時內核還要加…

    Linux干貨 2016-09-19
  • 高級文件系統管理2

    邏輯卷管理器(LVM),允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小。允許在多個物理設備間重新組織文件系統。其步驟大體如下:將設備指定為物理卷,用一個或者多個物理卷來創建一個卷組,物理卷你是用固定大小的物理區域(PE)來定義的,在物理卷上創建的邏輯卷是由物理區域組成,可以在邏輯卷上創建文件系統。 一、知識整理 1、LVM設備名:dm-#。 軟鏈接…

    Linux干貨 2016-09-13
欧美性久久久久