文章插圖

文章插圖
【ubuntu防火墻設置禁用端口 Ubuntu設置防火墻】簡單說,firewalld是新的防火墻管理工具,iptables是過去的管理工具,兩者都是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)四種技術 。
數據報在進入路由代碼被處理之前,數據報在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、DNATNF_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、conntrackNF_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、filterNF_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、filterNF_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文件中記錄日志信息,然后將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配 。ebtablesebtables和iptables類似,都是Linux系統下網絡數據包過濾的配置工具(即功能由內核底層提供支持—netfilter) 。ebtables為以太網橋防火墻,工作在數據鏈路層,制定過濾數據鏈路層的數據包 。
ebtables的配置分為表、鏈和規則三級 。
表
表是內置且固定的,共有三種: filter, nat, broute,用-t選項指定 。最常用的就是filter了,所以不設-t時默認就是這個表 。nat用于地址轉換,broute用于以太網橋 。
鏈
鏈有內置和自定義兩種。不同的表內置的鏈不同,這個從數據包的流程圖中就可以看出來 。所謂自定義的鏈也是掛接在對應的內置鏈內的,使用-j讓其跳轉到新的鏈中 。
規則
每個鏈中有一系列規則,每個規則定義了一些過濾選項 。每個數據包都會匹配這些項,一但匹配成功就會執行對應的動作 。
所謂動作,就是過濾的行為了 。有四種,ACCEPT,DROP,RETURN和CONTINUE,常用的就是ACCEPT和DROP 。
ebtables使用規則如下:
ebtables[-ttable]-[ADI]chainrule-specification[match-extensions][watcher-extensions]-ttable:一般為filter表 。-ADI:A添加到現有鏈的末尾;D刪除規則鏈(必須指明規則鏈號);I插入新的規則鏈(必須指明規則鏈號) 。-P:規則表的默認規則的設置 ??梢訢ROP,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:指明從那片網卡出去查看列表[email protected]:~# ebtables -LBridge table: filterBridge chain: INPUT, entries: 0, policy: ACCEPTBridge 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 DROPBridge chain: OUTPUT, entries: 0, policy: ACCEPT新建規則ebtables-AFORWARD-pipv4-ieth0/eth1--ip-proto(6/17)--ip-dst(目的IP)--ip-dport(目的端口)-jDROP新建/刪除鏈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. source2. interface3. firewalld.conffirewalld的三種配置方法:firewall-config: firewall-config是圖形化工具firewall-cmd: 命令行工具直接編輯xml文件
- iis安全配置基線 IIS安全設置
- ps旋轉畫布快捷鍵在哪設置 ps如何翻轉畫布快捷鍵
- 超微主板風扇模式 超微主板怎么設置CPU風扇
- 滾動條 隱藏 滾動條隱藏了怎么設置
- windows7怎么禁止更新 win7停止更新設置
- linux 設置系統時間函數 linux系統設置時間命令
- idea代碼縮進設置 idea代碼縮成一行
- 阿里智能無線路由器設置 阿里巴巴路由器設置
- 光貓橋接路由器設置方法 tplink橋接路由器設置方法
- win10怎么設置定時關機命令 win10怎么設置定時關機和開機
