20個(gè)Nginx Web服務(wù)器最佳安全實(shí)踐_第1頁
20個(gè)Nginx Web服務(wù)器最佳安全實(shí)踐_第2頁
20個(gè)Nginx Web服務(wù)器最佳安全實(shí)踐_第3頁
20個(gè)Nginx Web服務(wù)器最佳安全實(shí)踐_第4頁
20個(gè)Nginx Web服務(wù)器最佳安全實(shí)踐_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

20個(gè)NginxWeb服務(wù)器最佳安全實(shí)踐Nginx是一個(gè)輕量級,高性能的Web服務(wù)器/反向代理和電子郵件代理(IMAP/P0P3),它可以運(yùn)行在UNIX,GNU/Linux,BSD變種,MACOSX,Solaris和MicrosoftWindows上。根據(jù)Netcraft的調(diào)查數(shù)據(jù)顯示,互聯(lián)網(wǎng)上6%的域名都使用了NginxWeb服務(wù)器。Nginx是解決C10K問題的服務(wù)器之一,與傳統(tǒng)服務(wù)器不一樣,Nginx不依賴于線程處理請求,相反,它使用了一個(gè)更具擴(kuò)展性的事件驅(qū)動(dòng)(異步)架構(gòu)。Nginx在很多高流量網(wǎng)站上得到了應(yīng)用,如WordPress,Hulu,Github和SourceForge。本文的主要目是介紹如何提高運(yùn)行在Linux或UNIX類操作系統(tǒng)上的NginxWeb服務(wù)器的安全性。Nginx默認(rèn)配置文件和默認(rèn)端口/usr/local/nginx/conf/-Nginx服務(wù)器配置目錄,/usr/local/nginx/conf/nginx.conf是主配置文件/usr/local/nginx/html/-默認(rèn)文檔位置/usr/local/nginx/logs/-默認(rèn)日志文件位置NginxHTTP默認(rèn)端口:TCP80NginxHTTPS默認(rèn)端口:TCP443可以使用下面的命令測試Nginx的配置是否正確:/usr/local/nginx/sbin/nginx-t輸出示例:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisokconfigurationfile/usr/local/nginx/conf/nginx.conftestissuccessful要讓修改后的配置生效,執(zhí)行下面的命令:/usr/local/nginx/sbin/nginx-sreload如果要停止服務(wù)器,運(yùn)行:/usr/local/nginx/sbin/nginx-sstop1、開啟SELinuxSELinux(安全增強(qiáng)的Linux)是一個(gè)Linux內(nèi)核功能,它提供了一個(gè)機(jī)制支持訪問控制安全策略,提供了巨大的安全保護(hù)能力,它可以防止大多數(shù)系統(tǒng)root級攻擊,請參考'如何在CentOS/RedHat系統(tǒng)上開啟SELinux”(http://www.cyberciti?biz/faq/rhel-fedora-redhat-selinux-protection/)。運(yùn)行g(shù)etsebool-a命令查看SELinux設(shè)置項(xiàng):getsebool-a|lessgetsebool-a|grepoffgetsebool-a|grepo然后使用setsebool命令開啟需要的配置項(xiàng),注意:開啟SELinux后,在RHEL或CentOS上通常會(huì)增加2-8%的系統(tǒng)開銷。2、通過mount參數(shù)提供最低權(quán)限為你的/html/php文件創(chuàng)建獨(dú)立的分區(qū),例如,創(chuàng)建一個(gè)/dev/sda5分區(qū)掛載在/ngnix上,確定/ngnix使用了noexec,nodev和nosetuid權(quán)限掛載。下面是我的一個(gè)掛載實(shí)例:LABEL=/nginx/nginxext3defaults,nosuid,noexec,nodev12注意你需要使用fdisk和mkfs.ext3命令創(chuàng)建一個(gè)新分區(qū)。3、通過/etc/sysctl.conf加固可以通過/etc/sysctl.conf控制和配置Linux內(nèi)核及網(wǎng)絡(luò)設(shè)置。另外,請參考:#避免放大攻擊net.ipv4.icmp_echo_ignore_broadcasts=1#開啟惡意icmp錯(cuò)誤消息保護(hù)net.ipv4.icmp_ignore_bogus_error_responses=1開啟SYN洪水攻擊保護(hù)net.ipv4.tcp_syncookies=1開啟并記錄欺騙,源路由和重定向包net.ipv4.conf.all.log_martians=1net.ipv4.conf.default.log_martians=1處理無源路由的包net.ipv4.conf.all.accept_source_route=0net.ipv4.conf.default.accept_source_route=0開啟反向路徑過濾net.ipv4.conf.all.rp_filter=1net.ipv4.conf.default.rp_filter=1#確保無人能修改路由表net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.default.accept_redirects=0net.ipv4.conf.all.secure_redirects=0net.ipv4.conf.default.secure_redirects=0#不充當(dāng)路由器net.ipv4.ip_forward=0net.ipv4.conf.all.send_redirects=0net.ipv4.conf.default.send_redirects=0#開啟execshildkernel.exec-shield=1kernel.randomize_va_space=1#IPv6設(shè)置net.ipv6.conf.default.router_solicitations=0net.ipv6.conf.default.accept_ra_rtr_pref=0net.ipv6.conf.default.accept_ra_pinfo=0net.ipv6.conf.default.accept_ra_defrtr=0net.ipv6.conf.default.autoconf=0net.ipv6.conf.default.dad_transmits=0net.ipv6.conf.default.max_addresses=1#優(yōu)化LB使用的端口#增加系統(tǒng)文件描述符限制fs.file-max=65535#允許更多的PIDs(減少滾動(dòng)翻轉(zhuǎn)問題);maybreaksomeprograms32768kernel.pid_max=65536#增加系統(tǒng)IP端口限制net.ipv4.ip_local_port_range=200065000#增加TCP最大緩沖區(qū)大小net.ipv4.tcp_rmem=4096873808388608net.ipv4.tcp_wmem=4096873808388608#增加Linux自動(dòng)調(diào)整TCP緩沖區(qū)限制#最小,默認(rèn)和最大可使用的字節(jié)數(shù)#最大值不低于4MB,如果你使用非常高的BDP路徑可以設(shè)置得更高#Tcp窗口等net.core.rmem_max=8388608net.core.wmem_max=8388608dev_max_backlog=5000net.ipv4.tcp_window_scaling=1LinuxVM調(diào)優(yōu)(內(nèi)存)子系統(tǒng)(http://w\/faq/linux-kernel-tuning-virtual-memcry-subsystem/)Linux網(wǎng)絡(luò)堆棧調(diào)優(yōu)(緩沖區(qū)大?。┨岣呔W(wǎng)絡(luò)性能(/faq/linux-tcp-tuning/4、移除所有不需要的Nginx模塊你需要最大限度地將Nginx加載的模塊最小化,我的意思是滿足Web服務(wù)器需要就可以了,多余的模塊一個(gè)不留,例如,禁用SSI和autoindex模塊的命令如下:./configure-without-http_autoindex_module-without-http_ssi_modulemakemakeinstall在編譯Nginx服務(wù)器時(shí),使用下面的命令查看哪些模塊應(yīng)該啟用,哪些模塊應(yīng)該禁用:./configure-help|less禁用你不需要的Nginx模塊。修改Nginx版本頭信息(可選),編輯src/http/ngx_http_header_filter_module.c:vi+48src/http/ngx_http_header_filter_module.c找到下面兩行:staticcharngx_http_server_string[]=“Server:nginx”CRLF;staticcharngx_http_server_full_string[]=“Server:”NGINX_VERCRLF;將其修改為:staticcharngx_http_server_string[]=“Server:NinjaWebServer”CRLF;staticcharngx_http_server_full_string[]=“Server:NinjaWebServer”CRLF;保存并關(guān)閉文件?,F(xiàn)在可以開始編譯服務(wù)器了,將下面的配置代碼添加到nginx.conf中,禁止在所有自動(dòng)產(chǎn)生的錯(cuò)誤頁面中顯示Nginx版本號:server_tokensoff5、使用mod_security(僅適用于后端Apache服務(wù)器)Mod_security為Apache提供了一個(gè)應(yīng)用程序級防火墻,為所有后端ApacheWeb服務(wù)器安裝mod_security模塊,可以阻止許多注入攻擊。6、配置SELinux策略加固N(yùn)ginx默認(rèn)情況下,SELinux沒有保護(hù)NginxWeb服務(wù)器,可以手動(dòng)配置進(jìn)行保護(hù),首先安裝SELinux編譯時(shí)需要的支持包:yum-yinstallselinux-policy-targetedselinux-policy-devel從項(xiàng)目主頁(/projects/selinuxnginx/)下載SELinux策略:cd/optwget‘/project/selinuxnginx/se-ngix_1_0_10.tar.gz?use_mirror=nchc'解壓:tar-zxvfse-ngix_1_0_10.tar.gz編譯:cdse-ngix_1_0_10/nginxmake輸出示例:Compilingtargetednginxmodule/usr/bin/checkmodule:loadingpolicyconfigurationfromtmp/nginx.tmp/usr/bin/checkmodule:policyconfigurationloaded/usr/bin/checkmodule:writingbinaryrepresentation(version6)totmp/nginx.modCreatingtargetednginx.pppolicypackagermtmp/nginx.mod.fctmp/nginx.mod安裝生成的nginx.ppSELinux模塊:/usr/sbin/semodule-inginx.pp7、通過iptables防火墻設(shè)置限制下面的防火墻腳本可以阻止一切請求,只允許:?入站HTTP請求(TCP80端口)?入站ICMPping請求出站NTP請求(端口123)?出站SMTP請求(TCP端口25)#!/bin/bashIPT=”/sbin/iptables”####IPS#######獲得服務(wù)器公共IPSERVER_IP=$(ifconfigeth0|grep‘inetaddr:'|awk-F'inetaddr:'‘{print$2}'|awk‘{print$1}')LB1」P=”"LB2」P=”"#實(shí)現(xiàn)某些智能邏輯,以便我們可以在LB2上使用damm腳本OTHER_LB=”"SERVER_IP=”"[["$SERVER_IP"=="$LB1_IP"]]&&OTHER_LB=”$LB2_IP”||OTHER_LB=”$LB1_IP”[["$OTHER_LB"=="$LB2_IP"]]&&OPP_LB=”$LB1_IP”||OPP_LB=”$LB2_IP”###IPs###PUB_SSH_ONLY=T22.xx.yy.zz/29"####文件#####BLOCKED_IP_TDB=/root/.fw/blocked.ip.txtSPOOFIP=”/8/16/1/8//8/455/32/16/4/5/5/24〃BADIPS=$([[-f${BLOCKED」P_TDB}]]&&egrep-v“人#|人$”${BLOCKED」P_TDB})###接口###PUB_IF=”eth0〃#publicinterfaceLO_IF=”lo”#loopbackVPN_IF=”eth1〃#vpn/privatenet###啟動(dòng)防火墻###echo“SettingLB1$(hostname)Firewall...”#刪除和關(guān)閉一切$IPT-PINPUTDROP$IPT-POUTPUTDROP$IPT-PFORWARDDROP#不受限制的lo訪問$IPT-AINPUT-i${LO_IF}-jACCEPT$IPT-AOUTPUT-o${LO_IF}-jACCEPT#不受限制的vpn/pnet訪問$IPT-AINPUT-i${VPN_IF}-jACCEPT$IPT-AOUTPUT-o${VPN_IF}-jACCEPT#刪除sync$IPT-AINPUT-i${PUB」F}-ptcp!-syn-mstate-stateNEW-jDROP#刪除碎片$IPT-AINPUT-i${PUB_IF}-f-jDROP$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsALLFIN,URG,PSH-jDROP$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsALLALL-jDROP#刪除空包$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsALLNONE-mlimit-limit5/m-limit-burst7-jLOG-log-prefix”NULLPackets”$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsALLNONE-jDROP$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsSYN,RSTSYN,RST-jDROP刪除XMAS$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsSYN,FINSYN,FIN-mlimit-limit5/m-limit-burst7-jLOG-log-prefix”XMASPackets”$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsSYN,FINSYN,FIN-jDROP刪除FIN包掃描$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsFIN,ACKFIN-mlimit-limit5/m-limit-burst7-jLOG-log-prefix”FinPacketsScan”$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsFIN,ACKFIN-jDROP$IPT-AINPUT-i${PUB_IF}-ptcp-tcp-flagsALLSYN,RST,ACK,FIN,URG-jDROP記錄并放棄廣播/多播和無效數(shù)據(jù)包$IPT-AINPUT-i${PUB_IF}-mpkttype-pkt-typebroadcast-jLOG-log-prefix”Broadcast”$IPT-AINPUT-i${PUB_IF}-mpkttype-pkt-typebroadcast-jDROP$IPT-AINPUT-i${PUB_IF}-mpkttype-pkt-typemulticast-jLOG-log-prefix”Multicast”$IPT-AINPUT-i${PUB_IF}-mpkttype-pkt-typemulticast-jDROP$IPT-AINPUT-i${PUB_IF}-mstate-stateINVALID-jLOG-log-prefix”Invalid”$IPT-AINPUT-i${PUB_IF}-mstate-stateINVALID-jDROP#記錄和阻止欺騙IP$IPT-AOUTPUT-o${PUB_IF}-ptcp-dport$IPT-AOUTPUT-o${PUB_IF}-ptcp-dport25-mstate-stateNEW,ESTABLISHED-j$IPT-Nspooflistforipblockin$SPOOFIPdo$IPT-Aspooflist-i${PUB_IF}-s$ipblock-jLOG-log-prefix”SPOOFListBlock“$IPT-Aspooflist-i${PUB_IF}-s$ipblock-jDROPdone$IPT-IINPUT-jspooflist$IPT-IOUTPUT-jspooflist$IPT-IFORWARD-jspooflist#只允許從選定的公共IP使用SSHforipin${PUB_SSH_ONLY}do$IPT-AINPUT-i${PUB_IF}-s${ip}-ptcp-d${SERVER_IP}-destination-port22-jACCEPT$IPT-AOUTPUT-o${PUB_IF}-d${ip}-ptcp-s${SERVER_IP}-sport22-jACCEPTdone允許入站ICMPping$IPT-AINPUT-i${PUB_IF}-picmp-icmp-type8-s0/0-mstate-stateNEW,ESTABLISHED,RELATED-mlimit-limit30/sec-jACCEPT$IPT-AOUTPUT-o${PUB_IF}-picmp-icmp-type0-d0/0-mstate-stateESTABLISHED,RELATED-jACCEPT#允許入站HTTP端口80$IPT-AINPUT-i${PUB_IF}-ptcp-s0/0-sport1024:65535-dport80-mstate-stateNEW,ESTABLISHED-jACCEPT$IPT-AOUTPUT-o${PUB_IF}-ptcp-sport80-d0/0-dport1024:65535-mstate-stateESTABLISHED-jACCEPT允許出站NTP$IPT-AOUTPUT-o${PUB_IF}-pudp-dport123-mstate-stateNEW,ESTABLISHED-jACCEPT$IPT-AINPUT-i${PUB_IF}-pudp-sport123-mstate-stateESTABLISHED-jACCEPT允許出站SMTPACCEPT$IPT-AINPUT-i${PUB」F}-ptcp-sport25-mstate-stateESTABLISHED-jACCEPT###在這里添加其他規(guī)則############################刪除并記錄其它數(shù)據(jù)包$IPT-AINPUT-mlimit-limit5/m-limit-burst7-jLOG-log-prefix”DEFAULTDROP”$IPT-AINPUT-jDROPexit08、控制緩沖區(qū)溢出攻擊編輯nginx.conf設(shè)置所有客戶端可用的緩沖區(qū)大小限制:#vi/usr/local/nginx/conf/nginx.conf具體設(shè)置如下:##Start:SizeLimits&BufferOverflows##client_body_buffer_size1K;client_header_buffer_size1k;client_max_body_size1k;large_client_header_buffers21k;##END:SizeLimits&BufferOverflows##說明:client_body_buffer_sizelk:默認(rèn)是8k或16k,指定客戶端請求主體緩沖區(qū)大小。client_header_buffer_sizelk:指定來自客戶端請求頭的headerbuffer大小,對于大多數(shù)請求,lk的緩沖區(qū)大小已經(jīng)足夠,如果你自定義了消息頭或有更大的Cookie,你可以增加其大小。client_max_body_sizelk:客戶端請求中可接受的主體最大大小,由請求頭中的Content-Length表示,如果大小大于給定的尺寸,客戶端將會(huì)收到一條,,RequestEntityTooLarge(413)”的錯(cuò)誤,如果你要通過POST方法上傳文件,可以將該值設(shè)大一些。large_client_header_buffers2lk:為客戶端請求中較大的消息頭指定的緩存最大數(shù)量和大小,默認(rèn)情況下,一個(gè)緩沖區(qū)的大小等于頁面的大小,根據(jù)平臺(tái)的不同可能是4K或8K,如果在請求連接的末尾狀態(tài)轉(zhuǎn)換為保持活動(dòng)(keep-alive),這些緩沖區(qū)就被釋放,2xlK將可以接收2KB數(shù)據(jù)的URI,這樣有助于打擊機(jī)器人攻擊和DoS攻擊。另外,你還需要控制超時(shí)時(shí)間,提高服務(wù)器性能,降低客戶端的等待時(shí)間,做如下修改:##Start:Timeouts##client_body_timeoutl0;client_header_timeoutl0;keepalive_timeout55;send_timeout10;##End:Timeouts##client_body_timeout10:設(shè)置客戶端請求主體讀取超時(shí)時(shí)間,如果在這個(gè)時(shí)間后客戶端還沒有發(fā)送任何數(shù)據(jù),Nginx返回“Requesttimeout(408)”錯(cuò)誤,默認(rèn)值是60。client_header_timeout10:設(shè)置客戶端請求頭讀取超時(shí)時(shí)間,如果在這個(gè)時(shí)間后客戶端還沒有發(fā)送任何數(shù)據(jù),Nginx返回“Requesttimeout(408)”錯(cuò)誤。keepalive_timeout55:第一個(gè)參數(shù)指定客戶端連接保持活動(dòng)的超時(shí)時(shí)間,在這個(gè)時(shí)間之后,服務(wù)器會(huì)關(guān)掉連接,第二個(gè)參數(shù)是可選的,它指定了消息頭保持活動(dòng)的有效時(shí)間,即響應(yīng)中的timeout=time,它可以告訴某些瀏覽器關(guān)閉連接,因此服務(wù)器就不必關(guān)閉連接了,如果沒有這個(gè)參數(shù),Nginx不會(huì)發(fā)送Keep-Alive頭。send_timeout10:指定響應(yīng)客戶端的超時(shí)時(shí)間,這個(gè)超時(shí)僅限于兩個(gè)閱讀活動(dòng)之間的時(shí)間,如果這個(gè)時(shí)間后客戶端沒有任何活動(dòng),Nginx將會(huì)關(guān)閉連接。9、控制并發(fā)連接你可以使用NginxHttpLimitZone模塊限制指定會(huì)話,或某個(gè)IP的并發(fā)連接數(shù),編輯nginx.conf:###Directivedescribesthezone,inwhichthesessionstatesarestoredi.e.storeinslimits.###1mcanhandle32000sessionswith32bytes/session,setto5mx32000session###limit_zoneslimits$binary_remote_addr5m;###Controlmaximumnumberofsimultaneousconnectionsforonesessioni.e.######restrictstheamountofconnectionsfromasingleipaddress###limit_connslimits5;上述設(shè)置可以限制遠(yuǎn)程客戶端每IP地址不能超過5個(gè)同時(shí)打開的連接。10、只允許訪問指定的域名如果有機(jī)器人程序在隨機(jī)掃描所有域,那就阻止它訪問,你必須配置只允許虛擬域或反向代理請求。##OnlyrequeststoourHostareallowedi.e.nixcraft.in,images.nixcraft.inandwww.nixcraft.inif($host!~人(nixcraft.in|www.nixcraft.in|images.nixcraft.in)$){return444;}##11、限制可用的方法GET和POST是互聯(lián)網(wǎng)上最常用的方法,RFC2616定義了Web服務(wù)器可用的方法,如果一個(gè)Web服務(wù)器不要求實(shí)現(xiàn)所有方法,那些方法就應(yīng)該被禁止掉,下面的代碼將過濾所有方法,只允許GET,HEAD和POST方法:##Onlyallowtheserequestmethods##if($request_method!~人(GET|HEAD|POST)$){return444;}##DonotacceptDELETE,SEARCHandothermethods##關(guān)于HTTP方法的更多信息:GET方法用于請求文檔,如/index.php□HEAD方法與GET相同,但服務(wù)器不會(huì)在響應(yīng)中只返回消息主體。POST方法功能就多了,如通過表單存儲(chǔ)或更新數(shù)據(jù),訂購一個(gè)產(chǎn)品,發(fā)送電子郵件等,通常使用服務(wù)器端腳本(如PHP,Perl,Python等)處理,如果你要上傳文件或在服務(wù)器上處理表單就必須用它。12a、如何阻止某些用戶代理(User-Agents)?你可以輕松阻止用戶代理,如掃描器,機(jī)器人和垃圾郵件,它們可能會(huì)濫用你的服務(wù)器。##Blockdownloadagents##if($http_user_agent~*LWP::Simple|BBBike|wget){return403;}##阻止msnbot和scrapbot機(jī)器人:##Blocksomerobots##if($http_user_agent~*msnbot|scrapbot){return403;}12b、如何阻止被提名的垃圾郵件被提名的垃圾郵件都很危險(xiǎn),它們可能會(huì)損害你的SEO排名,可以使用下面的代碼阻止訪問垃圾郵件發(fā)送者:##DenycertainReferers###if($http_referer~*(babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen)){#return404;return403;}##13、如何停止圖片熱鏈圖片或HTML熱鏈?zhǔn)侵赣腥嗽谒麄兊木W(wǎng)站上引用了你網(wǎng)站的圖片,你必須為其它網(wǎng)站的流量支付貸款費(fèi)用,有點(diǎn)象是網(wǎng)站劫持,通常這種情況發(fā)生在博客和論壇中,我強(qiáng)烈建議你在服務(wù)器級停止并阻止圖片熱鏈。#Stopdeeplinkingorhotlinkinglocation/images/{valid_referersnoneblocked;if($invalid_referer){return403;}}例子:重寫并顯示禁令圖片:valid_referersblocked;if($invalid_referer){rewrite人/images/uploads.*\.(gif|jpg|jpeg|png)$/banned.jpqlast}另外,請參考"How-to:使用Nginx映射阻止圖片熱鏈"(/pipermail/nginx/2007-June/001082.html)。14、目錄限制你可以為特定目錄設(shè)置訪問控制,所有網(wǎng)頁目錄都應(yīng)配置為按需訪問。通過IP地址限制訪問,你可以限制訪問/docs/目錄的IP地址:location/docs/{##blockoneworkstationdeny;##allowanyonein/24allow/24;##droprestoftheworlddenyall;}通過密碼保護(hù)目錄,首先創(chuàng)建一個(gè)密碼文件,再添加一個(gè)用戶vivek:mkdir/usr/local/nginx/conf/.htpasswd/htpasswd-c/usr/local/nginx/conf/.htpasswd/passwdvivek編輯nginx.conf添加需要保護(hù)的目錄:###PasswordProtect/personal-images/and/delta/directories###location~/(personal-images/.*|delta/.*){auth_basic“Restricted";auth_basic_user_file/usr/local/nginx/conf/.htpasswd/passwd;創(chuàng)建好密碼文件后,后面的用戶可以使用下面的命令進(jìn)行追加:#htpasswd-s/usr/local/nginx/conf/.htpasswd/passwduserName15、NginxSSL配置HTTP是一個(gè)純文本協(xié)議,很容易被竊聽,你應(yīng)該使用SSL加密傳輸?shù)男畔?。首先需要?jiǎng)?chuàng)建一個(gè)SSL證書,輸入下面的命令:#cd/usr/local/nginx/conf#opensslgenrsa-des3-outserver.key1024#opensslreq-new-keyserver.key-outserver.csr##-outserver.key#opensslx509-req-days365-inserver.csr-signkeyserver.key-outserver.crt編輯nginx.conf,找到對應(yīng)位置,做如下修改:server{server_;listen443;sslon;ssl_certificate/usr/local/nginx/conf/server.crt;ssl_certificate_key/usr/local/nginx/conf/server.key;access_log/usr/local/nginx/logs/ssl.access.log;error_log/usr/local/nginx/logs/ssl.error.log;重啟Nginx:/usr/local/nginx/sbin/nginx-sreload另外,請參考NginxSSL文檔(/NginxHttpSslModule)。16、Nginx和PHP安全技巧PHP是流行的服務(wù)器端腳本語言,對/etc/php.ini做如下修改:禁用危險(xiǎn)的函數(shù)disable_functions=phpinfo,system,mail,exec##限制資源##每個(gè)腳本的最大執(zhí)行時(shí)間,單位秒max_execution_time=30#每個(gè)腳本解析請求數(shù)據(jù)的最大時(shí)間max_input_time=60#每個(gè)腳本可以消耗的最大內(nèi)存(8MB)memory_limit=8M#PHP要接收的POST數(shù)據(jù)最大大小post_max_size=8M#是否允許HTTP文件上傳file_uploads=Off#允許上傳的最大文件大小upload_max_filesize=2M#不將PHP錯(cuò)誤消息暴露給外部用戶display_errors=Off#啟用安全模式safe_mode=On#只允許訪問隔離目錄中的可執(zhí)行文件safe_mode_exec_dir=php-required-executables-path#限制外部訪問PHP資源safe_mode_allowed_env_vars=PHP_#限制泄露PHP信息expose_php=Off#記錄所有錯(cuò)誤log_errors=On#不為輸入數(shù)據(jù)注冊全局register_globals=Off#最小化允許的phppost大小post_max_size=1K#確保PHP重定向正確cgi.force_redirect=0#禁止上傳,除非必要file_uploads=Off#啟用SQL安全模式sql.safe_mode=On#避免打開遠(yuǎn)程文件allow_url_fopen=Off另外,請參考“PHP安全:限制腳本使用的資源”(http://w\/faq/php-resources-limits/),“PHP.INI:禁用exec,shell_exec,system,popen和其它功能提高安全”(/faq/linux-unix-apache-lighttpd-phpini-disable-functions/)17、盡可能在ChrootJail(容器)中運(yùn)行Nginx將Nginx放入ChrootJail可以最大限度地減少被攻擊的危險(xiǎn),它將Web服務(wù)器隔離到文件系統(tǒng)的專用區(qū)域,注意你不能使用傳統(tǒng)的chroot方法設(shè)置Nginx,但你可以使用FreeBSDjails,Xen或OpenVZ虛擬化,它們也使用了容器的概念。18、在防火墻級限制每個(gè)IP的連接Web服務(wù)器必須時(shí)刻關(guān)注連接和每秒的連接限制,pf和iptables都可以在訪問Nginx服務(wù)器之前卡住最終用戶。Linuxiptables:每秒卡住的Nginx連接下面的例子表示如果某個(gè)IP在60秒嘗試連接到80端口的次數(shù)超過了15,iptables將會(huì)丟掉來自它的入站連接:/sbin/iptables-AINPUT-ptcp-dport80-ieth0-mstate-stateNEW-mrecent-set/sbin/iptables-AINPUT-ptcp-dport80-ieth0-mstate-stateNEW-mrecent-update-seconds60-hitcount15-jDROPserviceiptablessaveBSDPF:每秒卡住的Nginx連接編輯/etc/pf.conf,做如下更新,下面的命令限制了每個(gè)來源的最大連接數(shù)為100,15/5指定某時(shí)間跨度內(nèi)的連接數(shù)限制,這里就是5秒內(nèi)的最大連接數(shù)為15,如果有人違背這條規(guī)則,將被加入到abusive_ips表,那么他以后就不能再連接了。最后刷新所有狀態(tài)。ebserver_ip=”"tablepersistblockinquickfrompassinon$ext_ifprototcpto$webserver_ipportwwwflagsS/SAkeepstate(max-src-conn100,max-src-conn-rate15/5,overloadflush)請根據(jù)你的需要和通信流量調(diào)整所有的值(瀏覽器可能會(huì)打開多個(gè)連接)。另夕卜,請參考“PF防火墻腳本示例”(http://hash一cyherciti.hiz/firewall/pf-firewa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論