史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 網路軟硬體架設技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-10-18, 12:04 AM   #1
mancool 帥哥
長老會員
 
mancool 的頭像
榮譽勳章
UID - 2396
在線等級: 級別:11 | 在線時長:167小時 | 升級還需:25小時級別:11 | 在線時長:167小時 | 升級還需:25小時級別:11 | 在線時長:167小時 | 升級還需:25小時級別:11 | 在線時長:167小時 | 升級還需:25小時級別:11 | 在線時長:167小時 | 升級還需:25小時級別:11 | 在線時長:167小時 | 升級還需:25小時
註冊日期: 2002-12-06
住址: 姆大陸
文章: 1356
現金: 776 金幣
資產: 39984 金幣
Wink 一個安全WEB服務器的安裝

一個安全WEB服務器的安裝
簡介
  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提供了一種稱為SYNcookies的最有效解決方案。此外,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 Mar 11 11:26 /usr/sbin/traceroute
-rwsr-xr-x 1 root root 6132 Mar 11 09:36 /usr/lib/pt_chown
erde# find / -perm -02000 -type f -exec ls -ld {} ;
-rwxr-sr-x 1 root tty 9452 Mar 11 11:26 /usr/bin/write
-rwxr-sr-x 1 root tty 9796 Mar 11 11:49 /usr/bin/wall

  下一階段工作是編輯全局配置文件/etc/rc.config,將下面腳本行中的"no"改成"yes":

  START_HTTPD="yes"
  START_FW="yes"
  START_SCANLOGD="yes"

  這樣就會保証Apache、Scanlogd和SuSE防火牆在計算機啟動時自動執行。現在我們繼續配置本地防火牆,將/etc/rc.config.d/firewall.rc.config(個別變量的細節描述在這個文件中可以找到)文件中的對應行改成下面的形式:

  FW_DEV_WORLD="eth0" # query no. 2
  FW_SERVICES_EXTERNAL_TCP="www https" # query no. 9
  FW_SERVICES_TRUSTED_NETS="1.1.1.0/24" # query no. 10 - 1.1.1.0 is the net where the administrators connect from.
  FW_TRUSTED_SERVICES_TCP="ssh" # query no. 10
  /sbin/SuSEfirewall命令可以更新防火牆規則。這些規則會在每個系統啟動周期中載入。

現在我們以下面的形式集成SuSE專用的安全模塊:

   erde# cat >> /sbin/init.d/boot.local
   insmod secumod hardlink=1 symlink=1 pipe=1 trace=1 systable=1 logging=1
   ^D

  當系統引導時,這個模塊會被加載,它配置用來防止Symlink、Hardlink、Pipe和一些 UNIX特有的攻擊形式。

  第五步:配置Apache

  WEB軟件和頁面時服務器的核心。我們必需確保沒有人可以訪問未授權的數據或者改變頁面。為了這個目的,頁面必需進行特殊的防護,然後要給予Apache安全的配置。

  所有的頁面都必需由網站管理員統一管理,並且對除他以外的所有人都是本地寫保護的。WEB服務器最好以非頁面管理員身份運行,這樣即使入侵者侵入WEB服務器,他也沒有足夠的權限更改頁面。這樣,就需要設置一個用戶,還要產生一個cron工作,這個定時工作要保証所有的頁面修改權只屬於頁面管理員並且具有正確的授權。

   erde# useradd -m wwwdocs
   erde# cat > /etc/cron.daily/wwwdocs
   #!/bin/sh
   /bin/chown -R -h wwwdocs /usr/local/httpd/htdocs/*
   /bin/chmod -R go-w /usr/local/httpd/htdocs/*
   /bin/chmod -R a+r /usr/local/httpd/htdocs/*
   ^D
   erde# chmod 700 /etc/cron.daily/wwwdocs

  由於Apache可能已經預先配置好了,所以可能根本不需要進行重新配置。當然,開始的時候/etc/httpd/httpd.conf 文件中的MinSpareServers、MaxSpareServers和StartServers的值應該被正確設置。

  MaxClients選項可以用來避免connect-denial-of-service攻擊。應該注意的是:如果這個選項設置的太低,一般訪問者的訪問也可能會被拒絕;如果太高,管理員在日志跟蹤和入侵事件發生時的應對就會顯得比較困難。除了自己嘗試以外,好象也沒有什麼確定合適數量的更好建議。

  應該關掉ServerSignature選項,這樣訪問一個不存在的頁面時就不會回應您所使用的軟件和版本號信息。但是這樣也解決不了多大的問題,因為HTTP頭中包含這些──甚至更多──信息。

  應該禁止/hilfe/、/doc/、/cgi-bin-sdb/、/sdb/和/manual/的別名。

  下面顯示了標準配置更改後的大概樣子:("diff -u0")

   --- httpd.conf.orig Sun Apr 9 19:37:44 2000
   +++ httpd.conf Sun Apr 9 19:42:57 2000
   @@ -141,2 +141,2 @@
   -MinSpareServers 1
   -MaxSpareServers 1
   +MinSpareServers 3
   +MaxSpareServers 10
   @@ -148 +148 @@
   -StartServers 1
   +StartServers 5
   @@ -157 +157 @@
   -MaxClients 150
   +MaxClients 100
   @@ -401 +401 @@
   -ServerAdmin root@localhost
   +ServerAdmin webdocs@echte-domain.de
   @@ -415 +415 @@
   -#ServerName hawking.suse.de
   +ServerName www.echte-domain.de
   @@ -485 +485 @@
   -UserDir public_html
   +#UserDir public_html
   @@ -646 +646 @@
   -ServerSignature On
   +ServerSignature Off
   @@ -665,11 +664,0 @@
   -Alias /hilfe/ /usr/doc/susehilf/
   -Alias /doc/ /usr/doc/
   -Alias /cgi-bin-sdb/ /usr/local/httpd/cgi-bin/
   -Alias /sdb/ /usr/doc/sdb/
   -Alias /manual/ /usr/doc/packages/apache/manual/
   -
   -
   - Options FollowSymLinks
   - AllowOverride None
   -
   -
   @@ -697,9 +685,0 @@
   -# cgi-bin for SuSE help system
   -# using SetHandler
   -
   -
   -AllowOverride None
   -Options +ExecCGI -Includes
   -SetHandler cgi-script
   -
   -
   @@ -981,4 +961,4 @@
   -#
   -# Deny from all
   -# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
   -#
   +
   + Deny from all
   + ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
   +
SSL的激活和証書的產生在/usr/doc/packages/apache/README.SuSE文件中描述。

  提示:SSL証書應該 一個密碼保護起來,以減少攻擊者成功入侵後將其拷貝並濫用的可能性(很少發生!)。

  作為一個一般的規則,應該保証沒有在任何地方使用符號符號連接(Symlinks),因此要禁止FollowSymLinks選項。所有的CGI都放在cgi-bin目錄下,不允許放在其它任何地方,甚至也不允許在其它目錄下執行。為了做到這一點,請不要使用ExecCGI配置選項。

  為了禁止訪問某些文件區,應該在這些目錄下分別加入一個命名為.htaccess的文件,並在中加入下面的文本行:

  order deny,allow deny from all

  第六步:Step 6: sudo程序與多個管理員

  每一個管理員都應該有一個自己的帳號。如果每個人都使用root身份進行操作,那麼就無法知道誰做了些什麼。另外,如果使用root口令輸入了一個不正確的命令可能對整個系統都產生嚴重的影響。應該僅僅在絕對需要時才使用具有高授權的操作。先前的harden_suse腳本已經將系統配置進行了必要的修改,它禁止了root用戶的直接遠程登錄。僅僅以加密形式的SSH進行遠程登錄才可以執行管理任務。下一個需要做的事是配置sudo,這個程序可以幫助管理員記錄執行過的命令。這個程序也提供了一個詳細的授權結構,例如,象oracle用戶一樣,用戶A可以被授權為可以重新啟動數據庫和查看root目錄下的系統日志文件,但是不能做除此以外的任何事。可用用下面的命令行為每一個管理員設置一個用戶:

   erde# adduser -m -g trusted username

  將用戶包含在"trusted"用戶組是非常關鍵的,因為根據harden_suse所確定的安全標準,sudo僅能夠被trusted組所使用。

  隨後,管理員就可以利用visudo程序,在編輯器中加入允許管理員可以做任何他想做的事的腳本行如下:

   username ALL=(ALL) ALL

  "man 5 sudoers" 設置了一個可以限制授權的主機。

  當然,管理員應該使用sudo並且不應該使用"su root"命令轉換到root身份,只有這樣,才能保証讓盡量少的人知道root口令。

  第七步:最後的調整

  完成所有的系統配置之後,應該使用tripwire程序產生一個包含所有文件的校驗和的數據庫:

   erde# cp /usr/doc/packages/tripwire/tw.conf.example.linux /var/adm/tripwire/tw.config
   erde# /var/adm/tripwire/bin/tripwire -initialize

  在連接Internet之前,產生文件/databases/tw.db_HOSTNAME應該備份到一個安全的存儲介質(如CD-ROM)上。

  一旦懷疑有攻擊者已經入侵並操作了系統,可以用tripwire跟蹤所有的操作。但是,應該隔一段時間就用tripware重新生成一次校驗和數據庫,因為這是對付高智商的攻擊者的最有效方法。

  在連接Internet之間的最後工作是對系統進行備份而後reboot。

  但這些還不夠,所有的系統管理員都應該訂閱關於WEB安全的最重要的郵件列表:

  suse-security:這是包含安全相關專題和安全公告的SuSE討論組列表,要訂閱這個列表,只需要發送一個空郵件到suse-security-subscribe@suse.com郵箱就可以了;

  suse-security-announce:僅僅包含安全公告,要訂閱這個列表,需要發一個空郵件到suse-security-announce-subscribe@suse.com郵箱;

  bugtraq:致力於最新的安全問題的討論區列表,要訂閱這個列表,需要發送一個包含"subscribe bugtraq surname@firstname"內容的空白郵件到:listserv@securityfocus.com郵箱。

  其它選擇

  由於沒有安裝本地入侵檢測系統,所以只能從攻擊者留下的可以痕跡跟蹤成功入侵的黑客行為。對於這種措施,也沒有什麼現成的解決方案,但是還是有很多人開發了針對這種工作的程序和發布了一些竅門。然而,有關這些方面的細節描述遠非本文的主題所能涵蓋了。

如果WEB服務器上的幾個文件需要定期更新,scp──cp函數在SSH中的安全版本──就顯得不是很好用了。一個更合適的方法是使用SSLftp,它具有FTP的功能並且象SSH一樣對數據進行了加密。

  日志數據很重要,所有的從WEB服務器和路由器所記錄的重要日志記錄都應該送到一個集中管理的日志主機,這個日志主機主要用來監視所有計算機的運行狀態。通過這種方法,攻擊者就就很難遁形滅跡了。

  另外,將Solar Designer [13]設計的安全內核補丁集成到系統中是個很好的主意,有了這個安全補丁,利用緩沖區溢出做手腳的攻擊方式將變得更困難。

  應該剝奪那些suid和sgid程序所具有的沒必要的過高特權。這可以通過將那些不再需要具有特權的程序逐個輸入到/etc/permissions.local然後手工去掉程序的授權(或啟動SuSEconfig)的方法實現。

  這個工作直到沒有sgid程序並且僅僅有下面列出的少數幾個suid程序時結束:

   -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 6132 Mar 11 09:36 /usr/lib/pt_chown

  如果系統由幾個分區,通過使用mount選項ro(只讀)、nodev(無設備)、nosuid (沒有高特權的suid文件)和noexec (沒有可執行文件)顯著地提高系統的安全級別。

  除此之外,可以使用ext2文件系統標志"append-only"和"immutable" (通過chattr命令設置) 定義內核能力,這樣就可以保護日志和引導文件等不被篡改。

  如果服務器需要具有防止本地攻擊的能力,必須為LILO引導裝載器配備一個口令,這可以通過在/etc/lilo.conf文件的頂端輸入下面的腳本行實現:

  password=something_difficult_to_guess
  restricted

  最後,WEB服務器不僅僅只是Apache。通常要包括1到2個數據庫,還要引入一些附加的模塊和程序,或者需要激活其它一些服務(如DNS服務器)。Linux包過濾(參見第二步中的例子)可以方便有效地提供保護支持。一個稱為“隔離間”("compartment":可以從這裡獲得)的程序支持chroot、特權分配以及Linux能力配置等任務。

  當然,還可以做很多其它的事情,但我所能想到的只有這些了。

  最後的提示

  更新!一個沒有採用最新的安全補丁進行更新的系統會很快稱為攻擊者的目標。

  已經完成配置安全系統所需的所有工作之後,要記住:CGI腳本將是最大的安全隱患。大多數成功的攻擊都是通過這些腳本實現的。簡明的建議是:最好使用那些公開發布並且已經被不同的網站使用了一段時間的CGI腳本;如果管理員不得已需要寫一些CGI腳本程序的話,這些程序應該由其它人對其安全因素進行例行檢查。

  結論

  一個非常安全且高可用的WEB服務器──這似乎有些矛盾,但確實是很好的折中──能夠在短短45分鐘的時間內配置完。當然您可以通過更多的工作以提高系統的安全級別,但是這裡配置的系統對大多數應用來說已經足夠了。
__________________
提供下載之附件為測試及學術用途! 必須24小時內刪除,不能轉讓或出售!
http://img.photobucket.com/albums/v478/mancool/Photo/normal_100_0095.jpg
請支持購買正版,尊重智識產權!
mancool 目前離線  
送花文章: 1, 收花文章: 69 篇, 收花: 155 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 06:36 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2020, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1