1. 程式人生 > >關於iptables防火牆的介紹和使用

關於iptables防火牆的介紹和使用

目錄

1.Netfileter/iptables(以下簡稱iptables)防火牆簡介

  1. unix/linux自帶的開源,且基於包過濾的防火牆工具
  2. 可對流入和流出伺服器的資料包進行控制
  3. 可在低配的硬體上執行
  4. 是Linux2.4及2.6核心中整合的服務
  5. 在OSI七層的二、三、四層上工作
  6. iptables是防火牆的管理工具,位於/sbin/iptables,真正實現功能的是netfilter,他是Linux核心中實現包過濾的內部結構
  7. iptables包含四個表5個鏈,其中表是按照對應資料包的操作區分的,鏈是按照不同的HOOK點來區分的,表和鏈實際上是neifilter的兩個維度

2.iptables四表五鏈介紹

2.1表、鏈、規則之間的關係

表(table)

iptables是表的容器,iptables包含的各個表

鏈(chains)

Iptables表是鏈的容器

INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

規則(Policy)

鏈是規則的容器

2.2iptables表的介紹

1.filter表(是iptables預設使用的表)

作用:過濾流經主機的資料包

核心模組:Iptables_filter

規則鏈

  1. INPUT
  2. FORWARD
  3. OUTPUT

2.nat表

作用:

  1. 負責網路地址轉換,即來源與目的IP地址和port的轉換;
  2. 和主機本身沒有關係,一般用於區域網或者特殊的埠轉換服務相關;
  3. nat功能相當於網路的ACL控制,和網路交換機的ACL類似.

核心模組:iptables_nat

規則鏈:

  1. OUTPUT
  2. PREROUTING
  3. POSTROUTING

3.Mangle表(基本用不倒)

作用:

  1. 修改資料包的服務型別、TTL;
  2. 可以配置路由實現QOS核心模組

核心模組:iptables_mangle

規則鏈:

  1. PERROUTING
  2. POSTROUTING
  3. INPUT
  4. OUTPUT
  5. FORWARD

4.Raw表(RHEL4沒有此表)

作用:決定資料包是否被狀態處理機制處理

核心模組:iptables_raw

規則鏈:

  1. OUTPUT
  2. PREROUTING

注意:表的處理優先順序:Raw>mangle>nat>filter

2.3規則鏈介紹

INPUT:用來過濾目標地址是主機地址的資料包

OUTPUT:處理源地址是本機地址的資料包

PREROUTING:資料包到達防火牆時進行路由判斷之前執行的規則,作用是改變資料包的目的地址和目的埠等

POSTROUTING:在資料包離開防火牆時進行路由判斷之後執行的規則,作用是改變資料包源地址,源埠,例如:我們現在的筆記本和虛擬機器都是192.168.30.0/24,在出網的時候被我們的企業路由器把源地址改為了公網地址,主要應用在區域網共享上網

FORWARD:負責轉發主機資料包,和NAT關係很大。LVS NAT模式,net.ipv4_forward=1

2.4規則鏈之間的優先順序

2.4.1第一種情況

入站資料流向

  1. 從外界達到防火牆的資料包,先被PREROUTING規則鏈處理(是否修改資料包地址);
  2. 之後進行路由選擇(判斷資料包應該發往何處),如果資料包的目標主機是防火牆本機(例如Internet使用者訪問防火牆主機中的web伺服器的資料包),那麼核心將其轉給INPUT鏈進行處理(決定那個是否能夠通過);
  3. 通過以後再交給系統上層的應用程式(例如Apache伺服器)進行響應

2.4.2第二種情況

轉發資料流向

  1. 來自外界的資料包到達防火牆之後,先被PREROUTING規則連處理;
  2. 之後進行路由選擇,如果資料包的目標地址是其他外部地址(比如區域網使用者通過閘道器訪問QQ站點的資料包),則核心將其傳遞給FORWARD鏈進行處理,(是否轉發或攔截);
  3. 然後再交給POSTROUTING規則鏈(是否修改資料包的地址)進行處理

2.4.3第三種情況

出站資料流向

  1. 防火牆本機想外部地址傳送資料包(比如說在防火牆本機中測試公網DNS伺服器時),首先被OUTPUT規格鏈處理;
  2. 之後進行路由選擇,然後在傳遞給POSTROUTING規則連(是否修改資料包源地址等)進行處理
  1. 管理和設定iptables

3.1IPTABLES基本語法格式

Iptables[-t 表名] 命令選項 [鏈名]  [條件匹配] [ -j 目標動作和跳轉]

說明:

  1. 表名,鏈名用於指定iptables命令所操作的表和鏈
  2. 命令選項:用於指定管理iptables規則的方式(如:插入、增加、刪除、檢視)
  3. 目標動作和跳轉:用於指定資料包的處理方式(如:通過、拒絕、丟棄、跳轉給其他的鏈處理)

3.2IPTABLES管理命令的管理控制選項

-A(append):在指定的鏈的末尾新增一條新的規則

-D(delete):指定鏈中的某一條規則,可以按規則序號和內容刪除

-I(insert):在指定鏈中插入一條新的規則,預設在第一行新增

-R(replace):修改、替換指定鏈中的某一條規則,可以按照序號和內容進行替換

-L(list):指定鏈中所有的規則進行檢視

-F(flush):清空所有的規則

-N(new-chain):一條使用者自己定義的規則鏈

-X(delete-chain):刪除指定表中使用者自定義的規則鏈

-P(policy):設定指定鏈的預設策略

-N(numeric):使用數字顯示輸出結果

-V(version):檢視版本

-h(help):獲取幫助

3.3防火牆處理包的方式

ACCEPT:允許資料包通過

DROP:直接丟棄資料包,不給任何迴應訊息

REJECT:拒絕資料包通過,必要時會給資料傳送端一個響應的資訊

LOG在/var/log/message檔案中記錄日誌資訊,然後將資料包傳遞給下條規則

3.4IPTABLES防火牆規則的儲存與恢復

3.4.1原理:

Iptables-save把規則儲存到檔案中,再由目錄rc.d下的指令碼(/etc/rc.d/init.d/iptables)自動裝載

3.4.2儲存規則的方法

第一種

使用Iptables-save來儲存

Iptables-save > /etc/sysconfig/iptables   //來生成儲存規則的檔案

第二種:

使用service iptables save  //他能把規則自動儲存在/etc/sysconfig/iptables中

當計算機啟動時,rc.d下的指令碼將用命令iptables-restore呼叫這個檔案,從而就自動恢復了規則

3.5匹配規則

a)規則從上往下匹配,只要匹配到就不往下匹配,如果沒有匹配上就走預設規則

b)防火牆是層層過濾的,實際上是按照配置規則的順序從上到下,從前到後進行匹配的

c)如果匹配上規則,則明確表明是阻止還是通過,資料包就不在匹配新的規則

d)如果所有規則中沒有明確表明是阻止還是通過,也就是沒有匹配規則,向下進行匹配,直到匹配預設得到明確的阻止還是通過

e)防火牆預設規則是對應鏈的所有規則執行完成後才會執行的

4.實際操作

4.1拒絕進入防火牆的所有ICMP資料包

命令:[[email protected] sysconfig]# iptables -I INPUT -p icmp -j REJECT

4.2新增允許防火牆轉發出icmp協議以外的所有資料包

[[email protected] sysconfig]# iptables -A FORWARD  ! -p icmp -j ACCEPT

4.3拒絕轉發來自192.168.1.10主機資訊,允許轉發來自192.168.0.0/24網段的資料

-s:指定源地址

命令:[[email protected] sysconfig]# iptables -I FORWARD -s 192.168.1.10 -j REJECT

命令:[[email protected] ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

4.4丟棄從外網介面進入防火牆本機的源地址為私網地址的資料包

-i:指定網絡卡

命令:

[[email protected] ~]# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

[[email protected] ~]# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP

[[email protected] ~]# iptables -A INPUT -i eht0 -s 172.16.0.0/12 -j DROP

4.5封堵網段172.16.0.0/12 2分鐘後候解封

命令:

[[email protected] Desktop]# iptables -A INPUT -s 172.16.0.0/12 -j DROP  //禁止172.16.0.0/12的網段

[[email protected] Desktop]# at now +2 minutes                     //增加一次性任務2分鐘後刪除此規則

at> iptables -D INPUT 1

at> <EOT>

job 5 at 2018-10-03 12:58

4.6只允許管理員從172.16.0.0/12使用遠端登陸防火牆主機

命令:

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -s 172.16.0.0/12 -j ACCEPT  //只允許源172.16.0.0/12的地址的22埠的tcp協議進入

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j DROP                 //丟棄埠22的TCP協議

4.7允許本機開放的埠從TCP埠20-1024提供的應用服務

命令:

[[email protected] ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT      //在入站鏈中新增本機允許TCP20-1024埠進入的

[[email protected] ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT    //在出站鏈中新增的本機允許TCP20-1024端口出去

!!!此處特別注意:

對於INPUT鏈dsport指的是本地的埠

對於OUTPUT鏈sport指的是本地的埠

4.8允許轉發來自172.16.0.0/12區域網段的DNS請求資料包

命令:

[[email protected] ~]# iptables -A FORWARD -s 172.16.1.20 -p udp --sport 53 -j ACCEPT

[[email protected] ~]# iptables -A FORWARD -d 172.16.1.20 -p udp --dport 53 -j ACCEPT

4.9禁止其他主機ping防火牆主機,但允許從防火牆上ping其他主機

命令:

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

4.10禁止轉發來自MAC地址和主機的資料包

命令:

[[email protected] ~]# iptables -I INPUT -m mac --mac-source 80:18:44:DF:F6:81 -j DROP

說明:iptables中使用‘-m 模組關鍵字’的形式呼叫顯示匹配。咱們這裡用‘-m mac -mac-source’來表示資料包的源MAC地址

4.11允許防火牆對外開放TCP埠20、21、25、110以及被動模式FTP埠1250-1280

命令:

[[email protected] ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

說明:這裡使用‘ -m multiport --dport ’來指定目的埠及範圍

4.12禁止轉發源IP地址為192.168.1.20-192.168.1.99的TCP資料包

命令:

[[email protected] ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

說明:此處用‘ -m iprange --src-range’來指定IP地址的範圍

4.13禁止轉發與正常TCP連線無關的非--syn請求的資料包

命令:

[[email protected] ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

說明:‘-m state’表明資料包的連線狀態,‘NEW’表示與任何連線無關的

4.14拒絕訪問防火牆新資料包,但允許相應連線或已有連線相關資料包

命令:

[[email protected] ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP //丟棄新建的TCP連線

[[email protected] ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT //接受已經建立的連線

說明:

‘ ESTABLISHED’表示已經響應或者已經建立連線的資料包,‘RELATED’表示與建立連線有相關性的連線

4.15只開放本機WEB服務(80),FTP(20.21.20450-20480),放行外部主機主機發往伺服器其他埠的應答資料包,將其他入站資料包均予以丟棄處理

命令:

[[email protected] ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT //允許接受20.21.80埠

[[email protected] ~]# iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT //允許接受20450到20480埠

[[email protected] ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT //接受已響應連線和已建立連線

[[email protected] ~]# iptables -P INPUT DROP //為INPUT鏈建立預設規則,入站資料包全部丟棄

5.錯誤記錄

5.1新增允許防火牆轉發除icmp協議以外的所有資料包

解決:雖然會報錯但是新增規則的命令還是會被執行,報錯資訊顯示”Using intrapositioned negation is deprecated (` --option ! this`)”使用內部缺陷,屬於BUG問題,”in favor of extrapositioned (` ! --option this`)”表是支援的方式為 ! --option this 這樣就可以解決此報錯問題

Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).

Intrapositioned 內陷的

Negation      否定

Deprecated    貶低

Extrapositioned  外接 外部轉換