iptables防火墻

Linux防火墻基礎

在Internet中,企業通過架設各種應用系統來為用戶提供各種網絡服務,例如Web網站,電子郵件系統,FTP服務器,數據庫系統等等,而防火墻就是用來保護這些服務器,過濾企業不需要的訪問甚至是惡意的入侵。

Linux防火墻體系主要工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬于典型的包過濾防火墻。Linux防火墻體系基于內核編碼實現,具有非常穩定的性能和高效率,也因此獲得廣泛的應用。

在許多安全技術資料中,netfilter和iptables都用來指Linux防火墻,往往使讀者產生迷惑。netfilter和iptables的主要區別如下所述。

netfilter:指的是linux內核中實現包過濾防火墻的內部結構,不以程序或文件的形式存在,屬于“內核態”的防火墻功能體系。

iptables:指的是用來管理Linux防火墻的命令程序,通常位于/sbin/iptables,屬于“用戶態”的防火墻管理體系。

正確的認識netfilter和iptables的關系,有助于理解Linux防火墻的工作原理。

iptables的表、鏈結構

iptables的作用在與為包過濾機制的實現提供規則。通過各種不同的規則,告訴netfilter對來自某些源,前往某些目的或具有某些協議特征的數據包應該如何處理。為了更加方便地組織和管理防火墻規則,iptables采用了“表”和“鏈”的分層結構。

1.規則表

為了從規則集的功能上有所區別,iptables管理著四個不同的規則表,其功能分別由獨立的內核模塊實現,這四個表的名稱,包含的鏈,各自的用途如下所述。

filter表:filter表用來對數據包進行過濾,根據具體的規則要求決定如何處理一個數據包。filter表對應的內核模塊為iptable_filter,表內包含三個鏈:INPUT、FORWARD、OUTPUT。

nat表:nat表主要用來修改數據包的IP地址,端口號等信息。nat表對應的內核模塊為iptable_nat,表內包含三個鏈:PREROUTING、POSTROUTING、OUTPUT。

mangle表:mangle表用來修改數據包的TOS,TTL值,或者為數據包設置mark標記,以實現流量整形,策略路由等高級應用。mangle表對應的內核模塊為iptable_mangle,表內包含五個鏈,PREROUTING、POSTROUTING、INPUT、FORWARD、OUTPUT。

raw表:raw用來決定是否對數據包進行狀態追蹤。raw表對應的內核模塊為iptable_raw,表內包含二個鏈:OUTPUT、PREROUTING。

2.規則鏈

在處理各種數據包時,根據防火墻規則的不同介入時機,iptables默認劃分為五種不同的規則鏈。這五種鏈的名稱,各自的介入時機如下所述。

INPUT:當收到訪問防火墻本機地址的數據包(入站)時,應用此鏈。

OUTPUT:當防火墻本機向外發送數據包(出站)時,應用此鏈。

FORWARD:當接受到需要通過防火墻中轉發送給其他地址的數據包(轉發)時,應用此鏈。

PREROUTING:在對數據包作路由選擇之前,應用此鏈。

POSTROUTING:在對數據包作路由選擇之后,應用此鏈。

數據包過濾的匹配流程

1.規則表之間的順序

iptables管理著四個默認表和五種鏈,當數據包抵達防火墻時,將依次應用raw、mangle、nat、和filter表中對應鏈內的規則,應用順序為:raw -> mangle -> nat -> filter

2.規則鏈之間的順序

根據規則鏈的劃分原則,不同鏈的處理時機是比較固定的,因此規則鏈之間的應用順序取決于數據包的流向,具體如下。

入站數據流向:來自外界的數據包到達防火墻后,首先被PREROUTING鏈處理,然后進行路由選擇;如果數據包的目標地址是防火墻本機,那么內核將其傳遞給INPUT鏈進行處理,通過以后再交給系統上層的應用程序進行相應。

轉發數據流向:來自外界的數據包到達防火墻后,首先被PREROUTING鏈處理,然后再進行路由選擇;如果數據包的目標地址是外部地址,則內核將其傳遞給FORWARD鏈進行處理,最后交給POSTROUTING鏈進行處理。

出站數據流向:防火墻本機向外部地址發送的數據包,首先被OUTPUT鏈處理,然后進行路由選擇,再交給POSTROUTING鏈進行處理。

3.規則鏈內部各條防火墻規則之間的順序

當數據包經過每條規則時,依次按第1條規則、第2條規則、……的順序進行匹配和處理。鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條相匹配的規則,則不再檢查本鏈內后續的其他規則。如果比對完整個鏈,也找不到和數據包相匹配的規則,就按照該規則鏈的默認策略進行處理。

編寫防火墻規則

基本語法、控制類型

iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]

其中,表名、鏈名用來指定iptables命令所操作的表和鏈,未指定表名時將默認使用filter表;管理選項表示iptables規則的操作方式,如插入、增加、刪除、查看等;匹配規則用來指定要處理的數據包的特征,不符合指定條件的數據包將不會處理;控制類型指得是數據包的處理方式,如允許、拒絕、丟棄等。

對于防火墻來說,數據包的控制類型非常關鍵,直接關系到數據包的房型。封堵以及做相應的日志記錄等。在iptables防火墻體系中,最常用的幾種控制類型如下所述。

ACCEPT:允許數據包通過。

DROP:直接丟棄數據包,不給出任何回應信息。

REJECT:拒絕數據包,必要時會給數據發送端一個響應信息。

LOG:在/var/log/messages文件中記錄日志信息,并沒有真正的處理數據包。

示例:在filter表(-t filter)的INPUT鏈中插入一個(-I)一條規則,拒絕(-j REJECT)發送給本機的使用ICMP協議的數據包(-p icmp)

iptables -t filter -I INPUT -p icmp -j REJECT

添加、查看、刪除等基本操作

-A:在指定鏈中末尾添加一條新的規則

-d:刪除指定鏈中的某一條規則,可指定規則序號或具體內容

-I:在指定鏈中插入一條新的規則,未指定序號時默認作為第1條規則

-R:修改、替換指定鏈中的某一條規則,可指定序號或具體內容

-L:列出指定鏈中的所有規則,若未指定鏈名,則列出表中所有鏈

-F:清空指定鏈中的所有規則,若未指定鏈名,則列出表中所有鏈

-P:設置指定鏈的默認策略

-n:使用數字性格是顯示輸出結構,如顯示IP地址而不是主機名

-v:查看規則列表是顯示詳細的信息

–line-numbers:查看規則列表時,同時顯示規則在鏈中的順序號

添加新的規則示例:

iptables -t filter -A INPUT -p tcp -j ACCEPT

iptables -I INPUT -p udp -j ACCEPT

iptables -I INPUT 2 -p icmpp -j ACCEPT

查看規則列表:

iptables -L INPUT –line-numbers

iptables -ln

刪除、清空的規則示例:  

iptables -D INPUT 3

iptables -F INPUT

#在使用選項“-F”時,允許省略鏈名而清空制定表所有鏈的規則。

設置默認策略示例:

iptables -t filter -P FORWARD DROP

規則的匹配條件

協議匹配,例如若要丟棄通過icmp協議訪問防火墻本機的數據包,允許轉發經過防火墻的除icmp協議以外的數據包。

iptables -I INPUT -p -icmp -j DROP

iptables -A INPUT -p !icmp -j ACCEPT     #感嘆號表示取反

地址匹配,使用“-s 原地址”“-d 目標地址”形式指定,例如:

iptables -A FORWARD -s 192.168.1.11 -j REJECT

iptables -A FORWARD -d 192.168.7.0/24 -j ACCEPT

網絡接口匹配,使用“-i 接口名”和“-o 接口名”的形式,例如:

iptables -A INPUT -i eth1 -s 172.16.0.0/16 -j DROP

端口匹配

iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT

顯示匹配:這種匹配需要有額外的內核模塊提供支持,必須手動以“-m 模塊名稱”的形式調用模塊,以下都是顯示匹配。

多端口匹配:iptables -A INPUT -p tcp -m multiport –dport 80,25,143 -j ACCEPT

IP范圍匹配:iptables -A FORWARD -P tcp -m iprange –src-range 192.168.1.10-192.168.1.20 -j ACCEPT

狀態匹配:常見的鏈接狀態包括NEW、ESTABLISHED和RELATED,例如:

iptables -A FORWARD -m state –state NEW -p tcp !–syn -j DROP

iptables -I INPUT -p tcp -m state –state  ESTABLISHED -j ACCEPT

原創文章,作者:Anhur,如若轉載,請注明出處:http://www.www58058.com/66363

(0)
AnhurAnhur
上一篇 2017-01-10
下一篇 2017-01-11

相關推薦

  • 最近了解到的命令

    ssh:secure  shell shell  人機交互的語言查詢當前系統使用了哪個shell(接口程序) echo $SHELL 查詢當前系統已安裝的所有shell cat /etc/shells Shell提示符 whoami 顯示當前的登錄用戶名 hostname 顯示當前的主機名      pwd …

    Linux干貨 2017-07-13
  • FHS文件系統各目錄功能

    / 根目錄。 包含了幾乎所的文件目錄。相當于中央系統。進入的最簡單方法是:cd /。 /boot 引導程序,內核等存放的目錄。 這個目錄,包括了在引導過程中所必需的文件,引導程序的相關文件(例如grub,lilo以及相應的配置文件以及Linux操作系統內核相關文件(例如vmlinuz等一般都存放在這里。在最開始的啟動階…

    Linux干貨 2016-10-20
  • mysql cluster安裝部署

    一、安裝要求 安裝環境:CentOS-6.5-32bit 軟件名稱:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz 下載地址:http://mysql.mirror.kangaroot.net/Downloads/ 軟件包:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz …

    Linux干貨 2016-08-22
  • MySQL復制詳解

    目錄:        1、簡介        2、原理        3、常見復制架構        4、一主一叢異步復…

    Linux干貨 2015-10-01
  • 小型網站MYSQL問題一:MyISAM轉Innodb的方法

    故事背景:之前公司的數據庫存儲引擎全部為MyISAM,數據量和訪問量都不是很大,也一直沒有什么問題。我最近接手一些運維工作,兼DBA,因為業務上面涉及到錢,所以決定換成支持事物的innodb。下面將操作步驟記錄以下。 1、導出mydb數據庫的表結構 mysqldump -d -uxxx -p mydb &gt…

    Linux干貨 2015-12-19
  • 馬哥教育網絡班20期+第4周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    系統運維 2016-07-07
欧美性久久久久