Linux操作系統的安全性是眾所周知的,所以,現在很多企業的服務器,如文件服務器、WEB服務器等等,都采用的是Linux的操作系統。筆者所在的企業,有包括Oracle數據庫服務器、文件備份服務器、郵件服務器、WEB服務器也都是采用Linux的服務器系統。今天,我就談談Linux是通過哪些技術來保障服務器的安全,來加強對網絡的訪問控制。
Linux內置防火牆主要是通過包過濾的手段來提高對網絡的管理控制功能,從而提高網絡與服務器的安全。
一、 Linux防火牆的工作原理
我們設想一下,一台Linux主機一般會作哪些數據包相關的工作。其實,我們可以把一台Linux形象的比喻成一個地鐵車站。一個地鐵車站一般有三個口子,一個是進口,乘客需要去做地鐵的話,必須通過這個地鐵的進口,而且必須憑合法的票子才能進去。第二個是出口,若乘客需要離開地鐵站的話,則也必須憑著票子出站。三是一個中轉的接口,也就是說,在地鐵的中轉站中,你可以直接通過過道到另外一條線上去。
而一台Linux主機也有三個口子。一個是進口(INPUT),到這台主機的任何數據包都需要通過這個接口才能夠進入Linux系統的應用程序空間。第二個是出口(OUTPUT),從應用程序發送出去的任何數據包都必須通過這個出口,才能夠進入到Linux系統的內核,讓它把數據發送出去。第三個是轉發接口(FORWARD),主要用來進行數據包的轉發。
在Linux主機上要實現包過濾,其實也就是在這三個口子上添加包過濾條件。這就好像在每個口子上設置“驗票員”。當“乘客”手裡的票是合法的,則“驗票員”就允許其通過;若這票是不允許的,則“驗票員”就會拒絕其通過這個口子。通過這種方式,我們網絡管理員就可以很好的管理網絡中傳遞的數據包,並且對於一些服務器的防問權限進行合理且有效的控制。
如有時候我們為了防止DDOS攻擊,我們就可以設置讓所有主機都拒絕ICMP協議。如此的話,任何一台主機企圖ping局域網內的任何一台Linux電腦的話,局域網內的任何主機都不會有響應。而若有黑客把局域網內的主機當作肉雞,企圖通過他們來實現DOS攻擊的時候,由於我們在出站接口(OUTPUT接口)過濾了ICMP協議,所以,這個PING命令也根本不會傳遞到局域網中去。如此的話,就可以從根源上保護網絡的安全。
二、 Linux防火牆的配置方法
Linux防火牆基本上是通過一條iptables命令來實現具體的配置。如我們現在為了防止局域網內的機器使用ping命令。這是一種很好的防止DDOS攻擊的方法。應為要實現DDOS攻擊的話,則首先需要在局域網內部尋找肉雞,讓多台肉雞同時采用PING命令PING服務器,直到服務器因為資源耗竭而當機。現在若把所有Linux主機的PING命令都禁用掉的話,則就可以最大程度的防治DDOS攻擊的危害。
Iptables –A OUTPUT –P icmp –j DROP
通過這條命令,就可以實現禁用本機的PING命令。
命令iptables就是防火牆包過濾策略的配置命令。防火牆的過濾規則,就是通過這個簡單的命令來實現的。後面的參數-A則表示添加一個過濾條件;-P表示一種協議類型;-J表示我們的目標。上面的這條命令的意思就是在Linux主機的出口上,加上一條過濾語句,當數據包的協議類型是ICMP的話,則全部丟棄。
不過ICMP有一個特性。我們一般PING一台主機的話,則對於這台主機來說,首先其需要通過進站接口,把數據包傳遞到上層;然後,又要利用出站接口,把回應信息發送出去。如果任何一個接口不通,如只收到信息而沒有回應的話,則對與主ping方來說,就顯示的是目的地不可大的信息。
以上這個條命令我們是在出口上加了限制語句,上面我們說過,一共可以在Linux主機上的三個接口,包括進站進口、出站接口與轉發接口,在內的任何一個接口上配置包過濾條件,以實現對防火牆的管理控制。在下面例子中,筆者將給大家舉一個WEB服務器的例子,看看如何通過Linux主機的防火牆來管理WEB服務器,提高其安全性。
三、 Linux防火牆的配置實例
我們該如何利用Linux操作系統自帶的防火牆來提高網絡的管理控制功能呢?具體的來說,我們可以分三步走。一是先在Linux服務器上開一個後門,這個後門是專門給我們網絡管理員管理服務器用的。二是把所有的進站、出站、轉發站接口都關閉,此時,只有通過我們上面開的後門,管理員才能夠遠程連接到服務器上,企圖任何渠道都不能連接到這台主機上。三是根據我們服務器的用途,把一些需要用到的接口開放出去。
下面筆者就以一個WEB服務器為例,談談如何設置防火牆,才能夠提高這台服務器的安全性,並且,在提高安全性的同時,也不影響我們網絡管理員對其的訪問控制。
第一步:開後門
網絡管理員一般是通過SSH方式來管理Linux操作系統。所以,我們首先需要開一個後門,允許網絡管理員通過SSH方式遠程登錄到服務器,對這台服務器進行必要的維護與管理。
Iptables –A INPUT –P tcp –d 192.168.0.2 –dport 22 –j ACCEPTIptables –A OUTPUT –P tcp –S 192.168.0.2 –dport 22 –j ACCEPT
為了達到這個目的,我們可以利用兩條語句來實現。我們這裡假設我們WEB服務器的IP地址為192.168.0.2。
第一條語句的意思是,在進站接口上,允許網絡管理員通過TCP協議與22號端口,訪問主機。一般SSH方式采用的就是22號端口與TCP協議。這條語句的作用就是讓網絡管理員可以連接到WEB服務器上去。但是,這還不夠,我們若想要遠程管理WEB服務器的話,則就需要實現相互交互的功能。也就是說,我們還需要WEB服務器能夠給我們回應一些消息。此時,我們就還需要配置第二條語句。
上面第二條語句的意識就是允許WEB服務器通過22號端口與TCP協議,發送一些數據出去。如此的話,我們網絡管理員就可以受到WEB服務器的一些回應信息。
第二步:關閉所有接口
Iptables –P INPUT –j DROPIptables –P OUTPUT –j DROPIptables –P FORWARD –j DROP
以上三條命令的作用就是把WEB服務器上的三個接口全部關閉。但是,此時因為我們在第一步開了一個後門,所以,事後網絡管理員仍然可以通過SSH這個方式登錄到服務器上去,對其進行遠程訪問。采用這些命令把各個接口關閉後,我們就無法通過HTTP、FTP等方式訪問服務器。
第三步:分析服務器的用途並添加允許條件
把各個接口關不後,我們還需要為其添加一些必要的條件,允許某些特定類型的數據包通過。否則的話,其他人不是不能通過網絡訪問WEB服務器,那不是白搭了嗎?
所以,接下去的任務,我們就是需要分析服務器的類型。我們現在配置的是一台WEB服務器,而WEB服務器一般是通過HTTP方式與80端口進行訪問的。默認情況下,其用到的就是TCP協議與80端口。所以,我們只需要在進口與出口上,允許協議是TCP、端口號是80的數據包通過,就可以實現我們的目標了。
Iptables –A INPUT –P tcp –d 192.168.0.2 –dport 80 –j ACCEPTIptables –A OUTPUT –P tcp –S 192.168.0.2 –dport 80 –j ACCEPT
通過如上的配置,就可以實現我們的需求
四、 Linux防火牆的配置需要注意的地方
在使用Linux防火牆來管理企業網絡的時候,筆者給大家提一些建議。
一是根據最小權限的安全與控制設計原則,我們在防火牆設計的時候,需要先把所有的接口先全部禁用掉。然後,再根據服務器的類型,添加一些允許數據包通過的語句。如此的目的,是為了保障服務器上只允許一些特定的協議與數據包通過。如此做的話,就可以最大限度的保障服務器與企業網絡的安全。如通過上面如此配置的服務器,無法使用FTP協議訪問服務器,也就杜絕了非法訪問者企圖利用FTP漏洞來攻擊WEB服務器。同時,也禁止了ICMP協議,如此的話,就可以有效的防止DDOS攻擊等等。
二是有時候會碰到應用程序與防火牆無法協作的問題。如在Linux服務器上部署一個ERP服務器,若同時打開了防火牆的話,則可能就無法連接上服務器。其實,這不是防火牆或者ERP服務器產生了什麼沖突,而是我們沒有配置好防火牆而已。一般情況下,筆者建議先把防火牆禁用掉,把ERP服務器先配置成功、其他用戶可以連接上服務器後,再啟用防火牆。在啟用防火牆的時候,我們需要清楚,這個ERP服務器到底采用了哪些協議與端口來進行數據包的傳遞,然後再配置防火牆。大部分的時候,都是因為我們不熟悉某個服務器到底在采用哪些協議與端口,才造成客戶端連接的錯誤