雖然Linux操作系統具有很多優點,其安全性也較高,但是你不應當由此產生一種虛假的安全感,因為你的Linux系統的安全性仍舊可能受到損害。現在就讓我們來看看如何通過使用IP鏈(IPchains)來建立Linux系統的防火牆,保護你的系統不受侵害。
先假設你已經具備了一些關於因特網的基本知識。應當說,熟悉像IP地址、TCP端口和網絡傳輸數據之類的詞匯是很有用處的。對防火牆有一個大概的了解也是十分有必要的。
■命令:
我們需要確立起一系列的規則,這樣IP鏈才能進入來來往往的網絡路徑。每一條規則都被置於三鏈之一,這三個鏈分別為:存放輸入數據的輸入鏈、存放輸出數據的輸出鏈和傳輸鏈。
每增加一條規則,都要從IP鏈開始,並且要增加下面的某些或全部步驟。附加(Append)、刪除(Delete)、插入(Insert)和替換(Replace),這些命令通常是跟在起始的IP鏈命令之後,並且指示程序應當把規則命令添加在哪條鏈上以及如何添加。添加時,以-A、-D、-I,或者-R開始,這些字母的後面再加上鏈的名稱(輸入鏈或輸出鏈)。
當你要使用插入命令時,必須在要加入該命令的位置上,在鏈的名稱後面,具體指定行號。
在使用替換命令時,需要指定被替換的行號,使用刪除命令的時候,也必須指定刪除的行號。
在使用刪除選項時,無須在行號後面再輸入什麼別的內容。你只要鍵入ipchains -L,就可以發現命令所作用的行號。
■協議(Protocol):
在這裡你要針對每一條規則命令具體地指明某種協議。在大多數情形下,使用TCP/IP協議。
也有可能你不想讓你的計算機對另一台計算機發出的Ping信號做出反應。為了做到這一點,需要具體指定ICMP(互聯網控制報文協議)。在具體地指定某個協議的時候,要使用-p命令,如:-p icmp。
■源(Source):
源可以確定從某個特定的IP地址而來的路徑以及使用-s命令的端口。如果你知道一個標准的IP地址,就可以直接使用IP地址,或者干脆指定一個域名(比如www.ccidnet.com)。假如你想指定任意一個地址,不妨用0.0.0.0/0。
我們可以在IP地址的後面用數字來指定某一個端口(比如110),也可以用服務器的名稱(pop3)來指定某一個端口。使用冒號可以將兩個端口數字分隔開,這樣就能指定一連串的端口。例如:
-s mail.mailserver.com pop3
-s 127.0.0.1 139:164
■目的(Destination):
用法與源地址是一樣的,只要指定目的地址和端口即可。
■跳轉(Jump):
我們需要了解的最後一個選項是-j命令。這個命令告訴防火牆,如果一項規則命令與正在輸入的數據相匹配時,防火牆應該采取什麼步驟。在大多數情況下,這種步驟就是接受或拒絕。舉個例子吧,假如你想拒絕某組與命令相符的數據時,防火牆就跳轉至拒絕。如果一組數據不符合某條命令規則,該數據就會往前進入下一個命令。如果沒有任何規則符合這組數據的話,數據就會在缺省的狀態下被拒絕。
當然還有一些其它的選項和命令能夠與IP鏈的命令一起使用。假如你想深入了解更多的信息,可以在命令行欄鍵入ipchains -h。
建立防火牆
建立Linux系統的防火牆的核心部分就是在你接近你想要訪問的服務器的同時,又要阻止其它服務器接近你的系統。這裡我們提出一些忠告。
首先,你在建立你的防火牆時盡量對所有的“拒絕”規則使用-I命令。當某條規則將一組數據擋在外面的時候,就會產生一行信息,加入到你的核心程序信息記錄中(變量/記錄/核心程序/信息)。你讀一讀這個文件就能明白為什麼一組數據會被擋在外面。一條記錄詳細說明了被采取的步驟、能解釋某條規則源目的鏈、源地址和端口以及目的地址和端口,因而你能運用這些信息來調整防火牆。可以按照你想得到的方式擁有任何東西,這時就不再需要-I命令了。
其次,建立防火牆可以擋住所有流入的Syn數據。Syn數據是用於啟動鏈接的數據組,但它們不應該出現在大部分的桌面系統上。可以這樣運用-y命令:
ipchains -I input 1 -p tcp -y -j DENY
你還可用下面這條命令擋住ICMP數據:
ipchains -I input 2 -p icmp -j DENY
把這兩條規則放在最前面,就能保證系統不會隨便接收這些數據。下一步,該擋住像FTP、telnet、smtp和pop3之類的一些常用的服務器端口:
ipchains - A input -p tcp - s 0.0.0.0/0 ftp DENY
ipchains - A input -p tcp - s 0.0.0.0/0 telnet DENY
ipchains - A input -p tcp - s 0.0.0.0/0 smtp DENY
ipchains - A input -p tcp - s 0.0.0.0/0 pop3 DENY
ipchains - A input -p tcp - s 0.0.0.0/0 nntp DENY
如果在連接發送郵件的服務器時出現問題,可以在smtp 和pop3 DENY的規則前面插入一條規則,這樣便能使所謂的DENY規則失去作用。不過要保證這條規則的明確性,因為這樣才能使得DENY規則失效。通常來說,明確地指明一個IP地址是個不錯的做法:
ipchains - I 3 input - 1 - p tcp - s mail.mailserver.com pop3 - j ACCEPT
ipchains - I 4 input - 1 - p tcp - s mail.mailserver.com smtp - j ACCEPT
可以用你發送郵件的服務器的地址替代域名“mail.mailserver.com”,對於一個新的服務器或者任何一個鏈接有困難的FTP網址,都可以這樣做。
雖然這些規則是一些基本性的,但有助於建立一個安全有效的防火牆。我們可以在像Gibson Research Center (http://www.grc.com) 和DSL Reports (http://www.secure-me.net/) 之類的網站檢測防火牆的安全和有效性。上面兩個網站都可以免費提供關於因特網的端口查詢。一旦找到了有用的規則,就用ipchain-save命令將這些規則保存到某個文件中。
當重新啟動系統的時候就可以運用這個保存了規則的文件。鍵入ipchains-save>/etc/ipchains.rules就能保存防火牆設置數據。在重新啟動你的系統後保持有關防火牆的設置時,請鍵入ipchains-restore>/etc/ipchains.rules 。當你的系統斷電或者重新啟動時,Linux系統不會自動保存這些設置數據。
當重新啟動系統的時候就可以運用這個保存了規則的文件。鍵入ipchains-save>/etc/ipchains.rules就能保存防火牆設置數據。在重新啟動你的系統後保持有關防火牆的設置時,請鍵入ipchains-restore>/etc/ipchains.rules 。當你的系統斷電或者重新啟動時,Linux系統不會自動保存這些設置數據。