1. 程式人生 > >Linux- iptables 詳解

Linux- iptables 詳解

前提基礎:

當主機收到一個數據包後,資料包先在核心空間中處理,若發現目的地址是自身,則傳到使用者空間中交給對應的應用程式處理,若發現目的不是自身,則會將包丟棄或進行轉發。

iptables實現防火牆功能的原理是:在資料包經過核心的過程中有五處關鍵地方,分別是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,稱為鉤子函式,iptables這款使用者空間的軟體可以在這5處地方寫規則,對經過的資料包進行處理,規則一般的定義為“如果資料包頭符合這樣的條件,就這樣處理資料包”。

iptables中定義有5條鏈,說白了就是上面說的5個鉤子函式,因為每個鉤子函式中可以定義多條規則,每當資料包到達一個鉤子函式時,iptables就會從鉤子函式中第一條規則開始檢查,看該資料包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該資料包;否則iptables將繼續檢查下一條規則,如果該資料包不符合鉤子函式中任一條規則,iptables就會根據該函式預先定義的預設策略來處理資料包

iptables中定義有表,分別表示提供的功能,有filter表(實現包過濾)、nat表(實現網路地址轉換)、mangle表(實現包修改)、raw表(實現資料跟蹤),這些表具有一定的優先順序:raw–>mangle–>nat–>filter

一條鏈上可定義不同功能的規則,檢查資料包時將根據上面的優先順序順序檢查
在這裡插入圖片描述

小結一下~~~

wKioL1fD-LzQLXN1AACb9oWWVug429.png

資料包先經過PREOUTING,由該鏈確定資料包的走向:

    1、目的地址是本地,則傳送到INPUT,讓INPUT決定是否接收下來送到使用者空間,流程為①--->②;

    2、若滿足PREROUTING的nat表上的轉發規則,則傳送給FORWARD,然後再經過POSTROUTING傳送出去,流程為: ①--->③--->④--->⑥

主機發送資料包時,流程則是⑤--->⑥

iptables安裝配置

linux一般預設都已經安裝iptables,只需要開啟服務即可

service iptables start
iptables規則書寫

基本語法:iptables [-t 表] [操作命令] [鏈][規則匹配器][-j 目標動作]

表 說明 支援的鏈
raw 一般是為了不再讓iptables對資料包進行跟蹤,提高效能 PREROUTING、OUTPUT
mangle 對資料包進行修改 五個鏈都可以
nat 進行地址轉換 PREROUTING、OUTPUT、POSTROUTING
filter(預設) 對包進行過濾 INPUT、FORWARD、OUTPUT
常用操作命令

說明
-A 在指定鏈尾部新增規則
-D 刪除匹配的規則
-R 替換匹配的規則
-I

在指定位置插入規則

例:iptables -I INPUT 1 --dport 80 -j ACCEPT

(將規則插入到filter表INPUT鏈中的第一位上)

-L/S 列出指定鏈或所有鏈的規則
-F

刪除指定鏈或所有鏈的規則
-N
建立使用者自定義鏈

例:iptables -N allowed

-X
刪除指定的使用者自定義鏈

-P
為指定鏈設定預設規則策略,對自定義鏈不起作

例:iptables -P OUTPUT DROP

-Z 將指定鏈或所有鏈的計數器清零
-E
更改自定義鏈的名稱

例:iptables -E allowed disallowed

-n
ip地址和埠號以數字方式顯示

例:iptables -Ln

常見規則匹配器 說明
-p tcp|udp|icmp|all 匹配協議,all會匹配所有協議
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目標地址
–sport port1[:port2] 匹配源埠(可指定連續的埠)
–dport port1[:port2] 匹配目的埠(可指定連續的埠)
-o interface
匹配出口網絡卡,只適用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0

-i interface
匹配入口網絡卡,只使用PREROUTING、INPUT、FORWARD。

–icmp-type 匹配icmp型別(使用iptables -p icmp -h可檢視可用的ICMP型別)
–tcp-flags mask comp
匹配TCP標記,mask表示檢查範圍,comp表示匹配mask中的哪些標記。

例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT

(表示匹配SYN和ACK標記的資料包)

目標動作 說明
ACCEPT 允許資料包通過
DROP 丟棄資料包
REJECT 丟棄資料包,並且將拒絕資訊傳送給傳送方
SNAT
源地址轉換(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1

DNAT
目標地址轉換(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT
目標埠轉換(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK
將資料包打上標記

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要點:

1、目標地址轉換一般在PREROUTING鏈上操作
2、源地址轉換一般在POSTROUTING鏈上操作

儲存和恢復iptables規則

使用iptables-save可以儲存到特定檔案中
iptables-save >/etc/sysconfig/iptables_save
使用iptables-restore可以恢復規則
iptables-restore</etc/sysconfig/iptables_save

iptables的進階使用

1、limit限制流量:

    -m limit --limit-burst 15        #設定一開始匹配的最大資料包數���
    -m limit --limit 1000/s            #設定最大平均匹配速率
    -m limit --limit 5/m --limit-burst 15     #表示一開始能匹配的資料包數量為15個,每匹配到一個, limit-burst的值減1,所以匹配到15個時,該值為0,以後每過 12s,limit-burst的值會加1,表示又能匹配1個數據包

例子:
iptables -A INPUT -i eth0 -m limit --limit 5/m --limit-burst 15 -j ACCEPT 
iptables -A INPUT -i eth0 -j DROP
注意要點:
    1)、--limit-burst的值要比--limit的大
    2)、limit本身沒有丟棄資料包的功能,因此,需要第二條規則一起才能實現限速的功能

2、time :在特定時間內匹配

-m time 	說明
--monthdays day1[,day2]	在每個月的特定天匹配
--timestart hh:mm:ss	在每天的指定時間開始匹配
--timestop hh:mm:ss	在每天的指定時間停止匹配
--weekdays day1[,day2]	在每個星期的指定工作日匹配,值可以是1-7

例子:
iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPT
iptables -A INPUT -i eth0 -j DROP

3、ttl:匹配符合規則的ttl值的資料包

引數	說明
--ttl-eq 100	匹配TTL值為100的資料包
--ttl-gt 100	匹配TTL值大於100的資料包
--ttl-lt 100	匹配TTL值小於100的資料包

例子:
iptables -A OUTPUT -m ttl --ttl-eq 100 -j ACCEPT

4、multiport:匹配離散的多個埠

引數	說明
--sports port1[,port2,port3]	匹配源埠
--dports port1[,port2,port3]	匹配目的埠
--ports port1[,port2,port3]	匹配源埠或目的埠

例子:
iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP

5、state:匹配指定的狀態資料包

引數 說明
–state value value可以為NEW、RELATED(有關聯的)、ESTABLISHED、INVALID(未知連線)

例子:
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

6、mark:匹配帶有指定mark值的資料包

引數	說明
--mark value	匹配mark標記為value的資料包

例子:
iptables -t mangle -A INPUT -m mark --mark 1 -j DROP

7、mac:匹配特定的mac地址

例子:
iptables -A FORWARD -m mac --mac-source 00:0C:24:FA:19:80 -j DROP

原文轉載自https://www.linuxidc.com/Linux/2016-09/134832.htm