1. 程式人生 > >校園網&openwrt記(九)防火牆

校園網&openwrt記(九)防火牆

  弄PPTP VPN的時候,接觸了一下openwrt的防火牆工具iptables。後來查了一下資料,發現這個iptables很是有趣,如果詳細地新增各種規則(rule),那將可以構造一個強大的防火牆。這裡簡單記錄一下iptables的一些基礎。

  netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

  iptables內建了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網路地址轉換,包重構(修改)和資料跟蹤處理。常處理的是filter表、nat表、mangle表。每個表下都有鏈,鏈其實是資料包傳播的路徑,每一條鏈包含一條或數條規則,資料包進入某一條鏈時會逐一檢查是否滿足,若滿足就會按那一條規則進行處理,否則繼續檢查,檢查完畢後,如果不滿足任何一條規則,則會跳出這一條鏈進行上一層的檢查,最終直到正確匹配或找不到相應規則而使用預設策略(policy)為止。預設的,filter表有INPUT鏈、FORWARD鏈、OUTPUT鏈;nat表有PREROUTING鏈、OUTPUT鏈、POSTROUTING鏈;mangle表有PREROUTING鏈、INPUT鏈、FORWARD鏈、OUTPUT鏈、POSTROUTING鏈。

  • PREROUTING鏈處理路由判斷前的包規則匹配
  • INPUT鏈處理進入本機的包規則匹配
  • FORWARD鏈處理需要轉發的包規則匹配
  • OUTPUT鏈處理流出本機的包規則匹配
  • POSTROUTING鏈處理路由判斷後的規則匹配

    資料包的流向如下(鳥哥的圖):
    資料包流向
      黑色的線表示的是以本機為目的地進入本機的資料包的流向,藍色的線表示的是以本機為源頭流出本機的資料包的流向,紅色的線表示的是需要本機幫忙轉發的資料包的流向。它們的過程如下:
      一、以本機為目的地進入本機的資料包:
      1.資料包到達防火牆,先進入mangle表的PREROUTING鏈,修改包的一些特性,如修改TOS,對包進行mark等
      2.進入nat的PREROUTING鏈,用來修改目的地址,即DNAT
      3.接著進入路由判斷,判斷是發往本機,還是要本機幫忙轉發的
      4.判斷為發往本機後進入mangle表的INPUT鏈,這裡是在路由之後發往本機應用程式之前修改包的一些特性
      5.進入filter表的INPUT鏈,用來過濾所有要進入本機的包,可以通過的才會最終進入本機的應用程式。
      二、以本機為源頭流出本機的資料包:


      1.本地應用程式向外傳送資料包,首先先進行路由判斷,決定輸出的路徑
      2.然後進入mangle表的OUTPUT鏈,修改資料包的一些特性
      3.進入nat表的OUTPUT鏈,這裡對送出去的包進行DNAT操作,修改目的地
      4.進入filter的OUTPUT鏈,對發出去的包進行過濾操作
      5.進入mangle表的POSTROUTING鏈,在包被髮送出去之前修改包的一些特性
      6.進入nat表的POSTROUTING鏈,這裡進行的是SNAT(或MASQUERADE)操作,最後資料包傳送出去。
      三、需要本機幫忙轉發的資料包
      1.資料包到達防火牆,先進入mangle表的PREROUTING鏈,修改包的一些特性,如修改TOS,對包進行mark等
      2.進入nat的PREROUTING鏈,用來修改目的地址,即DNAT
      3.接著進入路由判斷,判斷是發往本機,還是要本機幫忙轉發的
      4.進入mangle表的FORWARD鏈,修改包的一些特性
      5.進入filter表的FORWARD鏈,只有需要轉發的包才會走到這裡,並且針對這些包的所有過濾也在這裡進行。需要注意的是,所有要轉發的包都要經過這裡,不管是外網到內網的還是內網到外網的。
      5.進入mangle表的POSTROUTING鏈,在包被髮送出去之前修改包的一些特性
      6.進入nat表的POSTROUTING鏈,這裡進行的是SNAT(或MASQUERADE)操作,修改源地址,用路由器共享上網靠的就是這條鏈。最後資料包傳送出去。

      iptables的命令比較複雜,這裡就不再贅述,主要記錄自己一下openwrt對防火牆的一些見解。openwrt預設將防火牆劃分為兩個域:wan域和lan域,每個網路介面劃分到特定的域中,如網絡卡eth0接的是寬頻網線,而網絡卡eth1內建交換機晶片可以接4條網線供客戶機連線,那麼eth0就屬於wan域,eth1就屬於lan域,lan域的資料需要由wan域幫忙轉發,才能夠共享上網,而作為熱點的無線網絡卡如wlan0或wlan1自然也屬於lan域了。
      在控制檯輸入iptables-save,觀察其輸入後可以發現,openwrt使用了大量自定義的鏈來分層規劃規則。
      一、openwrt在啟動防火牆時,讀取了uci config檔案後,一開始就將表的預設鏈的動作交給了代理鏈。例如filter表中,就有如下三條:

-A INPUT -j delegate_input
-A FORWARD -j delegate_forward
-A OUTPUT -j delegate_output

  也就是說,filter表的三個鏈都只有一個動作,那就是全權丟給代理鏈。
  二、之後代理鏈會根據介面所在的域不同而分配不同的域代理鏈,例如對於delegate_input代理鏈,則有如下:

-A delegate_input -i lo -j ACCEPT
-A delegate_input -m comment --comment "user chain for input" -j input_rule
-A delegate_input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A delegate_input -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
-A delegate_input -i br-lan -j zone_lan_input
-A delegate_input -i eth0 -j zone_wan_input
-A delegate_input -i pppoe-pppoe -j zone_wan_input

  對於delegate_input代理鏈,首先對於進入迴環介面的資料包一定是ACCEPT,接著就進入一個自定義的使用者鏈input_rule,再接著就根據狀態如果是已經建立好的連結或類似於FTP協議那樣有相關的資料包就允許通過,然後就是syn_flood防禦,最後根據各個網路介面所在的域,再次將他們導向各自的域的相應代理鏈,如br-lan介面屬於lan域,而且現在的頂層父鏈是預設的INPUT鏈,所以就將這類包導向zone_lan_input代理鏈來處理。
  三、到達了域的代理鏈,就開始進行各種的處理,例如zone_wan_input,有如下:

-A zone_wan_input -m comment --comment "user chain for input" -j input_wan_rule
-A zone_wan_input -p udp -m udp --dport 68 -m comment --comment Allow-DHCP-Renew -j ACCEPT
-A zone_wan_input -p icmp -m icmp --icmp-type 8 -m comment --comment Allow-Ping -j ACCEPT
-A zone_wan_input -p tcp -m tcp --dport 1723 -m comment --comment "@rule[9]" -j ACCEPT
-A zone_wan_input -p udp -m udp --dport 1723 -m comment --comment "@rule[9]" -j ACCEPT
-A zone_wan_input -m conntrack --ctstate DNAT -m comment --comment "Accept port redirections" -j ACCEPT
-A zone_wan_input -j zone_wan_src_REJECT

  這裡就算是預設的最終處理了,首先還是先導向一個名為input_wan_rule的自定義鏈,讓使用者新增特殊的處理,然後就是一些服務所需要的一些允許特定資料包通過的規則,因為路由器與外界網路通訊是靠wan域的,wan域不能輕易讓資料包進入路由器,所以wan域的INPUT的預設策略是REJECT,所以這裡新增的都是一些需要通過的包的規則。最後的這個zone_wan_src_REJECT鏈,其實就有一條規則,那就是REJECT(對應預設策略)。
  openwrt的防火牆大概就是分為以上三個層。我們在手動新增一些自定義規則時可以用config檔案來新增,當然也可以使用iptables命令按需要在以上這些代理鏈中新增,個人認為後者比較好,畢竟config要寫起來沒有iptables命令直觀。

相關推薦

校園網&openwrt防火牆

  弄PPTP VPN的時候,接觸了一下openwrt的防火牆工具iptables。後來查了一下資料,發現這個iptables很是有趣,如果詳細地新增各種規則(rule),那將可以構造一個強大的防火牆。這裡簡單記錄一下iptables的一些基礎。   n

校園網&openwrt作為啟動項

  由於對linux不是很熟,剛開始的時候就想到使用最簡單的rc.local啟動項和crontab來完成這個應用。寫好獲取許可權指令碼,然後在rc.local中寫入它使它在其他服務項啟動完後自己啟動。並且寫好網路檢測指令碼,在crontab中新增,使其每分鐘執行

校園網&openwrt斷網重連,crontab,靜態路由

  學校的pppoe伺服器似乎不希望我們pppoe撥號一直線上,所以有時候會自己斷線,或許一天,或許兩天,有時候十幾天才會斷。但是斷線後,需要重新發送獲取許可權的udp包並重新撥號才可以上網,所以為了讓路由器全部自己處理好,省得我們重新啟動路由器,我們可以簡單地

校園網&openwrt十二多線多播與mwan3

  搞多線多撥的時候,手上剛好有一個8M和一個22M的移動寬頻,8M的準備不用了,但是浪費可是很罪惡的,於是想到多線多播,並使用mwan3來負載均衡。其實mwan3就是是用iptables和iproute2協同作用達到負載均衡的。iptables主要是打mark

捕牛1503解題報告bfs

字節數 first 檢測 表示 所有結點 sca c++ fin ++ 解題思路:每到一個坐標點都有三種走法,每個點只走一次,直到第一次發現牛的坐標為止。用廣度優先搜索(Breadth First Search)(bfs) 代碼實現:定義一個標記結點狀態的數組、一個記錄

Hibernate 的復合主鍵

bean blank () 學生 lba nts 多個 try null 一、什麽是復合主鍵? 一張表的主鍵是由多個字段組成,這個主鍵就被稱為復合主鍵。 主鍵是唯一確定某條記錄的字段,比如公民的身份證號就是一個主鍵,因為由身份證號這個主鍵就可以確定 某個公民。 有

團隊沖刺階段

http com blog 進行 ges 任務 基本 頁面 階段 站立會議: 任務進度:   老師網頁頁面基本敲定。頁面優化中。   學生端app在編寫菜單欄,代碼進行中。 任務面板: 燃盡圖:    團隊沖刺階段(九)

學習MVC之租房網站-房源顯示和搜索

下使用 server epic 位置 edit 電商 給定 針對 富文本 在上一篇<學習MVC之租房網站(八)- 前臺註冊和登錄>完成了前臺用戶的註冊、登錄、重置密碼等功能,然後要實現與業務相關的功能,包括房源的顯示、檢索等。 一 房源顯示 房源顯示內容較多

菜鳥成長十三----- 草草啟程,半途終了?

下一步 後臺 十分鐘 一道 一是 算法題 ceo 奮鬥 同時   來北京兩個多月了,也在現在這家遊戲公司上了一個多月的班了,對於目前自己這狀態真的是撞墻的心都有了。我不知道我到底是怎麽了,一念清醒九念操蛋,心裏面清楚的知道自己應該做什麽,不應該做什麽,但是就是怎麽也控制不住

9.9遞歸和動態規劃——N皇後

其它 ace req case create lac any urn distance /** * 功能:打印八皇後在8*8棋盤上的各種擺法。當中每一個皇後都不同行、不同列,也不在對角線上。 * 這裏的“對角線”指的是全部的對角線,不僅僅是平分整個棋盤的那兩

Linux劄1

工作目錄 ini 生成 工作 root 壓縮文件 lin dev conf tar 命令參數:   -j 代表使用‘bzip2’程序進行文件的壓縮   -J代表調用“xz”程序進行文件的壓縮   -z 用gzip來壓縮/解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原

OGG運維優化腳本-查詢維護類--進程重復表檢查

ogg oracle goldengate 腳本 數據同步 shell 路徑:$HOME/ggscript/ggrepeat功能:該腳本為處理目標端因為源端重復配置源端表,導致目標端數據重復的問題而設計。可以針對進程檢查重復配置的表名,並羅列具體信息和所在文件行數可以配合note快速註

Loadrunner之https協議錄制回放報錯如何解決?

文件 error 有一個 實現 run img 路徑 命令 tin 一、錄制中遇到報錯27778的問題(如下圖1),即關於錄制的鏈接為https開頭的問題,分兩個步驟解決,如下: 圖1 https訪問報錯解決步驟如下: 1.修改Vuser-->Run-time Se

【OpenGL】Shader實例分析- AngryBots中的主角受傷特效

spa 2.7 imp ttext pro tint shader 作用 負責 轉發請保持地址:http://blog.csdn.net/stalendp/article/details/40859441 AngryBots是Unity官方的一個非常棒的樣例。非常有研究

Nginx-- Nginx實際使用配置

cal ddr conn access 增加 依然 worker ref tom 1.由於在nginx中需要配置很多東西,就會使得nginx.conf配置文件過於臃腫,所以我們會將配置文件合理的切分。大體的配置依然在nginx.conf中,其他的配置會放在etc下面的目錄中

微信小程序開發教程視圖層——.wxss詳解

hone mnt 而且 padding 移動 圖層 組成 特性 -1   WXSS是一套樣式語言,用於描述WXML的組件樣式。   官方文檔表示,WXSS的選擇器目前支持(“.class”、“#id”、“elemnt”、“element,element”、“::after”

TypeScript學習筆記:裝飾器Decorators

標註 時裝 als cal () 操作 enume 筆記 文檔 裝飾器簡介 裝飾器(Decorators)為我們在類的聲明及成員上通過元編程語法添加標註提供了一種方式。 需要註意的是:裝飾器是一項實驗性特性,在未來的版本中可能會發生改變。 若要啟用實驗性的裝飾器特性

webots自學筆記彈簧與阻尼添加

fec ada -1 pri val src 分享 cit 文章 原創文章,來自“博客園,_阿龍clliu” http://www.cnblogs.com/clliu/,轉載請註明原文章出處。 先說明一下,暑假提前到研究生老

《構建之法》

播放 cli 發展歷史 模式 ati over 優勢 出現 walk 第16 章 IT行業的創新(一) 一、創新的迷失 迷失之一:靈光一閃現,偉大的創新舊緊隨其後   很多人聽到發明創造, 都會想起故事書裏的聰明人忽然靈光閃現的故事,靈光閃現, 頓悟這個詞叫“Epip

Centos之常見目錄作用介紹

wal har g++ init tco 文檔 http 臨時 哪些 我們先切換到系統根目錄 / 看看根目錄下有哪些目錄 [[email protected]/* */ ~]# cd / [[email protected]/* */ /]# ls