淺談Linux-iptables

本文參照鳥哥linux服務器篇,歸納一些知識點。

1.linux的封包過濾軟件:

iptables(分析封包的表頭數據,根據表頭數據與定義的規則決定該封包是否進入主機或者被丟棄)

iptables只是linux防火牆的管理工具,真正實現防火牆功能的是netfilter,它是linux內核中實現包過濾的內部結構。

2.注意定義定於規則時的先後順序

如果網絡封包進入Rule1進行比對時,若符合Rule1,則會執行Action1動作,不理會後續的Rule2,Rule3.....

3.iptable的表格(table)和鏈(chain):

iptables顧名思義就是ip表,iptables由多個表(table)組成,每個人表用途都不一樣,在每個表中又定義了多個鏈(chain),通過這些鏈可以設置相應的規則和策略。

四個表:filter、nat、mangle、raw

五個鏈:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

一、filter表:主要跟進入linux本機的數據包有關,這個是默認的table。

二、nat表:主要與進行來源和目的之間的ip和port的轉換,與linux本機無關。

三、mangle表:修改數據包的服務類型、TTL、並且可以配置路由實現Qos。

四、raw表:決定數據包是否被狀態跟蹤機制處理(應用在那些不需要nat的情況下,以提高性能。如大量訪問的Web服務器,可以讓80端口不再讓iptables做數據包的鏈接跟蹤處理,以提高用戶的訪問速度)。

優先級:raw>mangle>nat>filter

一、INPUT鏈:進來的數據包應用此規則鏈中的策略。

二、OUTPUT鏈:外出的數據包應用此規則鏈中的策略。

三、FORWARD鏈:轉發數據包時應用此規則鏈中的策略。

四、PREROUTING鏈:對數據包做路由選擇前應用此鏈中的規則(所有的數據包進來的時候都由這個鏈處理)

五、POSTROUTING鏈:對數據包做路由選擇後應用此鏈的規則(所有的數據包出來的時候都先由這個鏈處理)

下圖是各表包含的鏈:

數據包的流向如下圖(常用的filter和nat表的精簡圖):

A:封包進入linux主機使用資源。

B:封包由linux主機轉遞,沒有使用主機資源,而是向後端主機流動。

C:封包由linux主機發出,例如相應客戶端的要求。


4.iptables的語法:

一、規則的觀察:

iptables  -L -n

-t:後面接table,默認是filter。

-L:列出目前的table規則。

-n:不進行ip和hostname的反查。

iptables-save -t(表名)

二、規則的清除:

iptable [-t table] [-FZX]

-F:清除規則鏈中已有的條目。

-X:清除所有者自定義的規則鏈。

-Z:清空規則鏈中的數據包計算器和字節計數器。

三、定義預設政策(policy):

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

例子:

iptables -t filter INPUT ACCEPT

即修改的是iptables-save查詢的結果。

*filter
:INPUT ACCEPT [321090:366632483]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296527:33324326]
COMMIT

四、針對IP,網域、接口和端口的配置:

iptables [-AI 鏈名] [-io 網絡接口] [-p 協議] [-s 來源ip/網域] [ --sport 端口] [-d 目標ip/網域] [ --dport 端口] 

-j [ACCEPT|DROP|REJECT|LOG]

-A:新增一條規則

-I:插入一條規則,默認是插入爲第一條。-I 3則插入爲第三條。

-i:封包所進入的網絡接口,例如eth0,lo,需要與INOUT鏈配合。

-o:封包所出去的網絡接口,需要與OUTPUT鏈配合。

-p:此規則鏈適用於那種封包格式:tcp、udp、icmp、all

-s:封包的來源。可以指定單純的ip或包括網域 192.169.0.1 或 192.168.0.1/24

--sport:來源端口號,可以是連續的例如1:1245

-d:封包的目的地,格式同上-s

--dport:目的端口號

-j:後面接的動作,上面依次爲接受、丟棄、拒絕、記錄

例子:

a、接收192.168.0.0/24的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT

b、丟棄192.168.0.0/24訪問本機21端口的包:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --dport 21 -j DROP

c、丟棄192.168.0.0/24的1到1024端口訪問本機ssh端口:iptables -A INPUT -i eth0 -s 192.168.0.0/24 --sport 1:1024  --dport ssh -j DROP 

五、iptables的mac和state模塊:

iptables -A INPUT  [-m state] [--state 狀態]

-m:iptables的外掛模塊,常見的有state(狀態模塊)、mac(網卡mac地址模塊)

--state:數據包的狀態(減少聯機下寫一條output規則,再寫一條input規則的繁瑣),主要有:

INVALID:無效的數據包,例如數據損壞的數據包。

ESTABLISHED:已經聯機成功的聯機狀態。

NEW:想要新建立聯機的封包狀態。

RELATED:最常用,表示這個數據包跟我們主機發出的數據包有關。

例子:

a、已建立或相關的數據包就予以通過:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

b、局域網的aa:bb:cc:dd:ee:ff 主機開放其聯機:iptables -A INPUT -m --mac--source aa:bb:cc:dd:ee:ff -j ACCEPT

六、針對icmp數據包的規則:

iptables -A INPUT [-p icmp] [--icmp--type 類型]  -j ACCEPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章