自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

寫(xiě)給系統(tǒng)管理員的25個(gè)PHP安全實(shí)踐

運(yùn)維 系統(tǒng)運(yùn)維
PHP是廣泛使用的開(kāi)源服務(wù)端腳本語(yǔ)言。通過(guò)HTTP或HTTPS協(xié)議,Apache Web服務(wù)允許用戶訪問(wèn)文件或內(nèi)容。服務(wù)端腳本語(yǔ)言的錯(cuò)誤配置會(huì)導(dǎo)致各種問(wèn)題。因此,PHP應(yīng)該小心使用。本文總結(jié)了25個(gè)PHP安全實(shí)踐事例,希望給系統(tǒng)管理員們帶來(lái)一些幫助。

PHP是廣泛使用的開(kāi)源服務(wù)端腳本語(yǔ)言。通過(guò)HTTP或HTTPS協(xié)議,Apache Web服務(wù)允許用戶訪問(wèn)文件或內(nèi)容。服務(wù)端腳本語(yǔ)言的錯(cuò)誤配置會(huì)導(dǎo)致各種問(wèn)題。因此,PHP應(yīng)該小心使用。以下是為系統(tǒng)管理員準(zhǔn)備的,安全配置PHP的25個(gè)實(shí)踐事例。

用于下文的PHP設(shè)置樣例

  • DocumentRoot:/var/www/html
  • 默認(rèn)Web服務(wù):Apache(可以使用Lighttpd或Nginx代替)
  • 默認(rèn)PHP配置文件:/etc/php.ini
  • 默認(rèn)PHP Extensions配置目錄:/etc/php.d/
  • PHP安全配置樣例文件:/etc/php.d/security.ini(需要使用文本編輯器創(chuàng)建這個(gè)文件)
  • 操作系統(tǒng):RHEL / CentOS / Fedora Linux(指令應(yīng)該可以在所有其他Linux發(fā)行版,如Debian / Ubuntu,或是Unix-like的操作系統(tǒng),如OpenBSD / FreeBSD / HP-UX下正常運(yùn)行)
  • PHP服務(wù)的默認(rèn)TCP/UDP端口:none

下午列出的大部分操作,都是基于 root 用戶能在 bash 或其他現(xiàn)代 shell 上執(zhí)行操作的假設(shè)。

  1. $ php -v 

樣例輸出:

  1. PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41) 
  2. Copyright (c) 1997-2010 The PHP Group 
  3. Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 

本文使用的操作系統(tǒng):

  1. $ cat /etc/redhat-release 

樣例輸出:

  1. Red Hat Enterprise Linux Server release 6.1 (Santiago) 

#1:知彼

基于PHP的應(yīng)用面臨著各種各樣的攻擊:

  • XSS:對(duì)PHP的Web應(yīng)用而言,跨站腳本是一個(gè)易受攻擊的點(diǎn)。攻擊者可以利用它盜取用戶信息。你可以配置Apache,或是寫(xiě)更安全的PHP代碼(驗(yàn)證所有用戶輸入)來(lái)防范XSS攻擊
  • SQL注入:這是PHP應(yīng)用中,數(shù)據(jù)庫(kù)層的易受攻擊點(diǎn)。防范方式同上。常用的方法是,使用mysql_real_escape_string()對(duì)參數(shù)進(jìn)行轉(zhuǎn)義,而后進(jìn)行SQL查詢。
  • 文件上傳:它可以讓訪問(wèn)者在服務(wù)器上放置(即上傳)文件。這會(huì)造成例如,刪除服務(wù)器文件、數(shù)據(jù)庫(kù),獲取用戶信息等一系列問(wèn)題。你可以使用PHP來(lái)禁止文件上傳,或編寫(xiě)更安全的代碼(如檢驗(yàn)用戶輸入,只允許上傳png、gif這些圖片格式)
  • 包含本地與遠(yuǎn)程文件:攻擊者可以使遠(yuǎn)程服務(wù)器打開(kāi)文件,運(yùn)行任何PHP代碼,然后上傳或刪除文件,安裝后門(mén)??梢酝ㄟ^(guò)取消遠(yuǎn)程文件執(zhí)行的設(shè)置來(lái)防范
  • eval():這個(gè)函數(shù)可以使一段字符串如同PHP代碼一樣執(zhí)行。它通常被攻擊者用于在服務(wù)器上隱藏代碼和工具。通過(guò)配置PHP,取消eval()函數(shù)調(diào)用來(lái)實(shí)現(xiàn)
  • Sea-surt Attack(Cross-site request forgery,CSRF。跨站請(qǐng)求偽造):這種攻擊會(huì)使終端用戶在當(dāng)前賬號(hào)下執(zhí)行非指定行為。這會(huì)危害終端用戶的數(shù)據(jù)與操作安全。如果目標(biāo)終端用戶的賬號(hào)用于管理員權(quán)限,整個(gè)Web應(yīng)用都會(huì)收到威脅。

#2:減少內(nèi)建的PHP模塊

執(zhí)行下面指令可以查看當(dāng)前PHP所編譯的模塊:

  1. $ php -m 

樣例輸出:

  1. [PHP Modules] 
  2. apc 
  3. bcmath 
  4. bz2 
  5. calendar 
  6. Core 
  7. ctype 
  8. curl 
  9. date 
  10. dom 
  11. ereg 
  12. exif 
  13. fileinfo 
  14. filter 
  15. ftp 
  16. gd 
  17. gettext 
  18. gmp 
  19. hash 
  20. iconv 
  21. imap 
  22. json 
  23. libxml 
  24. mbstring 
  25. memcache 
  26. mysql 
  27. mysqli 
  28. openssl 
  29. pcntl 
  30. pcre 
  31. PDO 
  32. pdo_mysql 
  33. pdo_sqlite 
  34. Phar 
  35. readline 
  36. Reflection 
  37. session 
  38. shmop 
  39. SimpleXML 
  40. sockets 
  41. SPL 
  42. sqlite3 
  43. standard 
  44. suhosin 
  45. tokenizer 
  46. wddx 
  47. xml 
  48. xmlreader 
  49. xmlrpc 
  50. xmlwriter 
  51. xsl 
  52. zip 
  53. zlib 
  54. [Zend Modules]  
  55. Suhosin 

從性能與安全性的角度考慮,我建議使用PHP時(shí)減少不必要的模塊。例如上面的sqlite3是不必要的。那么可以通過(guò)刪除或重命名/etc/php.d/sqlite3.ini文件來(lái)取消它:

  1. # rm /etc/php.d/sqlite3.ini 

  1. # mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable 

有些模塊則只能通過(guò)使用重新編譯安裝PHP來(lái)移除。例如,從php.net下載PHP源碼后,使用下面指令編譯GD,fastcgi和MySQL支持:

  1. ./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d  --enable-fastcgi --enable-force-cgi-redirect 

更多信息請(qǐng)查看:how to compile and reinstall php on Unix like operating system

#p#

#3:防止PHP信息泄漏

可以通過(guò)取消export_php,對(duì)PHP信息泄漏進(jìn)行限制。編輯/etc/php.d/security.ini如下:

  1. expose_php=Off 

expose_php會(huì)在HTTP Header中添加服務(wù)器上,包括版本在內(nèi)的PHP信息(例如X-Powered-By: PHP/5.3.3)。同時(shí),PHP的全局統(tǒng)一標(biāo)識(shí)符也會(huì)暴露。如果export_php啟用的話,可以通過(guò)下面命令查看PHP版本信息:

  1. $ curl -I http://www.cyberciti.biz/index.php 

樣例輸出:

  1. HTTP/1.1 200 OK 
  2. X-Powered-By: PHP/5.3.3 
  3. Content-type: text/html; charset=UTF-8 
  4. Vary: Accept-Encoding, Cookie 
  5. X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session 
  6. Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT  
  7. ... 

建議同時(shí)隱藏Apache版本等信息:ServerTokens and ServerSignature directives in httpd.conf to hide Apache version

#4:最小化可載入的PHP模塊(動(dòng)態(tài)Extension)

PHP支持“Dynamic Extensions”。默認(rèn)情況下,RHEL會(huì)載入/etc/php.d/目錄下的所有Extension模塊。如需啟用或取消某一模塊,只需把/etc/php.d/目錄下配置文件把該模塊注釋掉。也可以把文件刪除或重命名該模塊的配置文件。為了最優(yōu)化PHP的性能和安全性,應(yīng)只啟用Web應(yīng)用所需的Extension。例如,用下面命令取消GD模塊:

  1. # cd /etc/php.d/ 
  2. # mv gd.{ini,disable} 
  3. <span style="text-decoration: underline;">/sbin/service httpd restart</span> 

啟用則是:

  1. # mv gd.{disable,ini} 
  2. <span style="text-decoration: underline;">/sbin/service httpd restart</span> 

#5:記錄所有PHP錯(cuò)誤

不要把PHP錯(cuò)誤信息輸出給所用用戶。編輯/etc/php.d/security.ini,如下修改:

  1. display_errors=Off 

確保把所有錯(cuò)誤信息記錄到日志文件:

  1. log_errors=On 
  2. error_log=/var/log/httpd/php_scripts_error.log 

#6:禁止文件上傳

為安全考慮,如下編輯/etc/php.d/security.ini取消文件上傳

  1. file_uploads=Off 

如用戶的確需要上傳文件,那么把它啟用,而后限制PHP接受的最大文件大?。?/p>

  1. file_uploads=On 
  2. # user can only upload upto 1MB via php 
  3. upload_max_filesize=1M 

#7:關(guān)閉遠(yuǎn)程代碼執(zhí)行

如果這個(gè)特性被啟動(dòng),PHP可以通過(guò)allow_url_fopen,在file_get_contents()、include、require中獲取諸如FTP或網(wǎng)頁(yè)內(nèi)容這些遠(yuǎn)程數(shù)據(jù)。程序員經(jīng)常忘記了對(duì)用戶輸入進(jìn)行過(guò)濾,而如果這些函數(shù)調(diào)用了這些數(shù)據(jù),則形成了注入漏洞。在基于PHP的Web應(yīng)用中,大量代碼中的注入漏洞都由此產(chǎn)生。可以通過(guò)編輯/etc/php.d/security.ini來(lái)關(guān)閉該特性:

  1. allow_url_fopen=Off 
  2. 除此之外,建議把a(bǔ)llow_url_include也取消掉: 
  3. allow_url_include=Off 

#8:?jiǎn)⒂肧QL安全模式

如下修改/etc/php.d/security.ini:

  1. sql.safe_mode=On 

當(dāng)此特性被啟用,mysql_connect()和mysql_pconnect()會(huì)忽略傳入的所有參數(shù)。與此同時(shí),你需要在代碼上做些相應(yīng)的修改。第三方以及開(kāi)源應(yīng)用,如Wordpress,在sql.safe_mode下可能無(wú)法正常工作。同時(shí)建議關(guān)閉5.3.x版本的PHP的magic_quotes_gpc過(guò)濾,因?yàn)樗?jiǎn)單粗暴又沒(méi)效率。使用mysql_escape_string()以及自定義的過(guò)濾函數(shù)會(huì)更好一些

  1. magic_quotes_gpc=Off 

#9:控制POST的數(shù)據(jù)大小

HTTP POST通常作為請(qǐng)求的一部分,被客戶端用于向Apache Web服務(wù)器發(fā)送數(shù)據(jù),如上傳文件或提交表單。攻擊者會(huì)嘗試發(fā)送超大的POST請(qǐng)求去消耗服務(wù)器的資源。如下編輯/etc/php.d/security.ini限制POST的最大大?。?/p>

  1. ; 在這里設(shè)置一個(gè)靠譜的數(shù)值 
  2. post_max_size=1K 

這里設(shè)置了1K的最大大小。這個(gè)設(shè)置會(huì)影響到文件上傳。要上傳大文件,這個(gè)值需要比update_max_filesize大。

建議在Apache中限制可用的請(qǐng)求方法,編輯httpd.conf如下:

  1. <Directory /var/www/html> 
  2.      <LimitExcept GET POST> 
  3.          Order allow,deny 
  4.      </LimitExcept> 
  5. ## Add rest of the config goes here... ## 
  6. </Directory> 

#10:資源控制(DoS控制)

設(shè)置每個(gè)PHP腳本的最大運(yùn)行時(shí)間。另外建議限制用于處理請(qǐng)求數(shù)據(jù)的最大時(shí)間,以及最大可用內(nèi)存數(shù)。

  1. # 單位:秒 
  2. max_execution_time = 30 
  3. max_input_time = 30 
  4. memory_limit = 40M 

#11:為PHP安裝Suhosin高級(jí)保護(hù)系統(tǒng)

具體參考Suhosin項(xiàng)目頁(yè):project page

#12:取消危險(xiǎn)的PHP函數(shù)

PHP有大量可用于入侵服務(wù)器的函數(shù),如使用不當(dāng)則會(huì)成為漏洞。如下取消這些函數(shù):

  1. disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source 

#13:PHP Fastcgi / CGI – cgi.force_redirect管理

PHP可與Fastcgi協(xié)同工作。Fastcgi可以減少Web服務(wù)器的內(nèi)存足跡(memory footprint),并改善PHP性能??梢詤⒖歼@個(gè)來(lái)配置Apache2+PHP+FastCGI。在這個(gè)配置中,cgi.force_redirect會(huì)阻止用戶通過(guò)訪問(wèn)URL來(lái)調(diào)用PHP。為安全考慮,啟用該特性:

  1. ; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup 
  2. cgi.force_redirect=On 

#14:PHP用戶與用戶組ID

mod_fastcgi是Apache Web服務(wù)的一個(gè)cgi模塊,可連接到外部的FASTCGI服務(wù)器。你需要確保PHP使用非root用戶運(yùn)行。若其使用root或是UID小于100的用戶權(quán)限,它就可以訪問(wèn),乃至操作系統(tǒng)文件。通過(guò)Apache’s suEXEC或mod_suPHP,可在非特權(quán)用戶下執(zhí)行PHP CGI。suEXEC可以是Apache調(diào)用CGI程序的user ID不同于運(yùn)行Apache的user ID。如下:

  1. # ps aux | grep php-cgi 

樣例輸出:

  1. phpcgi      6012  0.0  0.4 225036 60140          S    Nov22   0:12 /usr/bin/php-cgi 
  2. phpcgi      6054  0.0  0.5 229928 62820          S    Nov22   0:11 /usr/bin/php-cgi 
  3. phpcgi      6055  0.1  0.4 224944 53260          S    Nov22   0:18 /usr/bin/php-cgi 
  4. phpcgi      6085  0.0  0.4 224680 56948          S    Nov22   0:11 /usr/bin/php-cgi 
  5. phpcgi      6103  0.0  0.4 224564 57956          S    Nov22   0:11 /usr/bin/php-cgi 
  6. phpcgi      6815  0.4  0.5 228556 61220          S    00:52   0:19 /usr/bin/php-cgi 
  7. phpcgi      6821  0.3  0.5 228008 61252          S    00:55   0:12 /usr/bin/php-cgi 

可以通過(guò)spawn-fcgi來(lái)生成phpcgi用戶的遠(yuǎn)程或本地FastCGI進(jìn)程(前提是有這個(gè)用戶):

  1. # spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi 

現(xiàn)在可以配置Apache、Lighthttpd或Nginx Web服務(wù)調(diào)用運(yùn)行在127.0.0.1:9000的FastCGI。

#p#

#15:限制PHP訪問(wèn)文件系統(tǒng)

open_basedir會(huì)限制PHP的運(yùn)行目錄,例如通過(guò)fopen()之類(lèi)的函數(shù)可訪問(wèn)的目錄。如果訪問(wèn)的目錄不在open_basedir之內(nèi),PHP會(huì)拒絕該訪問(wèn)。不要使用軟鏈接作為工作區(qū)。例如,只允許訪問(wèn)/var/www/html而非/var/www、/tmp或/etc目錄:

  1. ; Limits the PHP process from accessing files outside  
  2. ; of specifically designated directories such as /var/www/html/ 
  3. open_basedir="/var/www/html/" 
  4. ; ------------------------------------ 
  5. ; Multiple dirs example  
  6. open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/" 
  7. ; ------------------------------------ 

#16:Session路徑

PHP Session用戶提供數(shù)據(jù)保存功能,以便后續(xù)訪問(wèn)。這可以使應(yīng)用可定制性更強(qiáng),提升吸引力。所有Session相關(guān)的數(shù)據(jù)會(huì)被保存在session.save_path中。RHEL/CentOS/Fedora Linux的默認(rèn)設(shè)置如下:

  1. session.save_path="/var/lib/php/session" 
  2. ; Set the temporary directory used for storing files when doing file upload 
  3. upload_tmp_dir="/var/lib/php/session" 

確認(rèn)這個(gè)路徑在/var/www/html之外,且不可被其他系統(tǒng)用戶訪問(wèn):

  1. # ls -Z /var/lib/php/ 

樣例輸出:

  1. drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 session 

注:ls -Z會(huì)顯示SELinux的安全信息,如文件模式,user,group,安全信息,文件名等。

#17:保證PHP,軟件及操作系統(tǒng)更新到最新

維護(hù)Linux、Apache、PHP和MySQL服務(wù)器的一項(xiàng)重要工作是更新安全補(bǔ)丁。所有的PHP安全更新應(yīng)盡快進(jìn)行審查并更新??墒褂萌缦旅睿ㄈ绻ㄟ^(guò)包管理器來(lái)安裝PHP):

  1. # yum update 
  2. 或 
  3. # apt-get update && apt-get upgrade 

可以配置Red Hat / CentOS / Fedora Linux通過(guò)Email發(fā)送yum的包更新提醒,或是Debian / Ubuntu Linux下的apticron發(fā)送提醒。又或通過(guò)cron計(jì)劃任務(wù)進(jìn)行更新。

注:查看php.net以獲取最新的PHP版本信息

#18:限制文件及目錄訪問(wèn)

確認(rèn)以Apache或www這種非root用戶運(yùn)行Apache。/var/www/html目錄下的owner也應(yīng)是非root用戶:

  1. # chown -R apache:apache /var/www/html/ 

DocumentRoot下的文件應(yīng)禁止運(yùn)行或創(chuàng)建。設(shè)置該目錄下的文件權(quán)限為0444(只讀):

  1. # chmod -R 0444 /var/www/html/ 

設(shè)置該目錄下的所有文件夾權(quán)限為0445:

  1. # find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {} 

#19:Apache、PHP、MySQL配置文件的寫(xiě)入保護(hù)

使用chattr命令給這些配置文件加上寫(xiě)入保護(hù):

  1. # chattr +i /etc/php.ini 
  2. # chattr +i /etc/php.d/* 
  3. # chattr +i /etc/my.ini 
  4. # chattr +i /etc/httpd/conf/httpd.conf 
  5. # chattr +i /etc/ 

同樣可以為/var/www/html目錄加上寫(xiě)入保護(hù)

  1. # chattr +i /var/www/html/file1.php# chattr +i /var/www/html/ 

#20:使用Linux安全拓展(如SELinux)

Linux有各種安全方案來(lái)防止服務(wù)程序的錯(cuò)誤配置或漏洞。盡可能使用SELinux或其他Linux安全方案限制網(wǎng)絡(luò)和程序。例如,SELinux為L(zhǎng)inux內(nèi)核或Apache Web服務(wù)提供不同的安全策略。使用下面命令列出所有Apache保護(hù)信息:

  1. # getsebool -a | grep httpd 

樣例輸出:

  1. allow_httpd_anon_write --> off 
  2. allow_httpd_mod_auth_ntlm_winbind --> off 
  3. allow_httpd_mod_auth_pam --> off 
  4. allow_httpd_sys_script_anon_write --> off 
  5. httpd_builtin_scripting --> on 
  6. httpd_can_check_spam --> off 
  7. httpd_can_network_connect --> off 
  8. httpd_can_network_connect_cobbler --> off 
  9. httpd_can_network_connect_db --> off 
  10. httpd_can_network_memcache --> off 
  11. httpd_can_network_relay --> off 
  12. httpd_can_sendmail --> off 
  13. httpd_dbus_avahi --> on 
  14. httpd_enable_cgi --> on 
  15. httpd_enable_ftp_server --> off 
  16. httpd_enable_homedirs --> off 
  17. httpd_execmem --> off 
  18. httpd_read_user_content --> off 
  19. httpd_setrlimit --> off 
  20. httpd_ssi_exec --> off 
  21. httpd_tmp_exec --> off 
  22. httpd_tty_comm --> on 
  23. httpd_unified --> on 
  24. httpd_use_cifs --> off 
  25. httpd_use_gpg --> off 
  26. httpd_use_nfs --> off 

取消Apache cgi支持可以輸入:

  1. # setsebool -P httpd_enable_cgi off 

詳細(xì)參考:Red Hat SELinux guide

#p#

#21:安裝Mod_security

ModSecurity是一個(gè)開(kāi)源的入侵檢測(cè)和防范的Web應(yīng)用引擎。安裝mod_security可以保護(hù)Apache和PHP應(yīng)用免受XSS和其他攻擊:

  1. ## A few Examples ## 
  2. # Do not allow to open files in /etc/ 
  3. SecFilter /etc/ 
  4. # Stop SQL injection 
  5. SecFilter "delete[[:space:]]+from" 
  6. SecFilter "select.+from" 

#22:如有可能,在Chroot Jail下運(yùn)行Apache / PHP

在Chroot Jail下運(yùn)行Apache / PHP可以最小化可能受到的損失,使其局限于文件系統(tǒng)下的一小塊。可以使用一般的chroot來(lái)配置Apache:chroot kind of setup with Apache。不過(guò)我建議使用FreeBSD jails、XEN,KVM或OpenVZ虛擬化。

#23:使用防火墻限制傳出連接

攻擊者會(huì)使用wget之類(lèi)的工具從你的Web服務(wù)器下載文件。使用iptables來(lái)阻擋Apache用戶的傳出連接。ipt_owner模塊會(huì)為本地?cái)?shù)據(jù)包的生成者分配不同角色。它只對(duì)OUTPUT chain有效。下面指令允許vivek用戶通過(guò)80端口進(jìn)行外部訪問(wèn):

  1. /sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT 

下面的樣例則是阻擋所有Apache用戶的傳出連接,只允許smtp服務(wù)及spam識(shí)別API服務(wù)通過(guò):

  1. # ....   
  2. /sbin/iptables --new-chain apache_user 
  3. /sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
  4. /sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user 
  5. # allow apache user to connec to our smtp server  
  6. /sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN 
  7. # Allow apache user to connec to api server for spam validation 
  8. /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN 
  9. /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN 
  10. /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN 
  11. /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN 
  12. ######################### 
  13. ## Add more rules here ## 
  14. ######################### 
  15. # No editing below 
  16. # Drop everything for apache outgoing connection 
  17. /sbin/iptables --append apache_user -j REJECT 

#24:查看并審查日志

查看Apache日志文件:

  1. # tail -f /var/log/httpd/error_log 
  2. # grep 'login.php' /var/log/httpd/error_log 
  3. # egrep -i "denied|error|warn" /var/log/httpd/error_log 

查看PHP日志文件:

  1. # tail -f /var/log/httpd/php_scripts_error.log 
  2. # grep "...etc/passwd" /var/log/httpd/php_scripts_error.log 

查看日志文件可以讓你知道服務(wù)器正在承受何種攻擊,并分析當(dāng)前安全級(jí)別是否足夠。啟用審查服務(wù)用于系統(tǒng)審查,可審查SELinux時(shí)間,驗(yàn)證事件,文件修改,賬號(hào)修改等。建議使用Linux System Monitoring Tools來(lái)監(jiān)控Web服務(wù)器。

#25:把服務(wù)分離到不同的服務(wù)器或虛擬機(jī)

對(duì)于比較龐大的安裝配置,建議把運(yùn)行、數(shù)據(jù)庫(kù)、靜態(tài)與動(dòng)態(tài)內(nèi)容分離到不同的服務(wù)器

  1. /////////////// 
  2. / ISP/Router / 
  3. ////////////// 
  4. Firewall 
  5. +------------+ 
  6. | LB01       | 
  7.  +------------+                 +--------------------------+ 
  8. |                 | static.lan.cyberciti.biz | 
  9.  
  10. +-----------------+--------------------------+ 
  11. | phpcgi1.lan.cyberciti.biz| 
  12.  +--------------------------+ 
  13. | phpcgi2.lan.cyberciti.biz| 
  14. +--------------------------+ 
  15. | mysql1.lan.cyberciti.biz | 
  16.  +--------------------------+ 
  17. | mcache1.lan.cyberciti.biz| 
  18. +--------------------------+ 

在不同的服務(wù)器或虛擬機(jī)下運(yùn)行不同的網(wǎng)絡(luò)服務(wù),這可以減少被入侵對(duì)其他服務(wù)的影響。例如,一個(gè)攻擊者入侵了Apache,那就可以訪問(wèn)同一服務(wù)器下的其他服務(wù)(如MySQL,email服務(wù)等)。但在上述例子中則不會(huì):

  • static.lan.cybercity.biz – 使用lighttpd或nginx存放js/css/images等靜態(tài)資源
  • phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz – Apache Web服務(wù)+PHP,用于生成動(dòng)態(tài)內(nèi)容
  • mysql1.lan.cyberciti.biz – MySQL數(shù)據(jù)庫(kù)服務(wù)
  • mcache1.lan.cyberciti.biz – Memcached服務(wù)(MySQL的高速緩存系統(tǒng))。它使用libevent或epoll來(lái)適應(yīng)任意連接數(shù)。而且它使用的是非阻塞網(wǎng)絡(luò)IO。
  • LB01 – 一個(gè)Nginx服務(wù)器,用于Web及Apache前端的反向代理。所有的訪問(wèn)連接會(huì)通過(guò)nginx代理服務(wù),被直接處理或分發(fā)到相應(yīng)的Web服務(wù)器。LB01提供簡(jiǎn)單的負(fù)載均衡。
責(zé)任編輯:黃丹 來(lái)源: 伯樂(lè)在線
相關(guān)推薦

2011-11-30 09:03:27

2013-06-27 09:19:08

2013-03-30 21:59:13

系統(tǒng)管理員必備工具iftop

2018-10-10 10:37:03

2018-08-01 08:12:34

Linux管理員網(wǎng)絡(luò)管理

2010-04-12 09:33:58

系統(tǒng)管理員

2018-08-15 14:00:18

LinuxBash系統(tǒng)管理員

2013-06-26 09:29:30

系統(tǒng)管理員

2013-09-29 09:50:21

系統(tǒng)管理員Ubuntu JujuJuju

2022-11-28 10:12:57

系統(tǒng)systemd

2010-08-10 09:13:52

Unix系統(tǒng)管理員Ubuntu

2010-05-06 18:07:33

Unix命令

2010-08-11 17:11:15

2019-09-09 14:45:29

系統(tǒng)管理員SRE

2010-05-10 18:28:11

Unix系統(tǒng)

2010-05-07 16:35:44

2019-08-13 19:34:45

容器鏡像DockerLinux

2011-06-16 09:35:28

系統(tǒng)管理員iPad應(yīng)用

2011-10-20 10:29:22

VMwareVMworld虛擬化

2010-11-10 09:36:38

系統(tǒng)管理員守則
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)