作為例子,我們來為一個普通家庭用戶創建一個防火牆。假設該家庭用戶一般將自己的計算機用於Internet浏覽、電子郵件等。我們所要做的就是允許所有必須的連接通過,而禁止所有不相關的連接。以下是防火牆配置文件的內容: 1 *filter 2 :INPUT DROP [0:0] 3 :FORWARD DROP [0:0] 4 :OUTPUT DROP [0:0] 5 6 # 允許本地loopback連接 7 -A INPUT -i lo -j ACCEPT 8 9 # drop非法連接 10 -A INPUT -m state --state INVALID -j DROP 11 -A OUTPUT -m state --state INVALID -j DROP 12 -A FORWARD -m state --state INVALID -j DROP 13 14 # 允許所有已經建立的和相關的連接 15 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 16 -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 17 18 # 允許連接的ISP的DNS服務器 19 -A OUTPUT -d 2.3.4.10 -m state --state NEW -p udp --dport 53 -o eth0 -j ACCEPT 20 -A OUTPUT -d 2.3.4.11 -m state --state NEW -p udp --dport 53 -o eth0 -j ACCEPT 21 22 # 允許向外連接到Web服務器 23 -A OUTPUT -d 0/0 -m state --state NEW -p tcp --dport http -o eth0 -j ACCEPT 24 -A OUTPUT -m state --state NEW -p tcp --dport https -o eth0 -j ACCEPT 25 26 # 允許向外連接到ISP的SMTP和POP3服務器 27 -A OUTPUT -d 2.3.4.5 -m state --state NEW -p tcp --dport smtp -o eth0 -j ACCEPT 28 -A OUTPUT -d 2.3.4.5 -m state --state NEW -p tcp --dport pop3 -o eth0 -j ACCEPT 29 30 # 記錄其它試圖向外進行的連接 31 -A OUTPUT -o eth0 -j LOG 32 # 缺省情況下是DROP向外的連接 33 34 COMMIT 有關具體命令行的意義參照上文很容易就可以理解,這裡就不在贅述。事實上,只要熟悉了某一特定環境下防火牆的設置,我們就可以比較容易地為其它的應用環境創建相應的防火牆。
編後語: 這裡,我們介紹了在Linux上使用iptables創立防火牆的基本方法。實際上,由於需求不同,因此並不存在什麼完全的防火牆指南。我們只能在了解了基本概念和術語後再自己進行深入的學習。 隨著計算機技術的發展,系統安全日益成為一個熟悉而又陌生的話題。因為,現在的計算機世界正日漸成為網絡功能的技術集合,但是從概念上來看,網絡和安全又是根本矛盾的。網絡的設計目的是盡可能地實現一台計算機的開放性,而安全則要盡可能地實現一台計算機的封閉性。 因此,在現實中討論的安全性,實際上是要在二者中尋找到一個平衡點,一個讓用戶可以接受的平衡點。從這個意義上講,計算機安全是一個無窮無盡的主題,因此,在計算機領域沒有終極的安全方案。也就是說,對於計算機來說,安全本身就是一個相對的概念。 此外,建議學習一些有關TCP/IP方面的知識。如果想要了解更全面的有關iptables的知識,可以查看以下鏈接,這是一個非常不錯的iptables教程: http://iptables-tutorial.frozentux.net/