簡介
WEB服務器是Internet上最暴露的服務器。為了讓客戶/目標用戶群訪問提供的信息,WEB服務器必需是Internet上的任何接入點都可以訪問的。與其它諸如DNS和FTP等公共服務相比,WEB對黑客高手更有誘惑力,因為一個成功地侵入一個網站的人可以更改主頁從而讓別人更加意識到他的存在。這些入侵事件能夠讓一個公司失去客戶的信任,尤其是當一些敏感數據(如信用卡詳細信息等)被竊取甚至被公開時就更加嚴重。
如果說用於防止從Internet對內部網絡進行攻擊的防火牆是最重要網絡安全領域的話,WEB服務器應該說是第二個需要高度安全的領域了。本文的目標就是如何只用45分鐘的時間就可以在Linux系統上配置一個安全的WEB服務器。當然,您也可以在其他操作系統上完成同樣的事情。下面是基於SuSE Linux 6.4發布的一個例子。
安全區域
服務器安全由幾個安全區域組成,為了保證允許條件下的最高度的安全保護,安全必需在每個區域都予以一致的實現。
1. 基礎設施區
基礎設施區域定義服務器在網絡中的位置。這個區域必需能夠防止數據竊聽、網絡映射和端口掃描等黑客技術的威脅。而且,可以跟蹤對一個暴露的WEB服務器的成功入侵,因為被侵入的服務器可能會用來作為攻擊其它重要的服務器的基地(這種方式在DoS攻擊中最為常見)。
在這一端,所有提供Internet服務的服務器都通過一個集中部件保護起來並且位於一個隔離的網絡是必需的。這個隔離的網絡稱為非軍事區(DMZ)。具有保護功能的組件可能是一個復雜的防火牆或一個簡單的路由器(這個路由器配置了具有很強限制的包過濾規則)。因此,僅僅指定的服務器服務才是允許訪問的。
一般DMZ會采用一個具有端口安全和報文洪水保護的轉換開關,這種方式可以保證DMZ的高度安全。
如果您關心物理安全,那麼您必需保證服務器安裝在一個安全的房間裡(或數據處理中心)並且所有的電源、電話線和網線等都必需得到物理上的保護。
2. 網絡協議區
網絡通信一般指的都是TCP/IP通信,操作系統內核對通信負責並且保證一個透明的通信流。然而,一些函數或者協議的易受攻擊點可能會被用來發起攻擊或破壞行為。因此,內核必需經過必要的配置,以便阻擋這些類型的攻擊手段。雖然位於服務器前面的防火牆或路由器可以防止很多類型的攻擊,但一些WEB服務器的設置也必需做一些相應的調整。
防止SYN洪水攻擊是很關鍵的,在所有的操作系統中,Linux提供了一種稱為SYN
cookies的最有效解決方案。此外,ICMP重定向和對廣播地址的ping操作以及IP源路由包也應該被拒絕。適用附加的內核過濾函數可以增加安全級別。
3. 服務區
服務區定義需要哪些服務。通過“如果不是指定需要的全部禁止”的安全策略,服務器上僅僅配置完成必要的操作所必需的服務,否則就會為攻擊者提供更多的攻擊點。
僅適用可以保證足夠安全級的服務:沒有充分認證能力的服務(如:rexec)或者傳輸未經過加密的敏感數據的服務(如telnet、ftp或通過WWW傳輸信用卡敏感數據)都應該用更安全的相應服務所替代(如SSH、SSLftp或HTTPS)。
4. 應用區
為安全起見,每個服務都必需單獨配置。一個配置的不好的郵件服務器可能會被用來發送垃圾郵件,配置不好的WEB服務器可以執行所有的系統命令。注意,千萬不要創建具有高特權的服務(root)。
您必需仔細研讀您所適用的軟件的操作手冊中的相關內容才可以更安全地配置您的應用。
5. 操作系統區
最後的保護機制是操作系統自身。如果如果應用區的安全方法配置合理的話,即使入侵者成功地進入計算機系統也沒有足夠的管理權限完成破壞工作。程序的安裝,尤其是高特權的程序,應該限制在系統操作的絕對需要范圍內。許多高特權的程序可以通過更高級別的認證來限制用戶的濫用,因為系統中的標准用戶帳號根本不需要使用這些程序。但這還遠遠不夠,萬一攻擊者成功地進入計算機系統,應該存在一個檢測入侵的機制。這被稱為“基於主機的入侵檢測”。當然,最好還要能夠監視和記錄系統中的文件操作,以便了解入侵者的真正意圖。當然也不能忽視經常性地備份,並且不要丟棄舊的備份文件。這種做法不僅可以用來配置備份服務器和避免數據丟失,它還可以用來跟蹤系統中文件的操作情況。如果有幾個管理員同時管理一個服務器,那麼一個記錄誰執行過哪些操作的機制可以在下面提及。
----------------------------------------------------------------
想定
Internet需要配置一台自己的WEB服務器,由於沒有自己的安全基礎設施,應該在WEB服務器前面放一台配置了相應過濾規則的路由器。這台WEB服務器僅僅提供WWW和HTTPS服務,但是,它當然也需要具有遠程控制特性。另外,這台WEB服務器最好還能夠發送郵件。由於Linux服務器和網頁是由三個不同的管理員維護的,所有的管理操作都應該保證在以後進行日志分析是更容易理解。
-----------------------------------------------------------------
實現
前面段落中說明的安全WEB服務器的需求如何實現呢?下面的例子說明了一種在SuSE Linux 6.4發布的服務器上的實現方法。為了實現上述想定,我們決定選擇SSH管理和Apache WEB服務器。
第一步:配置路由器
每一個流行的路由器都提供配置過濾列表的功能。您必需配置下面的簡單規則:
+---------------------------------------------------------------+
------------------------過濾規則-------------------------------
+---------------------+------------------+---------------------+
-------來源------------------目標------------服務-----------
+---------------------+------------------+---------------------+
任何位置-------------web服務器---------WWW, HTTPS, UDP highport,
---------------------------------------ICMP types 0 + 3----
+---------------------+------------------+--------------------+
管理員---------------web服務器---------SSH-----------------
+---------------------+------------------+--------------------+
web服務器--------- --任何位置----------DNS, SMTP-----------
+---------------------+------------------+--------------------+
web服務器------------路由器------------SSH或telnet----------
+---------------------+------------------+---------------------+
路由器的操作手冊會提供如何進行上述配置的詳細信息。這裡我建議使用Cisco路由器,因為對於這種情況它非常容易配置,並且還在IOS的第12版以後提供了SSH的加密服務。
第二步:安裝Linux服務器
執行SuSE 6.4的標准安裝。處於安全考慮,至少應該為/、/var、/tmp、/home和/usr/local安裝5個分區。後面會定義一些mount這些分區的特殊選項,這些選項可以保證系統具有更高的本地安全性能。
現在是選擇需要安裝哪些程序包的時候了。選擇最小系統安裝,然後手工加入下面一些必要的程序包:
在Basis (a)中選擇compat
在Applications (ap)中選擇sudo
在Network (n)中選擇apache, bindutil; 去掉postfix和sendmail
在Security (sec)中選擇firewals, hardensuse, mod_ssl, scanlogd, seccheck, secumod, tripwire.
其它一些您認為需要的程序包,如數據庫和為Apache設計的一些模塊。
然後完成安裝。
第三步:更新
在配置之前,檢查一下是否可以獲得這些安裝包的更新版本,如果有,需要的話最好進行更新。
您可以在這裡找到SuSE 6.4的更新信息。
第四步:Linux的本地配置
在開始真正工作之前,必需首先執行所有的諸如輸入服務器名、配置網絡接口和設置用戶等標准Linux配置。在初始情況下,所有不需要的服務都是非活動狀態的。特權程序的授權回收工作並不是必需的,您可以通過harden_suse工具簡單地實現這個任務:
erde#harden_suse yes
這個命令在很多地方更改了系統的配置,這些更改都記錄在/etc/harden_suse.log日志文件中,這些操作可以通過/etc/undo_harden_suse腳本予以恢復。使用其它Linux發布的用戶可應使用Bastille腳本或者其它類似的程序。
隨後,所有網絡訪問服務(除了SSH)都被禁止,僅僅保留了下面的授予特權的suid和sgid程序:
erde# find / -perm -04000 -type f -exec ls -ld {} ;
-rwsr-x--- 1 root trusted 23840 Mar 11 11:26 /bin/ping
-rwsr-x--- 1 root trusted 30750 Mar 11 11:37 /bin/su
-rwsr-x--- 1 root trusted 21268 Mar 11 11:10 /usr/bin/crontab
-rwsr-xr-x 1 man root 85460 Mar 11 11:24 /usr/bin/man
-rwsr-xr-x 1 root root 15308 Mar 11 11:26 /usr/bin/rcp
-rwsr-xr-x 1 root root 11052 Mar 11 11:26 /usr/bin/rlogin
-rwsr-xr-x 1 root root 8104 Mar 11 11:26 /usr/bin/rsh
-rwsr-x--- 1 root shadow 38340 Mar 11 11:50 /usr/bin/gpasswd
-rwsr-x--- 1 root trusted 22184 Mar 11 11:50 /usr/bin/newgrp
-rwsr-xr-x 1 root shadow 27920 Mar 11 11:50 /usr/bin/passwd
-rwsr-x--- 1 root trusted 56600 Mar 11 18:41 /usr/bin/sudo
-rwsr-xr-x 1 root root 20300 Ma