iptables用法

一. iptables簡述

防火牆的做用就在於對通過的報文匹配(match)「規則」(rules),而後執行對應的「動做」(target)。html

防火牆的發展史就是從牆到鏈再到表的過程,也即從簡單到複雜的過程,爲何規則愈來愈多,由於互聯網愈來愈不安全了,全部防火牆的規則也愈來愈複雜。linux

ipfirewall(牆)-->ipchains(鏈條)--iptables(表)shell

2.0版內核中,包過濾機制是ipfw,管理工具是ipfwadm;安全

2.2 版內核中,包過濾機制ipchain,管理工具是ipchains;網絡

2.4版及之後的內核中,包過濾機制是netfilter,管理工具iptables。app

iptables運行在用戶態,用戶制定防火牆規則;netfilter運行與內核空間,規則存儲在內核空間的信息包過濾表中。用戶空間的iptables制定相應的規則策略控制內核空間的netfilter處理相應的數據訪問控制。tcp

製做防火牆規則一般有兩種基本策略。一是黑名單策略;二是白名單策略。工具

二. iptables規則

iptables規則有四表五鏈(其實有五表,後來又增長了security表),四表分別是raw、mangle、nat、filter表。五鏈分別是PREROUTING、INPUT、OUTPUT、 FORWARD、POSTROUTING鏈。表有什麼用?鏈又有什麼用呢?其實表規則決定了數據報文處理的方式,而鏈規則決定了數據報文的流經哪些位置。post

表介紹(table性能

filter表:負責過濾功能,確認是否放行該數據包;內核模塊:iptables_filter

nat表:網絡地址轉換功能,修改數據包中的源、目標IP或端口;內核模塊iptables_nat

mangle表:拆解報文、作出修改,並從新封裝,爲數據包設置標記;iptable_mangle

raw表:確認是否對該數據包進行狀態追蹤,關閉nat表上啓動的鏈接追蹤機制;iptable_raw

security表:是否認義強制訪問控制規則(MAC)。

規則表的優先級:raw->mangle->nat->filter

鏈介紹(chain)

PREROUTING鏈:在進行路由選擇前處理數據包,判斷目標主機

INPUT:處理入棧數據包

OUTPUT:處理出棧數據包

FORWARD:處理轉發數據包(主要是將數據轉發到本機其餘網卡設備)

POSTROUTING鏈:在進行路由選擇後處理數據包,判斷經由哪個接口送往下一跳

 

制定iptables規則的思路:

1) 選擇一張表(此表決定了數據報文處理的方式)

2) 選擇一條鏈(此鏈決定了數據報文的流經哪些位置)

3) 選擇合適的條件(此條件決定了對數據報文作何種條件匹配)

4) 選擇處理數據報文的動做,制定相應的防火牆規則。

三. iptables命令

iptables/ip6tables - administration tool for IPv4/IPv6 packet filtering and NAT

iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動做或跳轉]

不指定表名時,默認表示filter表;

不指定鏈名時,默認表示該表內全部鏈;

除非設置規則鏈的缺省策略,不然須要指定匹配條件。

 

       iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain rule-specification

       iptables [-t table] -I chain [rulenum] rule-specification

       iptables [-t table] -R chain rulenum rule-specification

       iptables [-t table] -D chain rulenum

       iptables [-t table] -S [chain [rulenum]]

       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target

       iptables [-t table] -E old-chain-name new-chain-name

 

       rule-specification = [matches...] [target]

       match = -m matchname [per-match-options]

       target = -j targetname [per-target-options]

1. 管理選項

管理選項-規則管理

-A, --append chain rule-specification:追加新規則於指定鏈的尾部

-C, --check chain rule-specification:確認匹配規則是否在存在chain中

-D, --delete chain rule-specification:根據規則自己刪除規則

-D, --delete chain rulenum:根據規則編號刪除規則

-I, --insert chain [rulenum] rule-specification:插入新規則於指定鏈的指定位置,默認爲首部

-R, --replace chain rulenum rule-specification:替換指定的規則爲新的規則

管理選項-規則顯示

-L, --list [chain]:列出規則

-n, --numeric:數字格式顯示主機地址和端口號

-x, --exact:顯示計數器的精確值,而非圓整後的數據

--line-numbers:列出規則時,顯示其在鏈上的相應編號

-S, --list-rules [chain]:顯示指定鏈的全部規則

管理選項-鏈管理

-N, --new-chain chain:新建一個自定義的規則鏈

-X, --delete-chain [chain]:刪除用戶自定義的引用計數爲0的空鏈

-F, --flush [chain]:清空指定的規則鏈上的規則

-E, --rename-chain old-chain new-chain:重命名鏈

-Z, --zero [chain [rulenum]]:置零計數器;

    注意:每一個規則都有兩個計數器:

packets:被本規則所匹配到的全部報文的個數

bytes:被本規則所匹配到的全部報文的大小之和

-P, --policy chain target:指定鏈表的默認策略(ACCEPT | DROP | REJECT),增長的規則應該是相反的,須要特殊處理的。

2. 條件匹配

條件匹配分爲基本匹配和擴展匹配,擴展匹配又分爲顯示匹配和隱式匹配。

基本匹配的特色是:無需加載擴展模塊,匹配規則生效;擴展匹配的特色是:須要加載擴展模塊,匹配規則方可生效。

隱式匹配的特色:使用-p選項指明協議時,無需再同時使用-m選項指明擴展模塊以及不須要手動加載擴展模塊;  

顯示匹配的特色:必須使用-m選項指明要調用的擴展模塊的擴展機制以及須要手動加載擴展模塊。

基本匹配的使用選項及功能

-p 指定規則協議,tcp udp icmp all

-s 指定數據包的源地址,ip hostname

-d 指定目的地址

-i 輸入接口

-o 輸出接口

! 取反

隱式匹配的使用選項及功能 

-p tcp

  --sport 匹配報文源端口;能夠給出多個端口,但只能是連續的端口範圍

  --dport 匹配報文目標端口;能夠給出多個端口,但只能是連續的端口範圍

  --tcp-flags mask comp 匹配報文中的tcp協議的標誌位

-p udp

  --sport 匹配報文源端口;能夠給出多個端口,但只能是連續的端口範圍

  --dport 匹配報文目標端口;能夠給出多個端口,但只能是連續的端口範圍

--icmp-type

  0/0: echo reply 容許其餘主機ping

  8/0:echo request 容許ping其餘主機

顯式匹配的使用選項及功能

man iptables-extensions查看具體用法

包含multiport(多端口),iprange,time,string,connlimit,limit,state(數據報文狀態:INVALID,ESTABLISHED,NEW,RELATED,UNTRACKED)。

3.處理動做

處理動做有內置的處理動做和自定義的處理動做。自定義的處理動做用的比較少,所以只介紹內置的處理動做。

ACCEPT:容許數據包經過

DROP:直接丟棄數據包,不給出任何迴應信息,這時客戶端會感受請求丟失了,過了超時時間纔會有反應。

REJECT:拒絕數據包經過,必要時會給數據發送端一個響應信息,客戶端剛請求就會收到拒絕的信息。

LOG:在日誌文件/var/log/messages中記錄日誌信息,而後將數據包傳遞給下一條規則

QUEUE: 防火牆將數據包移交到用戶空間

RETURN:防火牆中止執行當前鏈中的後續Rules,並返回到調用鏈 

REDIRECT:端口重定向,在本機作端口映射。

MARK:作防火牆標記

DNAT:目標地址轉換

SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題。

MASQUERADE:地址假裝,是SNAT的一種特殊形式,適用於動態的、臨時會變的IP上。

四. iptables應用

1. 刪除現有規則

iptables -F

2. 配置默認鏈策略

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

3. 容許遠程主機進行SSH鏈接

iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

4. 容許本地主機進行SSH鏈接

iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

5. 容許HTTP請求

iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

6. 查看本機關於iptables的設置狀況

iptables -L -n

7.有線端口接收到數據包轉發到無線端口wlan0後發送出去

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wlan0 -j MASQUERADE

五. iptables系列工具

iptables

用於創建,維護和檢查Linux內核中IP包過濾規則的表格。

iptables-restore

用於從STDIN指定的數據恢復IP表。 使用shell提供的I/O重定向從文件讀取。

iptables-save

用於將IP表的內容以易於解析的格式轉儲到STDOUT。 使用shell提供的I / O重定向寫入文件。

iptables-xml

用於將iptables-save的輸出轉換爲XML格式。 使用iptables.xslt樣式表將XML轉換回iptables-restore的格式。

iptables-apply

更安全的方式來遠程更新iptables。

ip6tables*

是一組用於並行上述iptables命令的IPV6命令。

nfsynproxy

(可選)配置工具。 在這種狀況下,SYNPROXY目標能夠處理大型SYN洪水,而不會形成鏈接跟蹤形成的大量性能損失。

xtables-multi

是一個二進制,它的行爲是根據它所調用的名字。

 

參考:

1.  iptables 從入門到應用

2.  iptables詳解:iptables概念

3.    netfiler/iptables

4.  Ubuntu 16.04中iptables的工具簡介(iptables/iptables-restore/iptables-xml/iptables-apply/iptables-save)

相關文章
相關標籤/搜索