第六篇 構(gòu)建一個(gè)獨(dú)立的防火墻_第1頁(yè)
第六篇 構(gòu)建一個(gè)獨(dú)立的防火墻_第2頁(yè)
第六篇 構(gòu)建一個(gè)獨(dú)立的防火墻_第3頁(yè)
第六篇 構(gòu)建一個(gè)獨(dú)立的防火墻_第4頁(yè)
第六篇 構(gòu)建一個(gè)獨(dú)立的防火墻_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、CIW課程之用LINUX AS構(gòu)建和安裝一個(gè)獨(dú)立的防火墻防火墻架設(shè)前的知識(shí)點(diǎn)補(bǔ)充· 防火墻支持狀態(tài)過(guò)濾。狀態(tài)主要有以下四種:· NEW說(shuō)明這個(gè)包是我們看到的第一個(gè)包。意思就是,這是conntrack(內(nèi)核包跟蹤)模塊看到的某個(gè)連接第一個(gè)包,它即將被匹配了。比如,我們看到一個(gè)SYN 包,是我們所留意的連接的第一個(gè)包,如UDP包,就要匹配它 · ESTABLISHED在兩個(gè)方向上的數(shù)據(jù)傳輸。即只需要接到應(yīng)答包即可,不管這個(gè)包是發(fā)往防火墻的,還是要由防火墻轉(zhuǎn)發(fā)的。ICMP的錯(cuò)誤和重定向等信息包也被看作是ESTABLISHED,只要它們是我們所發(fā)出的信息的應(yīng)答 就認(rèn)為是此

2、狀態(tài)。· RELATED是個(gè)比較麻煩的狀態(tài)。當(dāng)一個(gè)連接和某個(gè)已處于ESTABLISHED狀態(tài)的連接有關(guān)系時(shí),就被認(rèn)為是RELATED的了。換句話說(shuō),一個(gè)連接要想是RELATED的,首先要有一個(gè)ESTABLISHED的連接。這個(gè)ESTABLISHED連接再產(chǎn)生一個(gè)主連接之外的連接,這個(gè)新的連接就是 RELATED的了,當(dāng)然前提是conntrack模塊要能理解RELATED。ftp是個(gè)很好的例子,F(xiàn)TP-data 連接就是和FTP-control有關(guān)的一個(gè)RELATED· INVALID說(shuō)明數(shù)據(jù)包不能被識(shí)別屬于哪個(gè)連接或沒(méi)有任何狀態(tài)。有幾個(gè)原因可以產(chǎn)生這種情況,比如,內(nèi)存溢出,

3、收到不知屬于哪個(gè)連接的ICMP 錯(cuò)誤信息。一般地,我們DROP這個(gè)狀態(tài)的任何東西。 本章所建立的防火墻是基于“禁止一切”的默認(rèn)策略的。按照默認(rèn)的情況,所有的網(wǎng)絡(luò)數(shù)據(jù)流都被禁止,服務(wù)作為策略的例外來(lái)單獨(dú)啟用。對(duì)于單系統(tǒng)的家庭或是小型商業(yè)用戶配置,假設(shè)大多用戶都使用一個(gè)單獨(dú)的計(jì)算機(jī)來(lái)連接 Internet,或用單個(gè)防火墻來(lái)保護(hù)一個(gè)小型的專用的局域網(wǎng)。之所以這樣假設(shè)是因?yàn)檫@樣的站點(diǎn)一般不會(huì)去花更多資金來(lái)擴(kuò)展原有系統(tǒng)結(jié)構(gòu)以構(gòu)建更高級(jí)的防火墻?!白钚“踩辈⒉皇恰安话踩?,這種“最小保護(hù)”防火墻只是比擁有較多機(jī)器的更復(fù)雜的防火墻稍差一些。安全性是一種可利用的資源與逐漸減少的回報(bào)之間的均衡。如果要求更高的

4、安全性,付出更多的投入,不一定能在效益上有相應(yīng)倍數(shù)的提高。日后我們會(huì)介紹更多的安全配置,以提供保護(hù)較為復(fù)雜的局域網(wǎng)的附加內(nèi)部安全性,也提供比單系統(tǒng)防火墻更安全的服務(wù)器配置。作為防火墻的管理程序,iptables為輸入和輸出規(guī)則鏈建立單獨(dú)的數(shù)據(jù)包過(guò)濾規(guī)則以組成防火墻。定義防火墻規(guī)則的一個(gè)重要方面就是規(guī)則的定義順序。 數(shù)據(jù)包過(guò)濾規(guī)則以它們被定義的順序存儲(chǔ)在內(nèi)核的輸入、輸出或轉(zhuǎn)發(fā)規(guī)則鏈中。單個(gè)規(guī)則被插入到鏈的開(kāi)頭或添加到鏈的結(jié)尾。本章例子中的所有規(guī)則都是添加到鏈的結(jié)尾的本章所有過(guò)濾器的例子中使用的是數(shù)字服務(wù)端口號(hào)而不是它們的符號(hào)名稱,如在/etcservices中列出的那樣。iptables支持符號(hào)

5、化的服務(wù)端口名稱,之所以不使用符號(hào)名稱而使用數(shù)字是因?yàn)樵贚inux的不同版本中符號(hào)名稱不太統(tǒng)一本章將會(huì)用到一個(gè)名為rcfirewall的腳本,這個(gè)腳本的位置依賴于Linux調(diào)用該腳本的方式而不同。例如,在Red Hat,或SUSE系統(tǒng)中,此腳本位于etcrcd目錄;但在Debian中,它位于etcinitd目錄。鑒于用到的shell語(yǔ)法可能不同,在例子中會(huì)用Bourne(sh)或Bourne Again(bash)shell的語(yǔ)法來(lái)編寫。腳本應(yīng)該以“shebang”開(kāi)頭來(lái)調(diào)用shell作為腳本的解釋程序。腳本中的第一行如下:#!binsh定制還是購(gòu)買Linux內(nèi)核最好不要在防火墻運(yùn)行X Win

6、dow,進(jìn)一步說(shuō),最好不要安裝。因?yàn)橐话氵@個(gè)軟件沒(méi)有太多用處,而且曾被用做攻擊服務(wù)器的途徑。有人需要從成百上千英里以外的某地方控制一臺(tái)Linux計(jì)算機(jī),和他們一樣,我也要從很遠(yuǎn)的地方啟動(dòng)防火墻腳本,在這種情況下,最好做兩項(xiàng)準(zhǔn)備:首先,將防火墻腳本開(kāi)始的一個(gè)或幾個(gè)執(zhí)行動(dòng)作的默認(rèn)策略定為接受,這樣做是為了調(diào)試腳本,而不是規(guī)則語(yǔ)法即是如此。在腳本被調(diào)試正確后,再將策略改回為丟棄策略。 其次非常重要的一點(diǎn)是,在從遠(yuǎn)程執(zhí)行防火墻腳本時(shí),最好設(shè)置corn作業(yè),使防火墻可以在不久后的某一時(shí)間停止下來(lái)。這樣可以有效地允許你啟用防火墻并進(jìn)行一些測(cè)試,并且,當(dāng)存在錯(cuò)誤設(shè)置的(或者丟失的)規(guī)則時(shí),不至于將你鎖在計(jì)算

7、機(jī)外面而無(wú)法返回與計(jì)算機(jī)的連接。臨時(shí)客串知識(shí)點(diǎn):Linux 技巧: 用 cron 和 at 調(diào)度作業(yè)系統(tǒng)管理員需要在系統(tǒng)負(fù)載低的午夜運(yùn)行作業(yè),或者需要每天或每月運(yùn)行作業(yè),同時(shí)又不愿意犧牲睡眠時(shí)間或假期。調(diào)度任務(wù)的其他原因包括自動(dòng)執(zhí)行日常任務(wù)或者確保每次都以相同的方式處理任務(wù)。本文幫助您使用 cron 和 at 功能調(diào)度作業(yè)定期運(yùn)行或在指定的時(shí)間運(yùn)行一次。以一定的時(shí)間間隔運(yùn)行作業(yè)以一定的時(shí)間間隔運(yùn)行作業(yè)需要使用 cron 設(shè)施進(jìn)行管理,它由 crond 守護(hù)進(jìn)程和一組表(描述執(zhí)行哪些操作和采用什么樣的頻率)組成。這個(gè)守護(hù)進(jìn)程每分鐘喚醒一次,并通過(guò)檢查 crontab 判斷需要做什么。用戶使用 c

8、rontab 命令管理 crontab。crond 守護(hù)進(jìn)程常常是在系統(tǒng)啟動(dòng)時(shí)由 init 進(jìn)程啟動(dòng)的。為了簡(jiǎn)單,假設(shè)希望定期運(yùn)行清單 1 所示的命令。這個(gè)命令實(shí)際上只報(bào)告日期和時(shí)間,其他什么事都不做,但是它可以說(shuō)明如何使用 crontab 設(shè)置 cron 作業(yè),而且還可以通過(guò)輸出看到作業(yè)運(yùn)行的時(shí)間。設(shè)置 crontab 條目需要一個(gè)包含轉(zhuǎn)義的 shell 元字符的字符串,所以適合于簡(jiǎn)單的命令和參數(shù)。在這個(gè)示例中,將從腳本 /home/ian/mycrontab.sh 運(yùn)行 echo 命令,這個(gè)腳本不需要參數(shù)。 這可以減少處理轉(zhuǎn)義字符的工作。創(chuàng)建 crontab使用 crontab 命令和 -

9、e(表示 “edit”)選項(xiàng)創(chuàng)建 crontab。這會(huì)打開(kāi) vi 編輯器,除非在 EDITOR 或 VISUAL 環(huán)境變量中指定了另一種編輯器。 每個(gè) crontab 條目包含六個(gè)字段:1. 分鐘 2. 小時(shí) 3. 日 4. 月 5. 星期 6. 由 sh 執(zhí)行的字符串 分鐘和小時(shí)的范圍分別是 0-59 和 0-12,日和月的范圍分別是 1-31 和 1-12。星期的范圍是 0-6,0 表示星期日。星期也可以指定為 sun、mon、tue 等等。第 6 個(gè)字段包含前 5 個(gè)字段之后的所有內(nèi)容,它是要傳遞給 sh 的字符串。百分號(hào)(%)將轉(zhuǎn)換為空行,所以如果要使用 % 或其他任何特殊字符,就要在

10、前面加上反斜線()。第一個(gè) % 之前的一行傳遞給 shell,這個(gè) % 之后的所有行都作為標(biāo)準(zhǔn)輸入傳遞。各個(gè)與時(shí)間相關(guān)的字段可以指定一個(gè)單獨(dú)的值、值的范圍(比如 0-10 或 sun-wed)或者以逗號(hào)分隔的單獨(dú)值和范圍列表。清單 2 給出一個(gè) crontab 條目示例。在這個(gè)示例中,我們的命令在 7 月的每個(gè)星期五和星期六晚上 10 點(diǎn)到午夜之間的第 0、20、40 分鐘(每 20 分鐘)執(zhí)行。crontab 存儲(chǔ)在哪里?用 crontab 命令創(chuàng)建的 crontab 存儲(chǔ)在 /etc/spool/cron 下面的一個(gè)子目錄中,這個(gè)子目錄與創(chuàng)建 crontab 的用戶同名,所以上面的 cro

11、ntab 存儲(chǔ)在 /etc/spool/cron/ian 中。在指定的時(shí)間運(yùn)行作業(yè)有時(shí)候,需要只運(yùn)行作業(yè)一次而不是定期運(yùn)行。為此,應(yīng)該使用 at 命令。要運(yùn)行的命令是從 -f 選項(xiàng)指定的文件讀取的,-v 選項(xiàng)顯示運(yùn)行作業(yè)的時(shí)間例如:ianlyrebird $ at -f mycrontest.sh 10pm tomorrowjob 14 at Sun Jul 8 22:00:00 2007ianlyrebird $ at -f mycrontest.sh 2:00 tuesdayjob 15 at Tue Jul 10 02:00:00 2007ianlyrebird $ at -f mycr

12、ontest.sh 2:00 july 11job 16 at Wed Jul 11 02:00:00 2007ianlyrebird $ at -f mycrontest.sh 2:00 next weekjob 17 at Sat Jul 14 02:00:00 2007可以管理 cron 和 at 作業(yè)。使用 crontab 命令和 -l 選項(xiàng)列出 crontab,使用 atq 命令顯示用 at 命令加入隊(duì)列中的作業(yè)ianlyrebird $ crontab -l0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.shianlyrebird $

13、atq16 Wed Jul 11 02:00:00 2007 a ian17 Sat Jul 14 02:00:00 2007 a ian14 Sun Jul 8 22:00:00 2007 a ian15 Tue Jul 10 02:00:00 2007 a ian可以使用 cron 命令和 -r 選項(xiàng)刪除所有調(diào)度的 cron 作業(yè)ianlyrebird $ crontab -l0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.shianlyrebird $ crontab -rianlyrebird $ crontab -lno crontab

14、for ian用 atq 和 atrm 顯示并刪除作業(yè)ianlyrebird $ atq16 Wed Jul 11 02:00:00 2007 a ian17 Sat Jul 14 02:00:00 2007 a ian14 Sun Jul 8 22:00:00 2007 a ian15 Tue Jul 10 02:00:00 2007 a ianianlyrebird $ atrm 16 14 15ianlyrebird $ atq17 Sat Jul 14 02:00:00 2007 a ian以上是關(guān)于作業(yè)調(diào)度的知識(shí)點(diǎn)補(bǔ)充。如果有了以上的CRON我們就不會(huì)把自己鎖在外面了。例如,在調(diào)試防

15、火墻腳本時(shí),可以創(chuàng)建一個(gè)corn作業(yè),每?jī)煞昼娡V狗阑饓σ淮?,這樣可以安全地運(yùn)行防火墻腳本并可以知道是否已鎖定SSH會(huì)話。如果已經(jīng)鎖定,只需要等待防火墻腳本再運(yùn)行幾分鐘,等待防火墻自行關(guān)閉,然后就可以去修訂腳本繼續(xù)運(yùn)行了。本節(jié)課防火墻示例中使用的符號(hào)常量如果為經(jīng)常使用的名字或地址定義了符號(hào)常量,防火墻的腳本就極易讀懂和維護(hù)。下面的常量或者是本章例子中用到的,或者是在網(wǎng)絡(luò)標(biāo)準(zhǔn)中定義的通用常量。在下面的例子中,也是以“shebang”行作為開(kāi)頭。#!/bin/bash IPT="/sbin/iptables" # Location of iptables on your sys

16、tem INTERNET="ethO" # Internet-connected interface LOOPBACK_INTERFACE="1o" # however your system names it IPADDR="my.ip.address" # your IP address MY_ISP="my.isp.address.range" # ISP server & NOC address range SUBNET_BASE="work" # Your subnet'

17、;s network address SUBNET_BROADCAST="my.subnet.bcast" # Your subnet's broadcast address LOOPBACK="127.0.O.O/8" # reserved loopback address range CLASS_A="IO.O.O.O/8" # class A private networks CLASS_B="172.16.O.O/12" # class B private networks CLASS_C=&quo

18、t;/16" # class C private networks CLASS_D_MULTICAST="224.0.O.O/4" # class D multicast addresses CLASS_E_RESERVED_NET="240.0.O.O/5" # class E reserved addresses BROADCAST_SRC="O.O.O.O" # broadcast source address BROADCAST_DEST="55"

19、# broadcast destination address PRIVPORTS="0:1023" # well-known, privileged port range UNPRIVPORTS="1024:65535" # unprivileged port range刪除預(yù)先存在的規(guī)則 定義一組過(guò)濾規(guī)則時(shí),首先要做的事情就是從規(guī)則鏈中清除任何已經(jīng)存在的規(guī)則。否則任何新定義的規(guī)則將加到已有的規(guī)則之后。那么,數(shù)據(jù)包在到達(dá)鏈上新定義的點(diǎn)之前,很容易與一個(gè)先前存在的規(guī)則匹配。 刪除規(guī)則也叫做刷新規(guī)則鏈,當(dāng)沒(méi)有參數(shù)直接針對(duì)特定的鏈時(shí),下面的命令一次性刷新所有

20、鏈上的規(guī)則:IPT FIPT -t nat FIPT -t mangle -F規(guī)則鏈變?yōu)榭?,但所有用戶自定義規(guī)則鏈仍存在,刷新鏈并不影響當(dāng)時(shí)處于有效的默認(rèn)策略的狀態(tài)。 下一步是刪除所有用戶自定義規(guī)則鏈,下面的命令可以刪除它們: IPT -X IPT-t nat -XIPT-t mangle -X停止防火墻IPT P INPUT ACCEPTIPT -policy OUTPUT ACCEPTIPT -policy FORWARD ACCEPTIPT -t nat -policy PREROUTING ACCEPTIPT -t nat -policy OUTPUT ACCEPTIFT -t nat

21、 -policy POSTROUTING ACCEPTIPT -t mangle -policy PREROUTING ACCEPTIPT -t mangle -policy OUTPUT ACCEPT下面就可以容易地停止防火墻了,將下面代碼置于上面代碼之后,當(dāng)你使用參數(shù)“stop”時(shí),腳本會(huì)直接而干凈地重置默認(rèn)策略并將防火墻完全停止:if "1" = "stop" ;then echo "Firewall completely stopped! WARNING: THIS HOST HAS NO FIREWALL RUNNING. "

22、; exit 0 fi啟動(dòng)回環(huán)接口本地服務(wù)依賴于回環(huán)網(wǎng)絡(luò)接口。系統(tǒng)啟動(dòng)之后,系統(tǒng)的默認(rèn)策略是接受所有的數(shù)據(jù)包,清除所有預(yù)先存在的規(guī)則鏈對(duì)此也沒(méi)有任何影響。但是,當(dāng)防火墻被重新初始化時(shí)并且先前使用了默認(rèn)禁止策略,丟棄策略在此時(shí)也將依然有效。在沒(méi)有任何接受規(guī)則的情況下,回環(huán)接口是不能被訪問(wèn)的。IPT -A INPUT -i lo -j ACCEPTIPT -A OUTPUT -o lo -j ACCEPT重置默認(rèn)策略使用丟棄默認(rèn)策略時(shí),除非定義規(guī)則為明確允許或拒絕一個(gè)匹配的數(shù)據(jù)包,否則數(shù)據(jù)包將被丟棄。我們想要的是,自動(dòng)丟棄我們不想要的入站數(shù)據(jù)包且并不通知遠(yuǎn)方的發(fā)送者,拒絕出站數(shù)據(jù)包并向內(nèi)部發(fā)送者返

23、回一個(gè)ICMP錯(cuò)誤消息。對(duì)用終端用戶來(lái)說(shuō),其不同之處舉例來(lái)講,如果有人在遠(yuǎn)程站點(diǎn)試圖連接你的Web服務(wù)器,他的瀏覽器會(huì)掛起,直到系統(tǒng)返回TCP超時(shí)狀態(tài),但他未得到你的站點(diǎn)或Web服務(wù)器是否存在的指示。另一方面,如果你試圖連接一個(gè)遠(yuǎn)程Web服務(wù)器,你的瀏覽器會(huì)立即收到一個(gè)錯(cuò)誤通知,指示這個(gè)操作是不允許的: IPT -policy INPUT DROPIPT -policy OUTPUT DROPIPT -policy FORWARD DROP這樣,結(jié)合上面的設(shè)置除了本地回環(huán)業(yè)務(wù)流外的其他網(wǎng)絡(luò)業(yè)務(wù)流都會(huì)被阻塞。如果防火墻主機(jī)只有一個(gè)網(wǎng)絡(luò)接口,轉(zhuǎn)發(fā)(FORWARD)策略當(dāng)然是沒(méi)有必要的。定義轉(zhuǎn)發(fā)策略

24、是為以后做準(zhǔn)備的,這樣,最好加入下面的代碼:IPT -t nat -policy PREROUTING DROPIPT -t nat -policy OUTPUT DROPIPT -t nat -policy POSTROUTING DROPIPT -t mangle -policy PREROUTING DROPIPT -t mangle -policy OUTPUT DROP默認(rèn)策略規(guī)則和最先匹配規(guī)則為準(zhǔn)默認(rèn)策略看起來(lái)似乎是最先匹配規(guī)則為準(zhǔn)的例外。默認(rèn)策略命令不依賴于其位置,它們本身不是規(guī)則。一個(gè)規(guī)則鏈的默認(rèn)策略是指,一個(gè)數(shù)據(jù)包與規(guī)則鏈上的規(guī)則都做了比較卻未找到匹配之后所采用的策略。默認(rèn)策

25、略用于定義默認(rèn)的數(shù)據(jù)包處理方式,它相對(duì)規(guī)則來(lái)說(shuō)需要首先在腳本中定義。假設(shè)策略命令在腳本最后執(zhí)行,此時(shí)如果防火墻腳本包含一個(gè)語(yǔ)法錯(cuò)誤導(dǎo)致它過(guò)早地退出,那么接受一切的默認(rèn)策略將生效。拒絕掃描排在最前面的狀態(tài)標(biāo)記列表列出的是必須進(jìn)行檢測(cè)的位,除了那些位以外,第二張狀態(tài)標(biāo)記列表列出了必須在檢測(cè)中設(shè)為匹配的位。IPT -A INPUT -m unclean -j DROP IPT -A INPUT p tcp -tcp-flags ALL NONE -j DROP # All of the bits are clearedIPT -A INPUT -p tcp -tcp-flags SYN,FIN SY

26、N,FIN -j DROP # SYN and FIN are both set# SYN and RST are both setIPT -A INPUT -p tcp -tcp-flags SYN,RST SYN,RST -j DROP# FIN and RST are both setIPT -A INPUT -p tcp -tcp-flags FIN,RST FIN,RST -j DROP# FIN is the only bit set, without the expected accompanying ACKIPT -A INPUT -p tcp -tcp-flags ACK,F

27、IN FIN -j DROP1PT -A INPUT -p top -top-flags ACK,PSH PSH -j DROP# PSH is the only bit set, without the expected accompanying ACK1PT -A INPUT -p tcp -tcp-flags ACK,URG URG -j DROP# URG is the only bit set, without the expected accompanying ACK利用連接狀態(tài)繞過(guò)規(guī)則檢測(cè)因?yàn)闋顟B(tài)模塊相對(duì)一些Linux防火墻來(lái)說(shuō)會(huì)需要更多的內(nèi)存,所以本章的防火墻示例,將會(huì)提供有狀

28、態(tài)模塊和沒(méi)有狀態(tài)模塊兩種選擇。使用狀態(tài)模塊可以讓正在進(jìn)行的交換在正常操作的情況下繞過(guò)標(biāo)準(zhǔn)防火墻規(guī)則。但是,如果一個(gè)連接的狀態(tài)表中某項(xiàng)發(fā)生循環(huán)或超時(shí),就必須轉(zhuǎn)而使用標(biāo)準(zhǔn)的規(guī)則。防火墻靜態(tài)和動(dòng)態(tài)規(guī)則資源限制的可測(cè)性和狀態(tài)表超時(shí)要求同時(shí)使用動(dòng)態(tài)和靜態(tài)規(guī)則。這種限制成為了大型商業(yè)防火墻的一個(gè)賣點(diǎn)。 限制的可測(cè)性問(wèn)題主要是因?yàn)?,一個(gè)大型的防火墻往往需要處理50,000100,000個(gè)同時(shí)的連接,這樣就有大量的狀態(tài)要處理。系統(tǒng)資源有時(shí)被用盡,這樣連接就無(wú)法建立起來(lái),這時(shí)就需要放棄新的連接或是讓軟件退回到無(wú)狀態(tài)模式。 還有一個(gè)就是超時(shí)問(wèn)題,連接狀態(tài)并不能永遠(yuǎn)保持。一些慢速或靜止態(tài)的連接的狀態(tài)信息有時(shí)會(huì)被清除

29、掉,這樣可以為更活躍的連接留出更多的空間。當(dāng)一個(gè)相關(guān)的新的數(shù)據(jù)包又傳來(lái)時(shí),狀態(tài)信息將被重新建立。同時(shí),在傳輸棧查詢連接信息并通知狀態(tài)模塊此數(shù)據(jù)包確實(shí)是已經(jīng)存在的一個(gè)數(shù)據(jù)交換連接的一部分時(shí),數(shù)據(jù)包的網(wǎng)絡(luò)流又回到無(wú)狀態(tài)模式下。if "CONNECTION_TRACKING" = "1" ; then $IPT -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT IPT -A OUTPUT -m state -state ESTABLISHED,RELATED -j ACCEPT # Using the

30、 state module alone, INVALID will break protocols that use # bi-directional connections or multiple connections or exchanges, # unless an ALG is provided for the protocol. At this time, FTP and # IRC are the only protocols with ALG support. IPT -A INPUT -m state -state INVALID -j LOG -log-prefix &qu

31、ot;INVALID input: " IPT -A INPUT -m state -state INVALID -j DROP IPT -A OUTPUT -m state -state INVALID -j LOG -log-prefix "INVALID output: " IPT -A OUTPUT -m state -state INVALID -j DROP fi源地址欺騙及其他不合法地址在眾多的源地址欺騙中,你可以確定識(shí)別出的一種欺騙,那就是它偽裝成了你的IP地址。下面的規(guī)則可以丟棄那些聲稱是來(lái)自你的機(jī)器的入站數(shù)據(jù)包:IPT -A INPUT -i

32、INTERNET -s IPADDR -j DROP正如第1章和第2章中介紹的那樣,A、B、C類地址范圍中都有一些私有IP地址專門留給局域網(wǎng)使用。這些地址不會(huì)在Internet中使用,路由器也不會(huì)使用這些私有地址去路由數(shù)據(jù)包。然而事實(shí)上,有些路由器確實(shí)會(huì)轉(zhuǎn)發(fā)含私有源地址的數(shù)據(jù)包。 另外,如果和你同在一個(gè)ISP子網(wǎng)(即與你在路由器的同一側(cè))中的某些人向外發(fā)送了帶有私有地址的數(shù)據(jù)包,即使路由器沒(méi)有轉(zhuǎn)發(fā),這些數(shù)據(jù)包你也可以看到。如果你的NAT或代理設(shè)置不當(dāng),和你在同一局域網(wǎng)下的機(jī)器也會(huì)泄漏私有地址。 下面三個(gè)規(guī)則不允許以任何A、B或C類私有網(wǎng)絡(luò)地址為源地址的數(shù)據(jù)包入站。在一個(gè)公用網(wǎng)絡(luò)中,這樣的數(shù)據(jù)包

33、不允許出現(xiàn):IPT -A INPUT -i INTERNET -s CLASS_A -j DROPIPT -A INPUT -i 1NTERNET -s CLASS_B -j DROPIPT -A INPUT -i INTERNET -s CLASS_C -j DROP下面的規(guī)則不允許來(lái)自回環(huán)網(wǎng)絡(luò)地址的數(shù)據(jù)包:IPT -A INPUT -i INTERNET -s LOOPBACK -j DROP因?yàn)榛丨h(huán)接口是內(nèi)部的本地軟件接口,任何聲稱來(lái)自這樣的地址的數(shù)據(jù)包都是故意偽造的。下面的兩個(gè)規(guī)則用于記錄匹配的數(shù)據(jù)包。防火墻的默認(rèn)策略是禁止一切,這樣的話,廣播地址也被默認(rèn)地丟棄了,如果需要使用,必須明

34、確地啟用它:1PT -A INPUT -i 1NTERNET -s BROADCAST_DEST -j LOG1PT -A INPUT -i INTERNET -s BROADCAST_DEST -j DROPIPT -A INPUT -i INTERNET -d BROADCAST_SRC -j LOG1PT -A INPUT -i INTERNET -d BROADCAST_SRC -j DROP澄清IP地址00O0的意義 地址O000保留作為廣播源地址。在Netfilter中,指明與任意地址(如any0,00000或者 O0000000)進(jìn)行匹配的規(guī)則不與廣播地址匹配。原因是廣播數(shù)據(jù)包在

35、其數(shù)據(jù)包頭中有一標(biāo)記位用以指示這是一個(gè)發(fā)給網(wǎng)絡(luò)上所有接口的廣播數(shù)據(jù)包,而不是一個(gè)點(diǎn)對(duì)點(diǎn)發(fā)給特定目的地址的單點(diǎn)傳送數(shù)據(jù)包。對(duì)廣播數(shù)據(jù)包的處理與非廣播數(shù)據(jù)包不同,不存在IP地址是000O的合法的非廣播數(shù)據(jù)包。下面兩條規(guī)則阻塞兩種形式的直接廣播:# Refuse directed broadcasts# Used to map networks and in Denial of Service attacksIPT -A INPUT -i INTERNET -d SUBNET_BASE -j DROPIPT -A INPUT -i INTERNET -d SUBNET_BROADCAST -j DR

36、OP 由于默認(rèn)禁止策略,以及部分依靠匹配目的地址來(lái)明確地接受某些數(shù)據(jù)包的防火墻規(guī)則,所有這些直接廣播消息都不會(huì)被防火墻接受。在局域網(wǎng)使用真實(shí)網(wǎng)絡(luò)地址進(jìn)行更大規(guī)模配置時(shí),設(shè)置這些規(guī)則將非常困難。 由于使用了變長(zhǎng)的網(wǎng)絡(luò)前綴,一個(gè)站點(diǎn)的網(wǎng)絡(luò)或主機(jī)地址域可能是,也可能不是一個(gè)字節(jié)的長(zhǎng)度。為了講起來(lái)簡(jiǎn)單,假設(shè)SUBNET_BASE是你的網(wǎng)絡(luò)地址,如19216810;SUBNET_ BROADCAST是你的網(wǎng)絡(luò)廣播地址,如1921681255。后面的章節(jié)中會(huì)為DHCP客戶機(jī)設(shè)置一些例外。在DHCP的客戶機(jī)及服務(wù)器端口初始化時(shí),廣播源和目的地址要被用到。多播地址只能被用做目的地址,下面的規(guī)則丟棄假冒的多播網(wǎng)

37、絡(luò)數(shù)據(jù)包:# Refuse Class D multicast addresses# illegal as a source addressIPT -A INPUT -i 1NTERNET -s CLASS_D_MULTICAST -j DROP合法的多播數(shù)據(jù)包都是UDP數(shù)據(jù)包下面的規(guī)則禁止了非UDP協(xié)議的多播數(shù)據(jù)包: IPT-A INPUT -iINTERNET -P ! udp d CLASS_D_MULTICAST -j DROP#保留地址塊在注冊(cè)之前是不能路由的。它們?cè)诰芙^服務(wù)攻擊中可以被用做源地址。防火墻可以阻塞以這些保留地址塊為源地址的數(shù)據(jù)包但是,因?yàn)樽?000年以后IANA開(kāi)始靈

38、活地 為站點(diǎn)分配這些地址塊,所以防火墻這樣運(yùn)作也變得有些不太現(xiàn)實(shí)了。下面的規(guī)則定義丟棄以那些地址塊為源地址的數(shù)據(jù)包:IPT -A INPUT -i INTERNET -s /8 -j DROPIPT -A INPUT -i INTERNET -s /16 -j DROPIPT -A INPUT -i INTERNET -s /24 -j DROP上面是一些應(yīng)該注意的地方,下面我們以一個(gè)腳本來(lái)講述本課程的重點(diǎn)本課涉及的腳本是為各種服務(wù)的應(yīng)用協(xié)議設(shè)立的防火墻規(guī)則主要是應(yīng)用于獨(dú)立的Linux主機(jī)。并且每個(gè)服務(wù)的客戶端規(guī)則以及服務(wù)端規(guī)則同時(shí)存在,盡

39、管并不是每一個(gè)規(guī)則都是必要的。完整的 iptables防火墻腳本應(yīng)該放在etcrcdrcfirewall或者etcinitdfirewall中,如下所示:#!/bin/bash/sbin/modprobe ip_conntrack_ftp CONNECTION_TRACKING="1" ACCEPT_AUTH="O" SSH_SERVER="O" FTP_SERVER="O" WEB_SERVER="O" SSL_SERVER="O" DHCP_CLIENT="1&

40、quot; IPT="/sbin/iptables" # Location of iptables on your system INTERNET="ethO" # Internet-connected interface LOOPBACK_INTERFACE="lo" # however your system names it IPADDR="my.ip.address" # your IP address SUBNET_BASE="my,subnet,base" # ISP network

41、 segment base address SUBNET_BROADCAST="my.subnet.bcast" # network segment broadcast address MY_ISP="my.isp.address.range" # ISP server & NOC address range NAMESERVER=".server.l" # address of a remote name server POP_SERVER="isp,pop,server" # addre

42、ss of a remote pop server MAIL_SERVER="isp.mail.server" # address of a remote mail gateway NEWS_SERVER="isp.news.server" # address of a remote news server TIME_SERVER="some.time.server" # address of a remote time server DHCP_SERVER="isp.dhcp.server" # address

43、of your ISP dhcp server LOOPBACK="127.0.O.O/8" # reserved loopback address range CLASS_A="1O.O.O,O/8" # Class A private networks CLASS_B="172.16.0.O/12" # Class B private networks CLASS_C="/16" # Class C private networks CLASS_D_MULTICAST="224.

44、0.O.O/4" # Class D multicast addresses CLASS E RESERVED NET="240.O.O.O/5" # Class E reserved addressesBROADCAST_SRC="0.O.O.O" # broadcast source address BROADCAST_DEST="55" # broadcast destination address PRIVPORTS="0:1023" # well-known, priv

45、ileged port range UNPRIVPORTS="1024:65535" # unprivileged port range SSH_PORTS="1024:65535" NFS_PORT="2049" LOCKD_PORT="4045" SOCKS_PORT="1080” OPENWINDOWS_PORT="2000" XWINDOW_PORTS="6000:6063" SQUID_PORT="3128"# Enable broad

46、cast echo Protection通知內(nèi)核將ICMP反射請(qǐng)求直接丟棄到廣播地址或多播地址。echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts# Disable Source Routed Packets源路由現(xiàn)在很少被合理地使用,防火墻一般會(huì)丟棄所有源路由數(shù)據(jù)包,下面的命令將丟棄源路由數(shù)據(jù)包:for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > f done# Enable TCP SYN Cookie Protection TCP的S

47、YN緩沖(cookies)是一種快速檢測(cè)和防御SYN洪水攻擊的機(jī)制,下面的命令可以啟用SYN緩沖:echo 1 > /proc/sys/net/ipv4/tcp_syncookies# Disable ICMP Redirect Acceptance 鄰近的路由器會(huì)向主機(jī)發(fā)送ICMP重定向消息,目的是通知主機(jī)找到了一條更短的路由路徑。此時(shí),主機(jī)和兩個(gè)路由器都在同一網(wǎng)絡(luò),原來(lái)的路由器將新的路由器作為下一跳并向其發(fā)送數(shù)據(jù)包。 路由器可以向主機(jī)發(fā)出重定向消息,但主機(jī)不會(huì),主機(jī)接收重定向消息并將新網(wǎng)關(guān)加入到路由緩存中。也有個(gè)別的情況,如RFC 1122“Requirements for Inte

48、rnet Hosts-Communication Layers”3222節(jié)中提到“如果重定向消息所標(biāo)示的新網(wǎng)關(guān)地址所在的網(wǎng)絡(luò),與該消息傳送時(shí)經(jīng)過(guò)的網(wǎng)絡(luò)不同,那么重定向消息應(yīng)該被丟棄INTRO:2,附錄A,或者,如果重定向消息的發(fā)送源對(duì)于指定的目的地址來(lái)說(shuō),不是第一跳網(wǎng)關(guān),重定向消息也要被丟棄(見(jiàn)331節(jié))?!眴⒂弥囟ㄏ虻拿钊缦拢篺or f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > f done# Don't send Redirect Messages for f in /proc/sys/net/ip

49、v4/conf/*/send_redirects; do echo 0 > f done# Drop Spoofed Packets coming in on an interface, which, if replied to,# would result in the reply going out a different interface. 一個(gè)入站的數(shù)據(jù)包中帶有一個(gè)源地址如果主機(jī)中的數(shù)據(jù)包轉(zhuǎn)發(fā)表指出,用該數(shù)據(jù)包中的這個(gè)源地址作為目的地址轉(zhuǎn)發(fā)另一個(gè)數(shù)據(jù)包卻不能將其從入站數(shù)據(jù)包進(jìn)入的接口發(fā)出去的話,該入站數(shù)據(jù)包將會(huì)被自動(dòng)丟棄。但路由器中一般不啟用這一地址確認(rèn)功能,下面的命令會(huì)去掉這

50、項(xiàng)功能:for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > f done# Log packets with impossible addresses. 把不可能的包記入內(nèi)核日志for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo 1 > f done# Remove any existing rules from all chainsIPT FIPT -t nat -F IPT -t mangle flushIPT XIPT -t nat XIPT -t m

51、angle XIPT -policy INPUT ACCEPTIPT -policy OUTPUT ACCEPTIPT -policy FORWARD ACCEPTIPT -t nat -policy PREROUTING ACCEPTIPT -t nat -policy OUTPUT ACCEPTIPT -t nat -policy POSTROUTING ACCEPTIPT -t mangle -policy PREROUTING ACCEPTIPT -t mangle -policy OUTPUT ACCEPT if "1" = "stop" th

52、en echo "Firewall completely stopped! WARNING: THIS HOST HAS NO FIREWALL RUNNING." exit 0 fi# Unlimited traffic on the loopback interfaceIPT -A INPUT -i lo -j ACCEPTIPT -A OUTPUT -o lo -j ACCEPT# Set the default policy to dropIPT -policy INPUT DROPIPT -P OUTPUT DROPIPT -policy FORWARD DROP

53、IPT -t nat -policy PREROUTING DROPIPT -t nat -policy OUTPUT DROPIPT -t nat -policy POSTROUTING DROPIPT -t mangle -policy PREROUTING DROPIPT -t mangle -policy OUTPUT DROP# #Stealth Scans and TCP State Flags# UncleanIPT -A INPUT -m unclean -j DROP# All of the bits are clearedIPT -A INPUT -ptcp -tcp-fl

54、ags ALL NONE -j DROP# SYN and FIN are both setIPT -A INPUT -ptcp -tcp-flags SYN,FIN SYN,FIN -j DROP# SYN and RST are both setIPT -A INPUT -p top o-tcp-flags SYN,RST SYN,RST -j DROP# FIN and RST are both setIPT -A INPUT -p tcp -tcp-flags FIN,RST FIN,RST -j DROP# FIN is the only bit set, without the e

55、xpected accompanying ACKIPT -A INPUT -p tcp -tcp-flags ACK,FIN FIN -j DROP# PSH is the only bit set, without the expected accompanying ACKIPT -A INPUT -p tcp -tcp-flags ACK,PSH PSH -j DROP# URG is the.only bit set, without the expected accompanying ACKIPT -A INPUT -ptcp -tcp-flags ACK,URG URG -j DROP# #Using Connecti6n State to By-pass Rule Checking利用連接狀態(tài)繞過(guò)規(guī)則檢測(cè)if "CONNECTION_TRACKING" = "1" ; then IPT -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT IPT -A OUTPUT -m state -state ESTABL

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論