linux服務器配置實例<5>---配置Linux防火牆

配置 Linux 防火牆
. 包過濾防火牆的通常概念
1. 概念 : 是用一個軟件查看所流經的數據包的包頭 (header), 以決定丟棄仍是接受這個包
2. 工做層次 : 工做在網絡層
3. 包過濾防火牆的工做原理
使用過濾器 : 過濾系統根據過濾規則原則決定是否讓數據包經過,檢查的 IP 頭和 TCP UDP 頭包括 :IP 源地址 ,IP 目標地址 , 協議 ,TCP UDP 包的源端口, TCP UDP 包的目標端口 ,ICMP 消息類型 ,TCP 包中的 ACK , 數據包到達的端口 , 數據包出去的端口
經過屏蔽特定的端口能夠禁止特定的服務
過濾器的實現 : 過濾路由器檢查數據包的特定信息
4. 包過濾操做的基本過程 :
5. 包過濾的優缺點
優勢 : 小型網絡包過濾較容易實現,處理包的速度快 , 提供透明服務
缺點 :
一些包過濾網關不支持有效的用戶認證
規則表很快,會變得很大並且複雜
包過濾防火牆只能阻止外部主機假裝內部主機的 IP ,對於外部主機假裝外部主機的 IP 欺騙卻不能阻止
.Netfilter/iptables
1.Netfilter/iptables 是與最新的 2.4.x Linux 內核集成的 IP 信息包過濾系統
2.Netfilter 網絡底層架構
(1).Netfilter 是新的用來實現防火牆的過濾器 . iptables 是用來指定 Netfilter 規則的用戶工具,它爲用戶配置防火牆規則提供了方便 .iptables 能夠加入、插入或刪除核心包過濾表格鏈中的規則。實際執行者是 netfilter 及其相關模塊
(2).Netfilter/IPtables 系統的主要功能:
狀態包過濾 ( 鏈接跟蹤 )
各類網絡地址翻譯
靈活、易擴展的急智機制
大量的加強型補丁包
(3).Netfilter/iptables 的用途 :
創建 Internet 防火牆和基於狀態的包過濾
NAT 和假裝 (masquerading) 共享上網
NAT 實現透明代理
用修改 IP 包頭的 ToS 字段實現更復雜的功能
tc_iproute2 配合使用能夠實現 QoS 路由
(4).Netfilter/iptables 系統的優勢 : 它能夠配置有狀態的防火牆,可以指定並記住爲發送或接收信息包所創建的鏈接的狀態,有 4 種有效狀態 , 分別爲 ESTABLISHED INVALID NEW RELATED
3.Netfilter/iptables 的內核空間和用戶空間
netfilter 是內核空間 (KernelSpace) ,是內核的一部分,由一些表組成,每一個表由若干鏈 (chains) 組成,而每條鏈中有一條或數條規則 (rule)
4.Netfilter/iptables 的工做過程
netfilter/iptables IP 信息包過濾系統是一種功能強大的工具,可用於添加、編輯和除去規則,這些規則是在作信息包過濾決定時,防火牆所遵循和組成的規則。這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈( chain )中。若是某個信息包與規則匹配,那麼使目標 ACCEPT 容許該信息包經過。還可使用目標 DROP REJECT 來阻塞並殺死信息包。根據規則所處理的信息包的類型,能夠將規則分組在鏈中。處理入站信息包的規則被添加到 INPUT 鏈中。處理出站信息包的規則被添加到 OUTPUT 鏈中。處理正在轉發的信息包的規則被添加到 FORWARD 鏈中。創建規則並將鏈放在適當的位置以後,就能夠開始進行真正的信息包過濾工做了。這時內核空間從用戶空間接管工做。當信息包到達防火牆時,內核先檢查信息包的頭信息,尤爲是信息包的目的地。咱們將這個過程稱爲路由。
安裝 netfilter/iptables 系統
由於 netfilter/iptables netfilter 組件是與內核 2.4.x 集成在一塊兒的,因此只須要下載並安裝 iptables 用戶空間工具。
. 安裝和配置 netfilter/iptables 系統:
1. 安裝 netfilter/iptables
硬件:要使用 netfilter/iptables ,須要有一個運行 Linux OS 並鏈接到因特網、 LAN WAN 的系統。
軟件:帶有內核 2.4 或更高版本的任何版本的 Linux OS 。能夠從 [url]http://www.kernel.org[/url] 下載最新版本的內核。
安裝前的準備
在開始安裝 iptables 用戶空間工具以前,須要對系統作某些修改。首先,須要使用 make config 命令來配置內核的選項。在配置期間,必須經過將 CONFIG_NETFILTER CONFIG_IP_NF_IPTABLES 選項設置爲 Y 來打開它們,由於這是使 netfilter/iptables 工做所必需的。
2. 創建規則和鏈
經過向防火牆提供有關對來自某個源、到某個目的地或具備特定協議類型的信息包要作些什麼的指令,規則控制信息包的過濾。經過使用 netfilter/iptables 系統提供的特殊命令 iptables ,創建這些規則,並將其添加到內核空間的特定信息包過濾表內的鏈中。關於添加/除去/編輯規則的命令的通常語法以下:
$ iptables [-t table] command [match] [target]
表( table
[-t table] 選項容許使用標準表以外的任何表。表是包含僅處理特定類型信息包的規則和鏈的信息包過濾表。有三種可用的表選項: filter nat mangle 。該選項不是必需的,若是未指定,則 filter 用做缺省表。
filter 表用於通常的信息包過濾,它包含 INPUT OUTPUT FORWARD 鏈。 nat 表用於要轉發的信息包,它包含 PREROUTING OUTPUT POSTROUTING 鏈。若是信息包及其頭內進行了任何更改,則使用 mangle 表。該表包含一些規則來標記用於高級路由的信息包,該表包含 PREROUTING OUTPUT 鏈。
注: PREROUTING 鏈由指定信息包到達防火牆就改變它們的規則所組成,而 POSTROUTING 鏈由指定正當信息包打算離開防火牆時改變它們的規則所組成。
命令( command
上面這條命令中具備強制性的 command 部分是 iptables 命令的最重要部分。它告訴 iptables 命令要作什麼,例如,插入規則、將規則添加到鏈的末尾或刪除規則。如下是最經常使用的一些命令:
-A --append :該命令將一條規則附加到鏈的末尾。
示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
該示例命令將一條規則附加到 INPUT 鏈的末尾,肯定來自源地址 205.168.0.1 的信息包能夠 ACCEPT
-D --delete :經過用 -D 指定要匹配的規則或者指定規則在鏈中的位置編號,該命令從鏈中刪除該規則。下面的示例顯示了這兩種方法。
示例:
$ iptables -D INPUT --dport 80 -j DROP
$ iptables -D OUTPUT 3
第一條命令從 INPUT 鏈刪除規則,它指定 DROP 前往端口 80 的信息包。第二條命令只是從 OUTPUT 鏈刪除編號爲 3 的規則。
-P --policy :該命令設置鏈的缺省目標,即策略。全部與鏈中任何規則都不匹配的信息包都將被強制使用此鏈的策略。
示例:
$ iptables -P INPUT DROP
該命令將 INPUT 鏈的缺省目標指定爲 DROP 。這意味着,將丟棄全部與 INPUT 鏈中任何規則都不匹配的信息包。
-N --new-chain :用命令中所指定的名稱建立一個新鏈。
示例:
$ iptables -N allowed-chain
-F --flush :若是指定鏈名,該命令刪除鏈中的全部規則,若是未指定鏈名,該命令刪除全部鏈中的全部規則。此參數用於快速清除。
示例:
$ iptables -F FORWARD
$ iptables -F
-L --list :列出指定鏈中的全部規則。
示例:
$ iptables -L allowed-chain
匹配( match
iptables 命令的可選 match 部分指定信息包與規則匹配所應具備的特徵(如源和目的地地址、協議等)。匹配分爲兩大類:通用匹配和特定於協議的匹配。這裏,我將研究可用於採用任何協議的信息包的通用匹配。下面是一些重要的且經常使用的通用匹配及其示例和說明:
-p --protocol :該通用協議匹配用於檢查某些特定協議。協議示例有 TCP UDP ICMP 、用逗號分隔的任何這三種協議的組合列表以及 ALL (用於全部協議)。 ALL 是缺省匹配。可使用 ! 符號,它表示不與該項匹配。
示例:
$ iptables -A INPUT -p TCP, UDP
$ iptables -A INPUT -p ! ICMP
在上述示例中,這兩條命令都執行同一任務 它們指定全部 TCP UDP 信息包都將與該規則匹配。經過指定 ! ICMP ,咱們打算容許全部其它協議(在這種狀況下是 TCP UDP ),而將 ICMP 排除在外。
-s --source :該源匹配用於根據信息包的源 IP 地址來與它們匹配。該匹配還容許對某一範圍內的 IP 地址進行匹配,可使用 ! 符號,表示不與該項匹配。缺省源匹配與全部 IP 地址匹配。
示例:
$ iptables -A OUTPUT -s 192.168.1.1
$ iptables -A OUTPUT -s 192.168.0.0/24
$ iptables -A OUTPUT -s ! 203.16.1.89
第二條命令指定該規則與全部來自 192.168.0.0 192.168.0.24 IP 地址範圍的信息包匹配。第三條命令指定該規則將與除來自源地址 203.16.1.89 外的任何信息包匹配。
-d --destination :該目的地匹配用於根據信息包的目的地 IP 地址來與它們匹配。該匹配還容許對某一範圍內 IP 地址進行匹配,可使用 ! 符號,表示不與該項匹配。
示例:
$ iptables -A INPUT -d 192.168.1.1
$ iptables -A INPUT -d 192.168.0.0/24
$ iptables -A OUTPUT -d ! 203.16.1.89
目標( target
咱們已經知道,目標是由規則指定的操做,對與那些規則匹配的信息包執行這些操做。除了容許用戶定義的目標以外,還有許多可用的目標選項。下面是經常使用的一些目標及其示例和說明:
ACCEPT :當信息包與具備 ACCEPT 目標的規則徹底匹配時,會被接受(容許它前往目的地),而且它將中止遍歷鏈(雖然該信息包可能遍歷另外一個表中的其它鏈,而且有可能在那裏被丟棄)。該目標被指定爲 -j ACCEPT
DROP :當信息包與具備 DROP 目標的規則徹底匹配時,會阻塞該信息包,而且不對它作進一步處理。該目標被指定爲 -j DROP
REJECT :該目標的工做方式與 DROP 目標相同,但它比 DROP 好。和 DROP 不一樣, REJECT 不會在服務器和客戶機上留下死套接字。另外, REJECT 將錯誤消息發回給信息包的發送方。該目標被指定爲 -j REJECT
示例:
$ iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN :在規則中設置的 RETURN 目標讓與該規則匹配的信息包中止遍歷包含該規則的鏈。若是鏈是如 INPUT 之類的主鏈,則使用該鏈的缺省策略處理信息包。它被指定爲 -jump RETURN 。示例:
$ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
還有許多用於創建高級規則的其它目標,如 LOG REDIRECT MARK MIRROR MASQUERADE 等。
保存規則
如今,您已經學習瞭如何創建基本的規則和鏈以及如何從信息包過濾表中添加或刪除它們。可是,您應該記住:用上述方法所創建的規則會被保存到內核中,當從新引導系統時,會丟失這些規則。因此,若是您將沒有錯誤的且有效的規則集添加到信息包過濾表,同時但願在從新引導以後再次使用這些規則,那麼必須將該規則集保存在文件中。可使用 iptables-save 命令來作到這一點:
$ iptables-save > iptables-script
如今,信息包過濾表中的全部規則都被保存在文件 iptables-script 中。不管什麼時候再次引導系統,均可以使用 iptables-restore 命令將規則集從該腳本文件恢復到信息包過濾表,以下所示:
$ iptables-restore iptables-script
若是您願意在每次引導系統時自動恢復該規則集,則能夠將上面指定的這條命令放到任何一個初始化 shell 腳本中。
netfilter/iptables 系統的優勢
netfilter/iptables 的最大優勢是它能夠配置有狀態的防火牆,這是 ipfwadm ipchains 等之前的工具都沒法提供的一種重要功能。有狀態的防火牆可以指定並記住爲發送或接收信息包所創建的鏈接的狀態。防火牆能夠從信息包的鏈接跟蹤狀態得到該信息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息能夠增長其效率和速度。這裏有四種有效狀態,名稱分別爲 ESTABLISHED INVALID NEW RELATED
狀態 ESTABLISHED 指出該信息包屬於已創建的鏈接,該鏈接一直用於發送和接收信息包而且徹底有效。 INVALID 狀態指出該信息包與任何已知的流或鏈接都不相關聯,它可能包含錯誤的數據或頭。狀態 NEW 意味着該信息包已經或將啓動新的鏈接,或者它與還沒有用於發送和接收信息包的鏈接相關聯。最後, RELATED 表示該信息包正在啓動新鏈接,以及它與已創建的鏈接相關聯。
netfilter/iptables 的另外一個重要優勢是,它使用戶能夠徹底控制防火牆配置和信息包過濾。您能夠定製本身的規則來知足您的特定需求,從而只容許您想要的網絡流量進入系統。
另外, netfilter/iptables 是免費的,這對於那些想要節省費用的人來講十分理想,它能夠代替昂貴的防火牆解決方案。
最新的 Linux 內核 2.4.x 具備 netfilter/iptables 系統這種內置的 IP 信息包過濾工具,它使配置防火牆和信息包過濾變得便宜且方便。 netfilter/iptables 系統使其用戶能夠徹底控制防火牆配置和信息包過濾。它容許爲防火牆創建可定製化的規則來控制信息包過濾。它還容許配置有狀態的防火牆。
:WWW 服務器 198.168.80.251,FTP 服務器 198.168.80.252,E-mail 服務器 198.168.80.253 ,包過濾防火牆的 eth0 Internet 相連
#touch /etc/rc.d/rilter-firewall 生成空的腳本,並添加可執行權限
#chmod u+x /etc/rc.d/filter-firewall
#echo "/etc/rc.d/filter-firewal">>/etc/rc.d/rc.local 使腳本能在系統啓動時自動執行
#vi /etc/rc.d/filter-firewall
#!/bin/bash
echo "Starting iptables rules" 在屏幕上顯示信息
echo "1">/proc/sys/net/ipv4/ip_forward 增長系統的 IP 轉發功能
IPT=/sbin/iptables 定義變量
WWW-SERVER=192.168.80.251
FTP-SERVER=192.168.80.252
EMAIL-SERVER=192.168.80.253
IP_RANGE="192.168.80.0/24"
$IPT -F 刷新全部的鏈的規則
$IPT -P FORWARD DROP
相關文章
相關標籤/搜索