ubuntu系統關閉防火牆命令「ubuntu防火牆設置」

簡單說,firewalld是新的防火牆管理工具,iptables是過去的管理工具,兩者都是linux提供給用戶的操作界面,真正的執行者是netfilter.

Linux中的各種防火牆及相互區別

netfilter

Linux 2.4開啟的防火牆框架,該框架既簡潔又靈活,可實現安全策略應用中的許多功能,如數據包過濾、數據包處理、地址偽裝、透明代理、動態網絡地址轉換(Network Address Translation,NAT),以及基於用戶及媒體訪問控制(Media Access Control,MAC)地址的過濾和基於狀態的過濾、包速率限制等。iptables/Netfilter的這些規則可以通過靈活組合,形成非常多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想。

netfilter是Linux操作系統核心層內部的一個數據包處理模塊,它具有如下功能:

  • 網絡地址轉換(NAT)
  • 數據包內容修改(mangle)
  • 以及數據包過濾的防火牆功能(filter)
  • 連接跟蹤模塊(conntrack)

netfilter在Linux系統中的5個釣魚台(或是說5個鉤子):

netfilter為多種網絡協議(IPv4、IPv6、ARP等)各提供了一套鉤子函數(HOOK)。

在IPv4中定義了5個鉤子函數(如上圖所示),這些鉤子函數在數據包流經協議棧的5個關鍵點被調用。這就像有5個釣魚台,在每個釣魚台放了一個魚鉤(HOOK),把經過的數據包釣上來,然後根據自定義的規則,來決定數據包的命運:

可以原封不動的放回IPv4協議,繼續向上層遞交;可以進行修改,再放回IPv4協議;也可以直接丟棄。

netfilter主要採用連接跟蹤(Connection Tracking)、包過濾(Packet Filtering)、地址轉換(NAT)、包處理(Packet Mangling)四種技術。

Linux中的各種防火牆及相互區別

NF_IP_PRE_ROUTING

數據報在進入路由代碼被處理之前,數據報在IP數據報接收函數ip_rcv()(位於net/ipv4/ip_input.c,Line379)的最後,也就是在傳入的數據報被處理之前經過這個HOOK。在ip_rcv()中掛接這個HOOK之前,進行的是一些與類型、長度、版本有關的檢查。經過這個HOOK處理之後,數據報進入ip_rcv_finish()(位於net/ipv4/ip_input.c,Line306),進行查路由表的工作,並判斷該數據報是發給本地機器還是進行轉發。 在這個HOOK上主要是對數據報作報頭檢測處理,以捕獲異常情況。

  • 涉及功能(優先級順序):conntrack、mangle、DNAT

NF_IP_LOCAL_IN

目的地為本地主機的數據報在IP數據報本地投遞函數ip_local_deliver()(位於net/ipv4/ip_input.c,Line290)的最後經過這個HOOK。經過這個HOOK處理之後,數據報進入ip_local_deliver_finish()(位於net/ipv4/ip_input.c,Line219)。 這樣,iptables模塊就可以利用這個HOOK對應的INPUT規則鏈表來對數據報進行規則匹配的篩選了。防火牆一般建立在這個HOOK上。

  • 涉及功能:mangle、filter、SNAT、conntrack

NF_IP_FORWARD

目的地非本地主機的數據報,包括被NAT修改過地址的數據報,都要在IP數據報轉發函數ip_forward()(位於net/ipv4/ip_forward.c,Line73)的最後經過這個HOOK。 經過這個HOOK處理之後,數據報進入ip_forward_finish()(位於net/ipv4/ip_forward.c,Line44)。 另外,在net/ipv4/ipmr.c中的ipmr_queue_xmit()函數(Line1119)最後也會經過這個HOOK。(ipmr為多播相關,估計是在需要通過路由轉發多播數據時的處理)。 這樣,IPTables模塊就可以利用這個HOOK對應的FORWARD規則鏈表來對數據報進行規則匹配的篩選了。

  • 涉及功能:mangle、filter

NF_IP_LOCAL_OUT

本地主機發出的數據報在IP數據報構建/發送函數ip_queue_xmit()(位於net/ipv4/ip_output.c,Line339)、以及ip_build_and_send_pkt()(位於net/ipv4/ip_output.c,Line122)的最後經過這個HOOK。(在數據報處理中,前者最為常用,後者用於那些不傳輸有效數據的SYN/ACK包)。經過這個HOOK處理後,數據報進入ip_queue_xmit2()(位於net/ipv4/ip_output.c,Line281)。另外,在ip_build_xmit_slow()(位於net/ipv4/ip_output.c,Line429)和ip_build_xmit()(位於net/ipv4/ip_output.c,Line638)中用於進行錯誤檢測;在igmp_send_report()(位於net/ipv4/igmp.c,Line195)的最後也經過了這個HOOK,進行多播時相關的處理。這樣,iptables模塊就可以利用這個HOOK對應的OUTPUT規則鏈表來對數據報進行規則匹配的篩選了。

  • 涉及功能:conntrack、mangle、DNAT、filter

NF_IP_POST_ROUTING

所有數據報,包括源地址為本地主機和非本地主機的,在通過網絡設備離開本地主機之前,在IP數據報發送函數ip_finish_output()(位於net/ipv4/ip_output.c,Line184)的最後經過這個HOOK。 經過這個HOOK處理後,數據報進入ip_finish_output2()(位於net/ipv4/ip_output.c,Line160)另外,在函數ip_mc_output()(位於net/ipv4/ip_output.c,Line195)中在克隆新的網絡緩存skb時,也經過了這個HOOK進行處理。

  • 涉及功能:mangle、SNAT、conntrack

其中,入口為net_rx_action()(位於net/core/dev.c,Line1602),作用是將數據報一個個地從CPU的輸入隊列中拿出,然後傳遞給協議處理例程。

出口為dev_queue_xmit()(位於net/core/dev.c,Line1035),這個函數被高層協議的實例使用,以數據結構struct sk_buff *skb的形式在網絡設備上發送數據報。


iptables

iptables提供了管理員與netfilter的交互接口,iptables是按照規則來辦事的,所謂規則其實就是網絡管理員預定義的條件,規則一般的定義為”如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。

四表五鏈

iptables的規則組成,又被稱為四表五鏈

5種默認規則鏈

防火牆的作用就在於對經過的報文匹配”規則”,然後執行對應的”動作”。所以,當報文經過這些關卡(HOOK—或者說是釣魚台)的時候,則必須匹配這個關卡上的規則,但是,這個關卡上可能不止有一條規則,而是有很多條規則,當我們把這些規則串到一個鏈條上的時候,就形成了”鏈”。所以,每個經過這個”關卡”的報文,都要將這條”鏈”上的所有規則匹配一遍(滿足其中條規規則,則跳出這個規則鏈匹配,否則匹配到鏈上的最後一條規則),如果有符合條件的規則,則執行規則對應的動作。

iptables涉及5種默認規則鏈,從應用時間點的角度理解這些鏈:

  • INPUT鏈:當接收到防火牆本機地址的數據包(入站)時,應用此鏈中的規則。
  • OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則。
  • FORWARD鏈:當接收到需要通過防火牆發送給其他地址的數據包(轉發)時,應用此鏈中的規則。
  • PREROUTING鏈:在對數據包作路由選擇之前,應用此鏈中的規則,如DNAT。
  • POSTROUTING鏈:在對數據包作路由選擇之後,應用此鏈中的規則,如SNAT。

iptables的四張表

我們在每個”鏈”上都放置了一串規則,但是這些規則有些很相似,比如,A類規則都是對IP或者端口的過濾,B類規則是修改報文,那麼這個時候,我們把具有相同功能的規則的集合叫做”表”。從而使不同功能的規則,我們可以放置在不同的表中進行管理,而iptables已經為我們定義了4種表,每種表對應了不同的功能,而我們定義的規則也都逃脫不了這4種功能的範圍

  • filter表

主要用於對數據包進行過濾,根據具體的規則決定是否放行該數據包(如DROP、ACCEPT、REJECT、LOG)。filter 表對應的內核模塊為iptable_filter,包含三個規則鏈:

INPUT鏈:INPUT針對那些目的地是本地的包
FORWARD鏈:FORWARD過濾所有不是本地產生的並且目的地不是本地(即本機只是負責轉發)的包
OUTPUT鏈:OUTPUT是用來過濾所有本地生成的包
  • nat表

主要用於修改數據包的IP地址、端口號等信息(網絡地址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬於一個流的包(因為包的大小限制導致數據可能會被分成多個數據包)只會經過這個表一次。如果第一個包被允許做NAT或masqueraded,那麼餘下的包都會自動地被做相同的操作,也就是說,餘下的包不會再通過這個表。表對應的內核模塊為 iptable_nat,包含三個鏈:

PREROUTING鏈:作用是在包剛剛到達防火牆時改變它的目的地址
OUTPUT鏈:改變本地產生的包的目的地址
POSTROUTING鏈:在包就要離開防火牆之前改變其源地址
  • mangle表

主要用於修改數據包的ToS(Type Of Service,服務類型)、TTL(Time To Live,生存周期)指以及為數據包設置mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由設備支持,因此應用並不廣泛。包含五個規則鏈——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

  • raw表

是自1.2.9以後版本的iptables新增的表,主要用於決定數據包是否被狀態跟蹤機制處理。在匹配數據包時,raw表的規則要優先於其他表。包含兩條規則鏈——OUTPUT、PREROUTING

iptables中數據包和4種被跟蹤連接的4種不同狀態:

  • NEW:該包想要開始一個連接(重新連接或將連接重定向)
  • RELATED:該包是屬於某個已經建立的連接所建立的新連接。例如:FTP的數據傳輸連接就是控制連接所 RELATED出來的連接。–icmp-type 0 ( ping 應答) 就是–icmp-type 8 (ping 請求)所RELATED出來的。
  • ESTABLISHED :只要發送並接到應答,一個數據連接從NEW變為ESTABLISHED,而且該狀態會繼續匹配這個連接的後續數據包。
  • INVALID:數據包不能被識別屬於哪個連接或沒有任何狀態比如內存溢出,收到不知屬於哪個連接的ICMP錯誤信息,一般應該DROP這個狀態的任何數據。

鏈和表的關係

  • PREROUTING 的規則可以存在於:raw表,mangle表,nat表。
  • INPUT 的規則可以存在於:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。
  • FORWARD 的規則可以存在於:mangle表,filter表。
  • OUTPUT 的規則可以存在於:raw表mangle表,nat表,filter表。
  • POSTROUTING 的規則可以存在於:mangle表,nat表。

規則

根據指定的匹配條件來嘗試匹配每個流經此處的報文,一旦匹配成功,則由規則後面指定的處理動作進行處理

匹配條件分為基本匹配條件與擴展匹配條件

基本匹配條件:

源地址Source IP,目標地址 Destination IP

擴展匹配條件:

除了上述的條件可以用於匹配,還有很多其他的條件可以用於匹配,這些條件泛稱為擴展條件,這些擴展條件其實也是netfilter中的一部分,只是以模塊的形式存在,如果想要使用這些條件,則需要依賴對應的擴展模塊。

源端口Source Port, 目標端口Destination Port

處理動作

處理動作在iptables中被稱為target(這樣說並不準確,我們暫且這樣稱呼),動作也可以分為基本動作和擴展動作。

此處列出一些常用的動作,之後的文章會對它們進行詳細的示例與總結:

o    ACCEPT:允許數據包通過。
o    DROP:直接丟棄數據包,不給任何回應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間才會有反應。
o    REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。
o    SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題。
o    MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。
o    DNAT:目標地址轉換。
o    REDIRECT:在本機做端口映射。
o    LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配。

ebtables

ebtables和iptables類似,都是Linux系統下網絡數據包過濾的配置工具(即功能由內核底層提供支持—netfilter)。ebtables為以太網橋防火牆,工作在數據鏈路層,制定過濾數據鏈路層的數據包。

ebtables的配置分為表、鏈和規則三級。

表是內置且固定的,共有三種: filter, nat, broute,用-t選項指定。最常用的就是filter了,所以不設-t時默認就是這個表。nat用於地址轉換,broute用於以太網橋。

鏈有內置和自定義兩種 。不同的表內置的鏈不同,這個從數據包的流程圖中就可以看出來。所謂自定義的鏈也是掛接在對應的內置鏈內的,使用-j讓其跳轉到新的鏈中。

  • 規則

每個鏈中有一系列規則,每個規則定義了一些過濾選項。每個數據包都會匹配這些項,一但匹配成功就會執行對應的動作。

所謂動作,就是過濾的行為了。有四種,ACCEPT,DROP,RETURN和CONTINUE,常用的就是ACCEPT和DROP。

ebtables使用規則如下:

ebtables [-t table] -[ADI] chain rule-specification [match-extensions] [watcher-extensions]
-t table :一般為filter表。
-ADI:A添加到現有鏈的末尾;D刪除規則鏈(必須指明規則鏈號);I插入新的規則鏈(必須指明規則鏈號)。
-P:規則表的默認規則的設置。可以DROP,ACCEPT,RETURN。
-F:對所有的規則表的規則鏈清空。
-L:指明規則表。可加參數,--Lc,--Ln
-p:指明使用的協議類型,ipv4,arp等可選(使用時必選)詳情見/etc/ethertypes
--ip-proto:IP包的類型,1為ICMP包,6為TCP包,17為UDP包,在/etc/protocols下有詳細說明
--ip-src:IP包的源地址
--ip-dst:IP包的目的地址
--ip-sport:IP包的源端口
--ip-dport:IP包的目的端口
-i:指明從那片網卡進入
-o:指明從那片網卡出去

查看列表

root@WIA3300-20:~# ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
 
Bridge chain: FORWARD, entries: 6, policy: ACCEPT
-i ath+ -o ath17 -j DROP
-i ath17 -o ath+ -j DROP
-i ath+ -o ath0 -j DROP
-i ath0 -o ath+ -j DROP
-i ath+ -o ath16 -j DROP
-i ath16 -o ath+ -j DROP
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

新建規則

ebtables -A FORWARD -p ipv4 -i eth0/eth1 --ip-proto (6/17) --ip-dst(目的IP)  --ip-dport(目的端口) -j DROP

新建/刪除鏈

ebtables -N <chain_name> ebtables -X <chain_name>

firewalld

防火牆守護 firewalld 服務引入了一個信任級別的概念來管理與之相關聯的連接與接口。它支持 ipv4 與 ipv6,並支持網橋,採用 firewall-cmd (CLI) 或 firewall-config (GUI) 來動態的管理 kernel netfilter 的臨時或永久的接口規則,並實時生效而無需重啟服務。

firewalld與iptables的區別:

  • firewalld使用安全域和服務的概念,而iptalbes使用鏈和規則
  • iptables服務的配置在/etc/sysconfig/iptables中存儲,而firewalld將配置存儲在/usr/lib/firewalld/和etc/firewalld/目錄下的各種XML文件中
  • 使用iptables服務中每一個單獨更改意味着清除所有舊有的規則和從/etc/sysconfig/iptables里讀取所有新的規則,而使用firewalld卻不會再創建任何新的規則,僅運行規則中的不同之處。因此,firewalld可以在運行中,改變配置而不丟失已有連接。

iptables和firewalld只能開一個

zone

·         drop: 丟棄所有進入的包,而不給出任何響應
·         block: 拒絕所有外部發起的連接,允許內部發起的連接
·         public: 允許指定的進入連接
·         external: 同上,對偽裝的進入連接,一般用於路由轉發
·         dmz: 允許受限制的進入連接
·         work: 允許受信任的計算機被限制的進入連接,類似 workgroup
·         home: 同上,類似 homegroup
·         internal: 同上,範圍針對所有互聯網用戶
·         trusted: 信任所有連接

過濾規則

·         source: 根據源地址過濾
·         interface: 根據網卡過濾
·         service: 根據服務名過濾
·         port: 根據端口過濾
·         icmp-block: icmp 報文過濾,按照 icmp 類型配置
·         masquerade: ip 地址偽裝
·         forward-port: 端口轉發
·         rule: 自定義規則

其中,過濾規則的優先級遵循如下順序

1.            source
2.            interface
3.            firewalld.conf

firewalld的三種配置方法:

firewall-config: firewall-config是圖形化工具
firewall-cmd: 命令行工具
直接編輯xml文件

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/208803.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:20
下一篇 2024-12-08 15:20

相關推薦

發表回復

登錄後才能評論