Linux防火牆基礎與編寫防火牆規則

来源:https://www.cnblogs.com/L2366/archive/2018/07/09/9285917.html
-Advertisement-
Play Games

Iptables採用了表和鏈的分層結構,每個規則表相當於內核空間的一個容器,根據規則集的不同用途劃分為預設的四個表,raw表,mangle表,nat表,filter表,每個表容器內包括不同的規則鏈,根據處理數據包的不同時機劃分為五種鏈,而決定是否過濾或處理數據包的各種規則,按先後順序存放在各規則鏈中 ...


        Iptables採用了表和鏈的分層結構,每個規則表相當於內核空間的一個容器,根據規則集的不同用途劃分為預設的四個表,raw表,mangle表,nat表,filter表,每個表容器內包括不同的規則鏈,根據處理數據包的不同時機劃分為五種鏈,而決定是否過濾或處理數據包的各種規則,按先後順序存放在各規則鏈中。

1、防火牆:內核中具有包過濾體系

內核態:netfilter

用戶態:iptables  管理工具

工作在網路層:可以對ip地址、埠、協議等信息進行處理

2、規則鏈:規則的集合

五種鏈:(必須大寫)

INPUT:入站

OUTPUT:出站

FORWARD:轉發

POSTROUTING:路由後轉換

PREROUTING:路由前轉換

1)INPUT鏈:當收到訪問防火牆本機地址的數據包(入站),應用此鏈中的規則。

2)OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則。

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

4)PREROUTING鏈:在對數據包做路由選擇之前,應用此鏈中的規則。

5)POSTROUTING鏈:在對數據包做路由選擇之後,應用此鏈中的規則。

3、規則表:規則鏈的集合

有4個表:

Raw:狀態跟蹤

Mangle:設置標記

Nat:地址轉換

Filter:包過濾

1)filter表:用來對數據包進行過濾,表內包含三個鏈,即:INPUT,FORWARD,OUTPUT

2)Nat表:nat表主要用來修改數據包的ip地址、埠號等信息。包含三個鏈,即PREROUTING,POSTROUTING,OUTPUT

3)Mangle表:用來修改數據包的TOS、TTL,或者為數據包設置MARL標記,實現流量整形,策略路由等高級應用,包含五個鏈,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD

4)Raw表:用來決定是否對數據包進行狀態跟蹤,包含兩個鏈:即OUTPUT,PREROUTING

4、規則的匹配順序:

1)規則表的順序

當數據包抵達防火牆時,將依次應用raw表,mangle表,nat表和filter表中對應鏈內的規則,應用順序為raw-mangle-nat-filter

按順序依次檢查,匹配即停止(LOG策略除外),無匹配項,執行預設策略。

2)規則鏈之間的順序

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

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

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

3)規則鏈內部各條防火牆規則之間的順序

當數據包經過每條規則鏈時,依次按第一條規則,第二條規則......的順序進行匹配和處理,鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條相匹配的規則,則不再檢查本鏈內後續的其它規則,如果比對完整個鏈,也找不到與數據包相匹配的規則,就按照規則鏈的預設策略進行處理。

5、iptables語法:

Iptables  -t  表名  命令選項  鏈名  條件選項  -j  控制類型

1)不指定表名,為filter表

2)命令選項、鏈名、控制類型必須大寫,其他必須小寫

3)條件選項可以設置多項

6、控制類型:

1)ACCEPT:允許

2)REJECT:拒絕,返回信息

3)DROP:丟棄,無信息

4)LOG:記錄日誌,傳給下一條規則

5)SNAT:源地址轉換

6)DNAT:目標地址轉換

7)MASQUERADE:ip偽裝,源地址轉換

8)REDIRECT:重定向

7、命令選項:

-A:追加到末尾

-I:插入(預設插入到第一條)

-L:查看

-D:刪除(必須加序號)

-F:清空,但預設策略不清空

-P:預設策略,只有ACCEPT或DROP兩種

-R:替換

-X:刪除自定義鏈

-N:新建自定義鏈

-n:以數字方式顯示

--line-number:添加序號

8、條件選項:

1)通用匹配:不依賴於任何條件可直接使用

-s:源地址             -d:目標地址

-p:協議                 -i:入口

-o:出口               !:取反

2)隱含匹配:依賴指定的協議

--sport:源埠          --dport:目標埠

--tcp—flags:TCP標記

--icmp-type:icmp類型,有兩種:

Echo-request(可用8代替)      請求

Echo-reply(可用0代替)        回應

開啟轉發功能:

永久有效:vim  /etc/sysctl.conf

         Net.ipv4.ip_forward=1

生效:sysctl  -p

臨時轉發,立即生效

Sysctl  -w net.ipv4.ip_forward=1

Echo “1”  > /proc/sys/net/ipv4/ip_forward

3)顯示配置:依賴於指定的功能模塊,必須明確指定模塊名稱才可以使用

多埠匹配:-m  multiport --sports   源埠列表

                      -m  multiport  --dports  目的埠列表

IP範圍匹配:-m  iprange --src-range  ip範圍

MAC地址匹配:-m  mac  --mac-source MAC地址

狀態匹配:-m  state --state   連接狀態

 

linux編寫iptables防火牆規則示例

        iptables和asa防火牆類似,作用一樣,都是為了保證網路安全,系統安全,伺服器的安全,和asa一樣也需要建立策略。

下麵通過一個案例先瞭解一下iptables防火牆規則的相關基礎操作。(關於防火牆的相關知識概念,請關註微信公眾號 L寶寶聊IT  Linux防火牆基礎與編寫防火牆規則 文章)

實驗環境:

網站伺服器ip地址是192.168.1.5,網關伺服器的內網地址是eth0:192.168.1.254,外網地址是eth1:172.16.16.254,internter測試機是172.16.16.172。實現三台系統之間可以互相ping通。

 

網管伺服器需要開啟路由轉發功能

 

也可進入vim /etc/sysctl.conf 修改為 1 永久開啟路由轉發功能

最後測試可以互相ping通即可

下麵介紹各種規則如何應用

一、編寫防火牆規則

1、例如:在網站伺服器的filter表的INPUT鏈中插入一條規則,拒絕發送給本機使用的ICMP協議的數據包。

執行:Iptables -t  filter  -I INPUT -p icmp  -j REJECT

查看規則:iptables -L INPUT --line-numbers

 

然後再次使用172.16.16.172ping192.168.1.5,出現目標埠不可到達,無法ping通

2、添加新的規則

例如:

1)在filter表INPUT鏈的末尾添加一條規則,接受tcp協議(實驗之前在網站伺服器上搭建ftp服務,使用internet測試機可以訪問ftp伺服器)

在internet測試機上訪問

預設網站伺服器的防火牆開啟,所以不能訪問,然後執行:

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

發現依然不能訪問,因為-A是在末尾添加一條新的規則

所以執行:Iptables  -I  INPUT  -p tcp  -j  ACCEPT(-I預設是添加在第一條)

再次訪問ftp

在網站伺服器上查看規則

例:2)添加規則允許udp數據包通過,預設位於filter的第一條

Iptables -I INPUT  -p  udp -j  ACCEPT

例:3)指定順序號,添加規則允許icmp數據包通過,位於第2條

Iptables -I INPUT 2 -p icmp  -j  ACCEPT

查看規則列表:

3、以數字形式顯示規則列表,加快執行速度

Iptables -n  -L  INPUT  (-n  -L  可簡寫為-nL)

4、刪除,清空規則

1)若要刪除filter表INPUT鏈中的第三條規則,執行:

Iptables -D  INPUT 3

2)清空指定鏈或表中的所有防火牆規則,使用-F

Iptables -F  INPUT

3)清空filter表,nat表,mangle表

Iptables   -F

Iptables   -t   nat   -F

Iptables   -t   mangle  -F

5、設置預設策略:當找不到任何一條能夠匹配數據包規則時,則執行預設策略

例如1)將filter表中FORWARD鏈的預設策略設置為丟棄,OUTPUT鏈的預設策略設置為允許(預設策略不參與規則的順序編排,因此在前後並無區別。)

二、規則的匹配條件

對於同一條防火牆規則,可以指定多個匹配條件,這些條件必須都滿足規則才能生效。

1、通用匹配:分為三種類型,協議匹配,地址匹配,網路介面匹配。

1)協議匹配

如果在網關伺服器上開啟防火牆,那麼internet測試機是不能訪問網站伺服器的。

查看網關伺服器的FORWARD鏈,發現只有一條拒絕all。

如果想允許路由轉發,執行下麵的命令:

iptables -I  FORWARD  -j  ACCEPT,然後在internet測試機上可以訪問網站伺服器。

然後如果想丟棄通過icmp協議訪問防火牆本機的數據包,允許轉發經過防火牆的除icmp協議之外的數據包,可以執行:

Iptables -I  INPUT  -p  icmp -j  DROP

Iptables -A  FORWARD  !  -p  icmp -j  ACCEPT

 

執行之前先在internet測試機上ping網關伺服器的172.16.16.254和192.168.1.5都是可以ping通的。執行完之後就不能ping通了,但是依然能夠訪問網站伺服器的ftp。

先在internet測試機上ping,可以ping通

然後在網關伺服器上執行以下命令

在internet測試機上ping192.168.1.5和172.16.16.254都不通了,但是ftp依然可以訪問。

2)地址匹配

例1)例如:拒絕轉發源地址為172.16.16.172的數據,允許轉發源地址192.168.1.0的數據包

因為172.16.16.172就是internet測試機,所以internet測試機無法ping通192.168.1.5,也不能訪問ftp

 

例2)如果檢測到來自某網段的頻繁掃描,登錄等不良的企圖,可以立即添加防火牆規則進行封鎖。

Iptables  -I  INPUT  -s 10.20.30.0/24  -j  DROP

Iptables  -I  FORWARD  -s  10.20.30.0/24  -j  DROP

3)網路介面匹配

例如:若要丟棄從外網介面訪問防火牆本機且源地址為私有地址的數據包,執行以下操作:

首先:在172.16.16.172上ping172.16.16.254,使之可以ping通

然後執行以下命令:

再此在172.16.16.172上ping172.16.16.254,無法ping通,因為外網介面是eth1

 

2、隱含匹配:以指定的協議匹配作為前提條件,相當於子條件。

1)埠匹配

例如:允許網段192.168.1.0/24轉發dns查詢數據包。

首先在網站伺服器上開啟dns服務

vim  /var/named/chroot/var/named/google.com.zone

為了實驗效果,先在網關伺服器上執行以下命令,阻止轉發

Iptables -I  FORWARD  -j  REJECT

然後在internet測試機上執行nslookup,不能解析

接下來在網關伺服器上執行隱含匹配,允許為172.16.16.0網段轉發dns查詢包

再次在internet測試機上測試解析

2)ICMP類型匹配

若要禁止從其他主機ping本機,但是允許本機ping其他主機,可以執行以下操作

首先為了實驗測試方便,在網關伺服器上執行:(執行之前把其它的規則都刪掉,關閉防火牆即可編寫規則後會自動打開)

nternet測試機和網站伺服器之間可以互相ping通,然後執行:

如果實驗不通,把上面的最後一條改為iptables -A INPUT -p icmp-j DROP

然後測試:

3、顯示匹配

必須調用相應的模塊,然後方可設置匹配條件

1)多埠匹配

例如:允許網站伺服器本機開放25、80、110、143埠

2)ip範圍匹配

例如:禁止轉發源地址位於192.168.4.21與192.168.4.28之間的tcp數據包。

3)mac地址匹配

例如:禁止以下mac地址的主機訪問網站伺服器的任何應用。

4)狀態匹配

例如:禁止轉發與正常tcp連接無關的非syn請求數據包(如偽造的網路攻擊數據包)。

再例如:開放本機的web服務80埠,但對發給本機的tcp應答數據包予以放行,其他入站數據包均丟棄,對應的入站規則如下:

以上就時iptables防火牆規則的基本應用,下麵時上機實驗部分:

三、上機實驗

1、實驗環境和上面的一樣

網站伺服器ip地址是192.168.1.5,網關伺服器的內網地址是eth0:192.168.1.254,外網地址是eth1:172.16.16.254,internter測試機是172.16.16.172。實現三台系統之間可以互相ping通。

2、為網站伺服器編寫入站規則

(1)本例中所有規則均在filter表的INPUT鏈內添加,預設策略設置為DROP。

(2)使用“-p icmp ! --icmp-type 8 ”的條件匹配非ICMP請求的數據包。

(3)使用“-p tcp --dport 80”的條件匹配對TCP 80埠的訪問。

(4)使用“-p tcp -m state --stateESTABLISHED,RELATED”匹配TCP響應數據包。

 

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -A INPUT -p icmp !--icmp-type 8 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp--dport 80 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp -mstate --state ESTABLISHED,RELATED -j ACCEPT

 

(5)測試入站控制效果:從其他主機可以訪問本機中的Web服務,但不能訪問其他任何服務(如FTP、DNS);從本機可以ping通其他主機,但其他主機無法ping通本機。

 

[root@localhost ~]# iptables -nL INPUT

Chain INPUT (policy ACCEPT)

target   prot opt source           destination

ACCEPT   icmp --  0.0.0.0/0         0.0.0.0/0    icmp !type 8

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    tcp dpt:80

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    state RELATED,ESTABLISHED

…… //其他測試過程略

 

3、為網關伺服器編寫轉發規則

(1)本例中所有規則均在filter表的FORWARD鏈內添加,預設策略設置為DROP。

(2)針對TCP協議的80、20、21、25、110、143埠,以及UDP協議的53埠,分別為從區域網訪問Internet、從Internet響應區域網請求的過程編寫轉發規則。

 

[root@localhost ~]# iptables -P FORWARD DROP

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p tcp -m multiport --dport 20,21,

80,25,110,143 -o eth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -i eth1-m state --state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p udp --dport 53 -oeth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -p udp--sport 53 -i eth1-j ACCEPT

 

(3)執行DNS查詢,獲知站點web.qq.com、w.qq.com、im.qq.com當前所用的IP地址包括:112.90.141.88、112.90.141.163、112.90.141.164、58.251.149.159、58.251.60.202、123.138.238.100、123.138.238.101。然後依次針對這些IP地址編寫轉發規則,禁止到TCP協議的80、443埠的訪問。

 

[root@localhost ~]# vi /opt/black_ip.txt            //編寫封禁地址列表

112.90.141.88

112.90.141.163

112.90.141.164

58.251.149.159

58.251.60.202

123.138.238.100

123.138.238.101

[root@localhost ~]# for i in `cat/opt/black_ip.txt`; do iptables -I FORWARD -d$i -p tcp -m multiport --dport 80,443 -j DROP ; done  //讀取IP地址以插入規則

 

(4)測試轉發控制效果:從區域網中的主機無法訪問Internet中的web.qq.com等被封站點,但能夠訪問其他Web站點,也能夠訪問DNS、FTP等網路服務。

 

[root@localhost ~]# iptables -nL FORWARD

Chain FORWARD (policy DROP)

target  prot opt source        destination

DROP    tcp  --  0.0.0.0/0     123.138.238.101     multiportdports 80,443

DROP   tcp  --  0.0.0.0/0     123.138.238.100     multiport dports80,443

DROP   tcp  --  0.0.0.0/0    58.251.60.202       multiport dports80,443

DROP    tcp  --  0.0.0.0/0   58.251.149.159      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.164      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.163      multiport dports80,443

DROP   tcp  --  0.0.0.0/0     112.90.141.88       multiport dports

 

文章參考微信公眾號:L寶寶聊IT


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • qMISPlat V2.1版重點增加數據統計、表單許可權、流程表單許可權、流程表單數據初始化等方面的功能,並於2018-7-8號正式發佈。新版特性如下: 一、平臺整體遷移到.net core 2.1 二、增加全新數據統計版塊 1、以eCharts為基礎,支持通過編寫SQL語句配置多系列餅圖、柱狀圖和折線 ...
  • 1. 前言 .NET發行至今已經過了十四個年頭。隨著版本的不斷迭代更新,.NET在Windows平臺上的表現也是越來越好,可以說Windows平臺上所有的應用類型.NET幾乎都能完成。 只是成也Windows,敗也Windows,這十四年來,除了部分“民間”版本,.NET一直沒能在官方支持下擺脫Wi ...
  • 個人見解,歡迎交流,不喜勿噴。 微信小程式相比於微信公眾號的開發,區別在於微信小程式只請求第三方的數據,整個界面的交互(view)還是在微信小程式上實現,而微信公眾號的開發,是直接請求第三方的web界面。所以說微信小程式更輕量級,用來做一些餐飲店線上點單,小小的網上商城什麼的,還是很方便的,不過有一 ...
  • Asp.Net Core中使用Swagger,你不得不踩的坑 ...
  • 為了便於大家學習測試netcore,我們計劃提供1~3台公網Linux伺服器(CentOS/Ubuntu),1vCPU+1G記憶體+100Mbps,為期1年,每周重置系統修改一次密碼 ...
  • 一. 聲明 該節主要介紹SignalR的一些理論知識,代碼量很小,在後續章節編寫中,會不斷回來更新該節,完善該節的介紹;待該系列結束時,該節會和目錄章節合併。 下麵的理論介紹相對枯燥,但對於後面的理解有一定意義,不感興趣的朋友可以右上角離開了,從下一節開始,正式開始擼代碼。 原計劃三天更新一篇,結果 ...
  • 轉自:https://www.cnblogs.com/qianyuliang/p/6501531.html postconf -n #別名資料庫(postalias/newaliases 命令生成) alias_database = hash:/etc/postfix/aliases #別名錶,列出 ...
  • 沒錯,又是我,這期是講解在電腦上如何安裝雙系統,雙系統我想大家都知道是什麼回事吧?就是說一臺電腦里具備兩個系統,但是只能運行其中一種系統,若想運行另一種系統,首先把現在運行的系統關閉後重啟,然後選擇進入到另外一個系統,但是兩者的本地磁碟是通用的,但是必須是文件系統格式相同才行,否則如windows與 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...