麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > CentOS > 正文

CentOS學習筆記--防火墻iptables

2024-06-28 13:22:44
字體:
來源:轉載
供稿:網友
CentOS學習筆記--防火墻iptableslinux 的防火墻:iptables

iptables是封包過濾軟件,Linux內核2.6以上都是這款軟件。本節節選自 鳥哥的 Linux 私房菜 -- 服務器架設篇  第九章、防火墻與 NAT 服務器

封包進入流程:規則順序的重要性!

假設你的 Linux 主機提供了 WWW 的服務,那么自然就要針對 port 80 來啟用通過的封包規則,但是你發現 IP 來源為 192.168.100.100 老是惡意的嘗試入侵你的系統,所以你想要將該 IP 拒絕往來,最后,所有的非 WWW 的封包都給他丟棄,就這三個規則來說,你要如何設定防火墻檢驗順序呢?

  1. Rule 1 先抵擋 192.168.100.100 ;
  2. Rule 2 再讓要求 WWW 服務的封包通過;
  3. Rule 3 將所有的封包丟棄。

這樣的排列順序就能符合你的需求,不過,萬一你的順序排錯了,變成:

  1. Rule 1 先讓要求 WWW 服務的封包通過;
  2. Rule 2 再抵擋 192.168.100.100 ;
  3. Rule 3 將所有的封包丟棄。

此時,那個 192.168.100.100 『可以使用你的 WWW 服務』喔!只要他對你的主機送出 WWW 要求封包,就可以使用你的 WWW 功能了,因為你的規則順序定義第一條就會讓他通過,而不去考慮第二條規則!這樣可以理解規則順序的意義了嗎! 現在再來想一想,如果 Rule 1 變成了『將所有的封包丟棄』,Rule 2 才設定『WWW 服務封包通過』,請問,我的 client 可以使用我的 WWW 服務嗎?呵呵!答案是『否~』想通了嗎?

iptables_01

iptables 的表格 (table) 與鏈 (chain)

什么是鏈呢?這得由 iptables 的名稱說起。為什么稱為 ip"tables" 呢? 因為這個防火墻軟件里面有多個表格 (table) ,每個表格都定義出自己的默認政策與規則, 且每個表格的用途都不相同。我們可以使用底下這張圖來稍微了解一下:

iptables_02

Linux 的 iptables 至少就有三個表格,包括管理本機進出的 filter 、管理后端主機 (防火墻內部的其他計算機) 的 nat 、管理特殊旗標使用的 mangle (較少使用) 。更有甚者,我們還可以自定義額外的鏈呢! 真是很神奇吧!每個表格與其中鏈的用途分別是這樣的:

  • filter (過濾器):主要跟進入 Linux 本機的封包有關,這個是預設的 table 喔!
    • INPUT:主要與想要進入我們 Linux 本機的封包有關;
    • OUTPUT:主要與我們 Linux 本機所要送出的封包有關;
    • FORWARD:這個咚咚與 Linux 本機比較沒有關系, 他可以『轉遞封包』到后端的計算機中,與下列 nat table 相關性較高。
  • nat (地址轉換):是 Network Address Translation 的縮寫, 這個表格主要在進行來源與目的之 IP 或 port 的轉換,與 Linux 本機較無關,主要與 Linux 主機后的局域網絡內計算機較有相關。
    • PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
    • POSTROUTING:在進行路由判斷之后所要進行的規則(SNAT/MASQUERADE)
    • OUTPUT:與發送出去的封包有關
  • mangle (破壞者):這個表格主要是與特殊的封包的路由旗標有關, 早期僅有 PREROUTING 及 OUTPUT 鏈,不過從 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 鏈。 由于這個表格與特殊旗標相關性較高,所以像咱們這種單純的環境當中,較少使用 mangle 這個表格。

所以說,如果你的 Linux 是作為 www 服務,那么要開放客戶端對你的 www 要求有響應,就得要處理 filter 的 INPUT 鏈; 而如果你的 Linux 是作為局域網絡的路由器,那么就得要分析 nat 的各個鏈以及 filter 的 FORWARD 鏈才行。也就是說, 其實各個表格的鏈結之間是有關系的!簡單的關系可以由下圖這么看:

iptables_03

上面的圖示很復雜喔!不過基本上你依舊可以看出來,我們的 iptables 可以控制三種封包的流向:

  • 封包進入 Linux 主機使用資源 (路徑 A): 在路由判斷后確定是向 Linux 主機要求數據的封包,主要就會透過 filter 的 INPUT 鏈來進行控管;
  • 封包經由 Linux 主機的轉遞,沒有使用主機資源,而是向后端主機流動 (路徑 B): 在路由判斷之前進行封包表頭的修訂作業后,發現到封包主要是要透過防火墻而去后端,此時封包就會透過路徑 B 來跑動。 也就是說,該封包的目標并非我們的 Linux 本機。主要經過的鏈是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。
  • 封包由 Linux 本機發送出去 (路徑 C): 例如響應客戶端的要求,或者是 Linux 本機主動送出的封包,都是透過路徑 C 來跑的。先是透過路由判斷, 決定了輸出的路徑后,再透過 filter 的 OUTPUT 鏈來傳送的!當然,最終還是會經過 nat 的 POSTROUTING 鏈。

由于 mangle 這個表格很少被使用,如果將上圖的 mangle 拿掉的話,那就容易看的多了:

iptables_04

你就可以更輕松的了解到,事實上與本機最有關的其實是 filter 這個表格內的 INPUT 與 OUTPUT 這兩條鏈,如果你的 iptables 只是用來保護 Linux 主機本身的話,那 nat 的規則根本就不需要理他,直接設定為開放即可。

本機的 iptables 語法

當你安裝好 Linux 之后,系統應該會主動的幫你啟動一個陽春的防火墻規則才是, 不過這個陽春防火墻可能不是我們想要的模式,因此我們需要額外進行一些修訂的行為。

規則的觀察與清除

如果你在安裝的時候選擇沒有防火墻的話,那么 iptables 在一開始的時候應該是沒有規則的,不過, 可能因為你在安裝的時候就有選擇系統自動幫你建立防火墻機制,那系統就會有默認的防火墻規則了! 無論如何,我們先來看看目前本機的防火墻規則是如何吧!

[root@www ~]# iptables [-t tables] [-L] [-nv]選項與參數:-t :后面接 table ,例如 nat 或 filter ,若省略此項目,則使用默認的 filter-L :列出目前的 table 的規則-n :不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!-v :列出更多的信息,包括通過該規則的封包總位數、相關的網絡接口等范例:列出 filter table 三條鏈的規則[root@www ~]# iptables -L -nChain INPUT (policy ACCEPT)   <==針對 INPUT 鏈,且預設政策為可接受target  prot opt source     destination <==說明欄ACCEPT  all  --  0.0.0.0/0  0.0.0.0/0   state RELATED,ESTABLISHED <==第 1 條規則ACCEPT  icmp --  0.0.0.0/0  0.0.0.0/0                             <==第 2 條規則ACCEPT  all  --  0.0.0.0/0  0.0.0.0/0                             <==第 3 條規則ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:22      <==以下類推REJECT  all  --  0.0.0.0/0  0.0.0.0/0   reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)  <==針對 FORWARD 鏈,且預設政策為可接受target  prot opt source     destinationREJECT  all  --  0.0.0.0/0  0.0.0.0/0   reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)  <==針對 OUTPUT 鏈,且預設政策為可接受target  prot opt source     destination范例:列出 nat table 三條鏈的規則[root@www ~]# iptables -t nat -L -nChain PREROUTING (policy ACCEPT)target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)target     prot opt source               destinationChain OUTPUT (policy ACCEPT)target     prot opt source               destination

在上表中,每一個 Chain 就是前面提到的每個鏈啰~ Chain 那一行里面括號的 policy 就是預設的政策, 那底下的 target, prot 代表什么呢?

  • target:代表進行的動作, ACCEPT 是放行,而 REJECT 則是拒絕,此外,尚有 DROP (丟棄) 的項目!
  • prot:代表使用的封包協議,主要有 tcp, udp 及 icmp 三種封包格式;
  • opt:額外的選項說明
  • source :代表此規則是針對哪個『來源 IP』進行限制?
  • destination :代表此規則是針對哪個『目標 IP』進行限制?

在輸出結果中,第一個范例因為沒有加上 -t 的選項,所以默認就是 filter 這個表格內的 INPUT, OUTPUT, FORWARD 三條鏈的規則啰。若針對單機來說,INPUT 與 FORWARD 算是比較重要的管制防火墻鏈, 所以你可以發現最后一條規則的政策是 REJECT (拒絕) 喔!雖然 INPUT 與 FORWARD 的政策是放行 (ACCEPT), 不過在最后一條規則就已經將全部的封包都拒絕了!

不過這個指令的觀察只是作個格式化的查閱,要詳細解釋每個規則會比較不容易解析。舉例來說, 我們將 INPUT 的 5 條規則依據輸出結果來說明一下,結果會變成:

  1. 只要是封包狀態為 RELATED,ESTABLISHED 就予以接受
  2. 只要封包協議是 icmp 類型的,就予以放行
  3. 無論任何來源 (0.0.0.0/0) 且要去任何目標的封包,不論任何封包格式 (prot 為 all),通通都接受
  4. 只要是傳給 port 22 的主動式聯機 tcp 封包就接受
  5. 全部的封包信息通通拒絕

最有趣的應該是第 3 條規則了,怎么會所有的封包信息都予以接受?如果都接受的話,那么后續的規則根本就不會有用嘛! 其實那條規則是僅針對每部主機都有的內部循環測試網絡 (lo) 接口啦!如果沒有列出接口,那么我們就很容易搞錯啰~ 所以,近來鳥哥都建議使用 iptables-save 這個指令來觀察防火墻規則啦!因為 iptables-save 會列出完整的防火墻規則,只是并沒有規格化輸出而已。

[root@www ~]# iptables-save [-t table]選項與參數:-t :可以僅針對某些表格來輸出,例如僅針對 nat 或 filter 等等[root@www ~]# iptables-save# Generated by iptables-save v1.4.7 on Fri Jul 22 15:51:52 2011*filter                      <==星號開頭的指的是表格,這里為 filter:INPUT ACCEPT [0:0]          <==冒號開頭的指的是鏈,三條內建的鏈:FORWARD ACCEPT [0:0]        <==三條內建鏈的政策都是 ACCEPT 啰!:OUTPUT ACCEPT [680:100461]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <==針對 INPUT 的規則-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT  <==這條很重要!針對本機內部接口開放!-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibited <==針對 FORWARD 的規則COMMIT# Completed on Fri Jul 22 15:51:52 2011
由上面的輸出來看,有底線且內容含有 lo 的那條規則當中,『 -i lo 』指的就是由 lo 適配卡進來的封包! 這樣看就清楚多了!因為有寫到接口的關系啊!不像之前的 iptables -L -n 嘛!這樣了解乎! 不過,既然這個規則不是我們想要的,那該如何修改規則呢?鳥哥建議,先刪除規則再慢慢建立各個需要的規則! 那如何清除規則?這樣做就對了:
[root@www ~]# iptables [-t tables] [-FXZ]選項與參數:-F :清除所有的已訂定的規則;-X :殺掉所有使用者 "自定義" 的 chain (應該說的是 tables )啰;-Z :將所有的 chain 的計數與流量統計都歸零范例:清除本機防火墻 (filter) 的所有規則[root@www ~]# iptables -F[root@www ~]# iptables -X[root@www ~]# iptables -Z

由于這三個指令會將本機防火墻的所有規則都清除,但卻不會改變預設政策 (policy) , 所以如果你不是在本機下達這三行指令時,很可能你會被自己擋在家門外 (若 INPUT 設定為 DROP 時)!要小心啊!

一般來說,我們在重新定義防火墻的時候,都會先將規則給他清除掉。還記得我們前面談到的, 防火墻的『規則順序』是有特殊意義的,所以啰, 當然先清除掉規則,然后一條一條來設定會比較容易一點啦。底下就來談談定義預設政策吧!

定義預設政策 (policy)

清除規則之后,再接下來就是要設定規則的政策啦!還記得政策指的是什么嗎?『 當你的封包不在你設定的規則之內時,則該封包的通過與否,是以 Policy 的設定為準』,在本機方面的預設政策中,假設你對于內部的使用者有信心的話, 那么 filter 內的 INPUT 鏈方面可以定義的比較嚴格一點,而 FORWARD 與 OUTPUT 則可以訂定的松一些!通常都是將 INPUT 的 policy 定義為 DROP 啦,其他兩個則定義為 ACCEPT。 至于 nat table 則暫時先不理會他。

[root@www ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]選項與參數:-P :定義政策( Policy )。注意,這個 P 為大寫啊!ACCEPT :該封包可接受DROP   :該封包直接丟棄,不會讓 client 端知道為何被丟棄。范例:將本機的 INPUT 設定為 DROP ,其他設定為 ACCEPT[root@www ~]# iptables -P INPUT   DROP[root@www ~]# iptables -P OUTPUT  ACCEPT[root@www ~]# iptables -P FORWARD ACCEPT[root@www ~]# iptables-save# Generated by iptables-save v1.4.7 on Fri Jul 22 15:56:34 2011*filter:INPUT DROP [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]COMMIT# Completed on Fri Jul 22 15:56:34 2011# 由于 INPUT 設定為 DROP 而又尚未有任何規則,所以上面的輸出結果顯示:# 所有的封包都無法進入你的主機!是不通的防火墻設定!(網絡聯機是雙向的)
看到輸出的結果了吧?INPUT 被修改了設定喔!其他的 nat table 三條鏈的預設政策設定也是一樣的方式,例如:『 iptables -t nat -P PREROUTING ACCEPT 』就設定了 nat table 的 PREROUTING 鏈為可接受的意思!預設政策設定完畢后,來談一談關于各規則的封包基礎比對設定吧。 封包的基礎比對:IP, 網域及接口裝置

開始來進行防火墻規則的封包比對設定吧!既然是因特網,那么我們就由最基礎的 IP, 網域及端口,亦即是 OSI 的第三層談起,再來談談裝置 (網絡卡) 的限制等等。這一小節與下一小節的語法你一定要記住,因為這是最基礎的比對語法喔!

[root@www ~]# iptables [-AI 鏈名] [-io 網絡接口] [-p 協議] [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG]選項與參數:-AI 鏈名:針對某的鏈進行規則的 "插入" 或 "累加"    -A :新增加一條規則,該規則增加在原本規則的最后面。例如原本已經有四條規則,         使用 -A 就可以加上第五條規則!    -I :插入一條規則。如果沒有指定此規則的順序,默認是插入變成第一條規則。         例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號    鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。-io 網絡接口:設定封包進出的接口規范    -i :封包所進入的那個網絡接口,例如 eth0, lo 等接口。需與 INPUT 鏈配合;    -o :封包所傳出的那個網絡接口,需與 OUTPUT 鏈配合;-p 協定:設定此規則適用于哪種封包格式   主要的封包格式有: tcp, udp, icmp 及 all 。-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:   IP  :192.168.0.100   網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。   若規范為『不許』時,則加上 ! 即可,例如:   -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;-d 目標 IP/網域:同 -s ,只不過這里指的是目標的 IP 或網域。-j :后面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)

iptables 的基本參數就如同上面所示的,僅只談到 IP 、網域與裝置等等的信息, 至于 TCP, UDP 封包特有的埠口 (port number) 與狀態 (如 SYN 旗標) 則在下小節才會談到。 好,先讓我們來看看最基礎的幾個規則,例如開放 lo 這個本機的接口以及某個 IP 來源吧!
范例:設定 lo 成為受信任的裝置,亦即進出 lo 的封包都予以接受[root@www ~]# iptables -A INPUT -i lo -j ACCEPT

仔細看上面并沒有列出 -s, -d 等等的規則,這表示:不論封包來自何處或去到哪里,只要是來自 lo 這個界面,就予以接受!這個觀念挺重要的,就是『沒有指定的項目,則表示該項目完全接受』的意思! 例如這個案例當中,關于 -s, -d...等等的參數沒有規定時,就代表不論什么值都會被接受啰。

這就是所謂的信任裝置啦!假如你的主機有兩張以太網絡卡,其中一張是對內部的網域,假設該網卡的代號為 eth1 好了, 如果內部網域是可信任的,那么該網卡的進出封包就通通會被接受,那你就能夠用:『iptables -A INPUT -i eth1 -j ACCEPT』 來將該裝置設定為信任裝置。不過,下達這個指令前要特別注意,因為這樣等于該網卡沒有任何防備了喔!

范例:只要是來自內網的 (192.168.100.0/24) 的封包通通接受[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT# 由于是內網就接受,因此也可以稱之為『信任網域』啰。范例:只要是來自 192.168.100.10 就接受,但 192.168.100.230 這個惡意來源就丟棄[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP# 針對單一 IP 來源,可視為信任主機或者是不信任的惡意來源喔![root@www ~]# iptables-save# Generated by iptables-save v1.4.7 on Fri Jul 22 16:00:43 2011*filter:INPUT DROP [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [17:1724]-A INPUT -i lo -j ACCEPT-A INPUT -s 192.168.100.0/24 -i eth1 -j ACCEPT-A INPUT -s 192.168.100.10/32 -i eth1 -j ACCEPT-A INPUT -s 192.168.100.230/32 -i eth1 -j DROPCOMMIT# Completed on Fri Jul 22 16:00:43 2011
這就是最單純簡單的防火墻規則的設定與觀察方式。不過,在上面的案例中,其實你也發現到有兩條規則可能有問題~ 那就是上面的特殊字體圈起來的規則順序。明明已經放行了 192.168.100.0/24 了,所以那個 192.168.100.230 的規則就不可能會被用到!這就是有問題的防火墻設定啊!了解乎?那該怎辦?就重打啊!@_@! 那如果你想要記錄某個規則的紀錄怎么辦?可以這樣做:
[root@www ~]# iptables -A INPUT -s 192.168.2.200 -j LOG[root@www ~]# iptables -L -ntarget prot opt source         destinationLOG    all  --  192.168.2.200  0.0.0.0/0   LOG flags 0 level 4
到輸出結果的最左邊,會出現的是 LOG 喔!只要有封包來自 192.168.2.200 這個 IP 時, 那么該封包的相關信息就會被寫入到核心訊息,亦即是 /var/log/messages 這個檔案當中。 然后該封包會繼續進行后續的規則比對。所以說, LOG 這個動作僅在進行記錄而已,并不會影響到這個封包的其他規則比對的。 好了,接下來我們分別來看看 TCP,UDP 以及 ICMP 封包的其他規則比對吧! TCP, UDP 的規則比對:針對端口設定

在談到 TCP 與 UDP 時,比較特殊的就是那個端口 (port),在 TCP 方面則另外有所謂的聯機封包狀態, 包括最常見的 SYN 主動聯機的封包格式。那么如何針對這兩種封包格式進行防火墻規則的設定呢?你可以這樣看:

[root@www ~]# iptables [-AI 鏈] [-io 網絡接口] [-p tcp,udp] /> [-s 來源IP/網域] [--sport 埠口范圍] /> [-d 目標IP/網域] [--dport 埠口范圍] -j [ACCEPT|DROP|REJECT]選項與參數:--sport 端口范圍:限制來源的端口號碼,端口號碼可以是連續的,例如 1024:65535--dport 端口范圍:限制目標的端口號碼。

事實上就是多了那個 --sport 及 --dport 這兩個玩意兒,重點在那個 port 上面啦! 不過你得要特別注意,因為僅有 tcp 與 udp 封包具有端口,因此你想要使用 --dport, --sport 時,得要加上 -p tcp 或 -p udp 的參數才會成功喔!底下讓我們來進行幾個小測試:

范例:想要聯機進入本機 port 21 的封包都抵擋掉:[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP范例:想連到我這部主機的網芳 (upd port 137,138 tcp port 139,445) 就放行[root@www ~]# iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
瞧!你可以利用 UDP 與 TCP 協議所擁有的端口號碼來進行某些服務的開放或關閉喔!你還可以綜合處理呢!例如:只要來自 192.168.1.0/24 的 1024:65535 埠口的封包,且想要聯機到本機的 ssh port 就予以抵擋,可以這樣做:
[root@www ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 /> --sport 1024:65534 --dport ssh -j DROP
如果忘記加上 -p tcp 就使用了 --dport 時,會發生啥問題呢?
[root@www ~]# iptables -A INPUT -i eth0 --dport 21 -j DROPiptables v1.4.7: unknown option `--dport'Try `iptables -h' or 'iptables --help' for more information.

你應該會覺得很奇怪,怎么『 --dport 』會是未知的參數 (arg) 呢?這是因為你沒有加上 -p tcp 或 -p udp 的緣故啊!很重要喔!

除了端口之外,在 TCP 還有特殊的旗標啊!最常見的就是那個主動聯機的 SYN 旗標了。 我們在 iptables 里面還支持『 --syn 』的處理方式,我們以底下的例子來說明好了:

范例:將來自任何地方來源 port 1:1023 的主動聯機到本機端的 1:1023 聯機丟棄[root@www ~]# iptables -A INPUT -i eth0 -p tcp --sport 1:1023 /> --dport 1:1023 --syn -j DROP
一般來說,client 端啟用的 port 都是大于 1024 以上的端口,而 server 端則是啟用小于 1023 以下的端口在監聽的。所以我們可以讓來自遠程的小于 1023 以下的端口數據的主動聯機都給他丟棄! 但不適用在 FTP 的主動聯機中! iptables 外掛模塊:mac 與 state

在 kernel 2.2 以前使用 ipchains 管理防火墻時,通常會讓系統管理員相當頭痛!因為 ipchains 沒有所謂的封包狀態模塊,因此我們必須要針對封包的進、出方向進行管控。舉例來說,如果你想要聯機到遠程主機的 port 22 時,你必須要針對兩條規則來設定:

  • 本機端的 1024:65535 到遠程的 port 22 必須要放行 (OUTPUT 鏈);
  • 遠程主機 port 22 到本機的 1024:65535 必須放行 (INPUT 鏈);

這會很麻煩!因為如果你要聯機到 10 部主機的 port 22 時,假設 OUTPUT 為預設開啟 (ACCEPT), 你依舊需要填寫十行規則,讓那十部遠程主機的 port 22 可以聯機到你的本地端主機上。 那如果開啟全部的 port 22 呢?又擔心某些惡意主機會主動以 port 22 聯機到你的機器上! 同樣的道理,如果你要讓本地端主機可以連到外部的 port 80 (WWW 服務),那就更不得了~ 這就是網絡聯機是雙向的一個很重要的概念!

好在我們的 iptables 免除了這個困擾!他可以透過一個狀態模塊來分析 『這個想要進入的封包是否為剛剛我發出去的響應?』 如果是剛剛我發出去的響應,那么就可以予以接受放行!哇!真棒!這樣就不用管遠程主機是否聯機進來的問題了! 那如何達到呢?看看底下的語法:

[root@www ~]# iptables -A INPUT [-m state] [--state 狀態]選項與參數:-m :一些 iptables 的外掛模塊,主要常見的有:     state :狀態模塊     mac   :網絡卡硬件地址 (hardware address)--state :一些封包的狀態,主要有:     INVALID    :無效的封包,例如數據破損的封包狀態     ESTABLISHED:已經聯機成功的聯機狀態;     NEW        :想要新建立聯機的封包狀態;     RELATED    :這個最常用!表示這個封包是與我們主機發送出去的封包有關范例:只要已建立或相關封包就予以通過,只要是不合法封包就丟棄[root@www ~]# iptables -A INPUT -m state /> --state RELATED,ESTABLISHED -j ACCEPT[root@www ~]# iptables -A INPUT -m state --state INVALID -j DROP
如此一來,我們的 iptables 就會主動分析出該封包是否為響應狀態,若是的話,就直接予以接受。呵呵! 這樣一來你就不需要針對響應的封包來撰寫個別的防火墻規則了!這真是太棒了!底下我們繼續談一下 iptables 的另一個外掛, 那就是針對網卡來進行放行與防御:
范例:針對局域網絡內的 aa:bb:cc:dd:ee:ff 主機開放其聯機[root@www ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff /> -j ACCEPT選項與參數:--mac-source :就是來源主機的 MAC 啦!
如果你的區網當中有某些網絡高手,老是可以透過修改 IP 去嘗試透過路由器往外跑,那你該怎么辦? 難道將整個區網拒絕?并不需要的,你可以透過之前談到的 ARP 相關概念,去捉到那部主機的 MAC ,然后透過上頭的這個機制, 將該主機整個 DROP 掉即可。不管他改了什么 IP ,除非他知道你是用網卡的 MAC 來管理,否則他就是出不去啦!了解乎? ICMP 封包規則的比對:針對是否響應 ping 來設計

如果不是做為路由器的主機時,通常我們會把 ICMP type 8 (echo request) 拿掉而已,讓遠程主機不知道我們是否存在,也不會接受 ping 的響應就是了。ICMP 封包格式的處理是這樣的:

[root@www ~]# iptables -A INPUT [-p icmp] [--icmp-type 類型] -j ACCEPT選項與參數:--icmp-type :后面必須要接 ICMP 的封包類型,也可以使用代號,              例如 8  代表 echo request 的意思。范例:讓 0,3,4,11,12,14,16,18 的 ICMP type 可以進入本機:[root@www ~]# vi somefile#!/bin/bashicmp_type="0 3 4 11 12 14 16 18"for typeicmp in $icmp_typedo   iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPTdone[root@www ~]# sh  somefile
這樣就能夠開放部分的 ICMP 封包格式進入本機進行網絡檢測的工作了!不過,如果你的主機是作為區網的路由器, 那么建議 icmp 封包還是要通通放行才好!這是因為客戶端檢測網絡時,常常會使用 ping 來測試到路由器的線路是否暢通之故呦! 所以不要將路由器的 icmp 關掉,會有狀況啦! 超陽春客戶端防火墻設計與防火墻規則儲存

經過上述的本機 iptables 語法分析后,接下來我們來想想,如果站在客戶端且不提供網絡服務的 Linux 本機角色時, 你應該要如何設計你的防火墻呢?老實說,你只要分析過 CentOS 默認的防火墻規則就會知道了,理論上, 應該要有的規則如下:

  1. 規則歸零:清除所有已經存在的規則 (iptables -F...)
  2. 預設政策:除了 INPUT 這個自定義鏈設為 DROP 外,其他為預設 ACCEPT;
  3. 信任本機:由于 lo 對本機來說是相當重要的,因此 lo 必須設定為信任裝置;
  4. 回應封包:讓本機主動向外要求而響應的封包可以進入本機 (ESTABLISHED,RELATED)
  5. 信任用戶:這是非必要的,如果你想要讓區網的來源可用你的主機資源時

這就是最最陽春的防火墻,你可以透過第二步驟抵擋所有遠程的來源封包,而透過第四步驟讓你要求的遠程主機響應封包可以進入, 加上讓本機的 lo 這個內部循環裝置可以放行,嘿嘿!一部 client 專用的防火墻規則就 OK 了!你可以在某個 script 上面這樣做即可:

[root@www ~]# vim bin/firewall.sh#!/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH# 1. 清除規則iptables -Fiptables -Xiptables -Z# 2. 設定政策iptables -P   INPUT DROPiptables -P  OUTPUT ACCEPTiptables -P FORWARD ACCEPT# 3~5. 制訂各項規則iptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT# 6. 寫入防火墻規則配置文件/etc/init.d/iptables save[root@www ~]# sh bin/firewall.shiptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
其實防火墻也是一個服務,你可以透過『chkconfig --list iptables』去察看就知道了。 因此,你這次修改的各種設定想要在下次開機還保存,那就得要進行『 /etc/init.d/iptables save 』這個指令加參數。 因此,鳥哥現在都是將儲存的動作寫入這個 firewall.sh 腳本中,比較單純些啰!現在,你的 Linux 主機已經有相當的保護了, 只是如果想要作為服務器,或者是作為路由器,那就得要自行加上某些自定義的規則啰。

老實說,如果你對 Linux 夠熟悉的話,直接去修改 /etc/sysconfig/iptables 然后將 iptables 這個服務 restart, 那你的防火墻規則就是會在開機后持續存在啰!

制訂好規則后當然就是要測試啰!那么如何測試呢?

  1. 先由主機向外面主動聯機試看看;
  2. 再由私有網域內的 PC 向外面主動聯機試看看;
  3. 最后,由 Internet 上面的主機,主動聯機到你的 Linux 主機試看看;

一步一步作下來,看看問題出在哪里,然后多多的去改進、改良!基本上,網絡上目前很多的資料可以提供你不錯的參考了! 這一篇的設定寫的是很簡單,大部分都還在介紹階段而已!希望對大家有幫助!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 综合97| 久久国产在线观看 | 性大片免费看 | 欧美自拍三区 | 欧美激情在线播放 | cosplay裸体福利写真 | 日本aaaa片毛片免费观蜜桃 | 亚洲婷婷日日综合婷婷噜噜噜 | 欧美成人免费在线视频 | 黄色网电影 | 亚洲网站在线观看 | 美女黄视频在线观看 | 久久毛片免费 | 黄色大片高清 | 黄色片网站在线免费观看 | 99日韩精品视频 | 日韩一级片 | 欧美人与性禽动交精品 | 国产精品av久久久久久网址 | 日韩欧美精品电影 | 92看片淫黄大片一级 | 国产一级毛片a | 农村少妇吞精夜夜爽视频 | 日韩激情在线视频 | 久久网站热最新地址4 | 中国美女一级黄色片 | 91av亚洲| 免费看日产一区二区三区 | 亚洲成人播放 | 中文字幕xxx | 久久色在线 | 亚洲草逼视频 | 欧美成人免费 | 色人阁在线视频 | 黄色片网站免费看 | 日韩黄色片在线观看 | 国产一级在线观看视频 | 在线观看av国产一区二区 | 精品中文字幕在线观看 | 看91视频 | 国产乱色精品成人免费视频 |