天天看點

nginx站點安全

Nginx站點安全

一、nginx簡介

Nginx("engine x") 是一個高性能的 HTTP 和反向代理伺服器,也是一個IMAP/POP3/SMTP 代理伺服器。Nginx由Igor Sysoev 為俄羅斯通路量第二的Rambler.ru 站點開發。

Nginx ("engine x") 是一個高性能的 HTTP 和反向代理伺服器,也是一個 IMAP/POP3/SMTP代理伺服器。 Nginx 是由 Igor Sysoev 為俄羅斯通路量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0釋出于2004年10月4日。其将源代碼以類BSD許可證的形式釋出,因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4釋出。

支援高并發連接配接.官方測試的是5w并發連接配接但在實際生産中可制成2-4w并發連接配接數,得益于nginx使用最新的epoll(linux 2.6核心)和kqueue(freebsd)網絡I/O模型.而apache使用的則是傳統的select模型,其比較穩定的prefork模式為多程序模式,需要經常派生子程序,所消耗的CPU等伺服器資源要比nginx高的多.

二、安裝nginx

安裝環境:虛拟機vmware10下centos6.4-64位作業系統最小化安裝

軟體版本:nginx-1.4.4.tar 下載下傳位址:www.nginx.org

還需要我們安裝事件庫,因為nginx是事件觸發機制。軟體包版本:libevent-2.0.16-stable.tar

還需要注意的是預編譯環境,在安裝時會檢測預編譯環境的,如果出錯,一定要檢測自己自己的預編譯環境。

安裝過程:

[root@ahao~]# tar -zxvf nginx-1.4.4.tar.gz -C /usr/local/src

[root@ahao~]# cd /usr/local/src/nginx-1.4.4/

[[email protected]]# groupadd -r nginx

[[email protected]]# useradd -r -g nginx -s /sbin/nologin -M nginx

[[email protected]]# yum install pcre-devel

[root@ahao~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src

[root@ahao~]# cd /usr/local/src/libevent-2.0.16-stable/

[[email protected]]# ./configure --prefix=/usr/local/libevent

[[email protected]]# make && make install

[[email protected]]# cd /usr/local/libevent

[root@ahaolibevent]# ll lib

[root@ahaolibevent]# vim /etc/ld.so.conf.d/libevent.conf//添加如下目錄:

                           /usr/local/libevent/lib

[root@ahaolibevent]# ldconfig /重新配置

[root@ahaolibevent]# ldconfig -pv |grep libevent 檢視一下

[root@ahao nginx-1.4.4]# ./configure  --conf-path=/etc/nginx/nginx.conf  --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid  --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx  --with-http_ssl_module  --with-http_flv_module  --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/--http-proxy-temp-path=/var/tmp/nginx/proxy/  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/  --with-pcre

[root@ahao nginx-1.4.4]# yum install openssl-devel  //出現錯誤,需要安裝openssl-devel包

[[email protected]]# make && make install

[root@ahaonginx]# cd /usr/local/nginx/sbin/

[root@ahaosbin]# ./nginx –t  /測試安裝之後的配置檔案是否有錯,

mkdir:cannot create directory `/var/tmp/nginx/client': No such file or directory

[root@ahaosbin]# mkdir -pv  /var/tmp/nginx/client

[root@ahaosbin]# ./nginx –t

nginx:the configuration file /etc/nginx/nginx.conf syntax is ok

nginx:configuration file /etc/nginx/nginx.conf test is successful

編寫控制腳本:

#!/bin/bash

# ./etc/init.d/functions

prog=/usr/local/nginx/sbin/nginx

lockfile=/var/lock/nginx.lock

start (){

     if [ -e $lockfile ];then

    echo "the nginx server isstarted"

    else

    echo -n "the nginx server isstarting......"

    sleep 1

    $prog && echo -e"[\033[32mOK\033[0m] " && touch $lockfile ||echo"failer"

   fi

}

stop () {

      if [ ! -e $lockfile ];then

    echo "the nginx server isstoped"

    echo -n "the nginx server isstoping......"

    $prog -s stop  && echo "OK" && rm-rf $lockfile || echo "failer"

 fi

restart(){

if [ -e $lockfile ]; then

         echo -n "the nginx isstoping..."

         $prog -s stop && echo  "OK" && rm -rf $lockfile ||echo "failer"

         echo -n "the nginx isstarting..."

         $prog && echo "OK"&& touch $lockfile ||echo "failer"

       fi

case"$1" in

start)

   start

   ;;

stop)

   stop

restart)

stop

start

  ;;

*)

echo"USAGE:start|stop|restart"

esac

service nginx start//啟動

先測試通路web伺服器:

nginx站點安全

三、站點安全

Nginx站點安全是基于子產品實作的不同的安全設定需要不同的子產品。

1、身份驗證

身份驗證需要Auth Basic子產品。

參考網站:http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

配置如下:

vim /etc/nginx/nginx.conf /編輯nginx主配置檔案添加

  server {

         listen       192.168.1.199:80;

         server_name  tec.abc.com;

         location / {

             root   /usr/local/nginx/tec;

             index  index.html index.htm;

         }  

         auth_basic      "a-hao";

         auth_badic_user_file    /usr/local/nginx/tec/.htpasswd;

nginx站點安全

這裡需要我們知道.htpasswd檔案的産生,需要httpd-tools軟體包,是以需要在主機上安裝這樣軟體包。

[root@ahao init.d]# yum install httpd-tools

[root@ahao init.d]#  mkdir/usr/local/nginx/tec

[root@ahao init.d]# cd /usr/local/nginx/tec

[root@ahao tec]# vim index.html //在檔案添加一行顯示就可以。比如:tec

現在我們生成.htpasswd檔案

[root@ahao tec]# htpasswd -c /usr/local/nginx/tec/.htpasswdaaa

完成之後我們可以在浏覽器中通路一下(實驗環境虛拟機ip是:192.168.1.199)

nginx站點安全

證明身份驗證成功。

2、來源控制

來源控制是基于access子產品實作的

參考網站:http://nginx.org/en/docs/http/ngx_http_access_module.html

Access可以在server裡引用,也可以在location中引用。

為了便于實作的需要,我先安裝一個文本編輯器------lynx

          vim/etc/nginx/nginx.conf /編輯nginx主配置檔案添加

nginx站點安全

                  lynx  /etc/hosts中添加

192.168.1.199  www.abc.com

192.168.1.199  tec.abc.com

完成之後你可以測試:

root@ahao tec]# lynx  http://tec.abc.com

這個頁面是需要經過身份驗證的,測試中,成功的話會讓你身份驗證的。

[root@ahao tec]# vim /etc/nginx/nginx.conf

nginx站點安全

[root@ahao tec]# service nginx restart

重新開機之後測試:(本地實體位址是192.168.1.105)

nginx站點安全

是以在我們實體機上是可以通路的。

nginx站點安全

這樣就達到目的,實體機192.168.1.105可以通路服務,但是在虛拟機中192.168.1.199就不能通路伺服器。

3、加密通路

加密通路使用的子產品是:ssl

參考網站:http://nginx.org/en/docs/http/ngx_http_ssl_module.html

配置:

CA伺服器配置:

                  [root@ahao~]# vim /etc/pki/tls/openssl.cnf

                   首先我們要簡單的配置ssl子產品檔案:

                   根據檔案中需要一個資料檔案來記錄證書頒發的情況。是以我們就建立這樣的                        檔案,

                  [root@ahao~]# cd /etc/pki/CA

           [root@ahao CA]# touch index.txt

                  [root@ahaoCA]# touch serial //這是記錄證書序号的檔案,也需要手動建立

                  [root@ahaoCA]# echo "01">serial //加入序号,以“01”開始

                   在openssl.cnf檔案中還需要更改證書頒發所允許的地區,要給成不受限的。

                  countryName             = optional

           stateOrProvinceName     =optional

                  organizationName        = optional

                   還可以根據自己的需要更改預設頒發證書的國家,省份,城市。

                  [root@ahaoCA]# openssl genrsa 1024 >private/cakey.pem //産生私鑰檔案

                  [root@ahaoCA]# chmod 600 private/cakey.pem  //更改權限

                  //産生公鑰檔案

                  [root@ahaoCA]# openssl req -new -key private/cakey.pem -x509 -out                             cacert.pem

           You are about to be asked to enter information that will                                 beincorporated

           into your certificate request.

           What you are about to enter is what is called a Distinguished Nameor a                     DN.

           There are quite a few fields but you can leave some blank

           For some fields there will be a default value,

           If you enter '.', the field will be left blank.

           -----

           Country Name (2 letter code) [CN]:

           State or Province Name (full name) [BEIJING]:

           Locality Name (eg, city) [BEIJING]:

           Organization Name (eg, company) [Default Company Ltd]:CA

           Organizational Unit Name (eg, section) []:tec  

           Common Name (eg, your name or your server's hostname) []:rootca.org

           Email Address []:

   Web伺服器現在需要向CA伺服器獲驗證書(證書的擷取是需要個過程,證書上要有web服務        的公鑰,公鑰從哪裡來呢,公鑰是從私鑰中産生的,是以在請求的過程中,必須要先                有WEB服務的私鑰,再發送請求,獲得證書。)

//産生web服務的私鑰檔案

[root@ahao CA]# mkdir -pv /etc/nginx/certs

mkdir: created directory `/etc/nginx/certs'

[root@ahao CA]# cd /etc/nginx/certs/

[root@ahao certs]# openssl genrsa 1024 >nginx.key

                  [root@ahaocerts]# chmod 600 nginx.key //更改權限

[root@ahaocerts]# openssl req -new -key  nginx.key-out nginx.crq // 公鑰檔案的建立

You are about to be asked to enter information that will beincorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Nameor a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [CN]:

State or Province Name (full name) [BEIJING]:HENAN

Locality Name (eg, city) [BEIJING]:ZHENGZHOU

Organization Name (eg, company) [Default CompanyLtd]:TUOYUANEDU    

Organizational Unit Name (eg, section) []:tec

Common Name (eg, your name or your server's hostname) []:tec.abc.com

Email Address []:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

      [root@ahaocerts]# openssl ca -in nginx.crq -out nginx.cert //建立請求                        檔案

      Usingconfiguration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

      Serial Number: 1 (0x1)

      Validity

          Not Before: Nov 30 00:17:54 2013 GMT

          Not After : Nov 30 00:17:54 2014 GMT

      Subject:

           countryName               = CN

          stateOrProvinceName       = HENAN

          organizationName          =TUOYUANEDU

          organizationalUnitName    = tec

          commonName                =tec.abc.com

      X509v3 extensions:

          X509v3 Basic Constraints:

               CA:FALSE

          Netscape Comment:

               OpenSSL Generated Certificate

          X509v3 Subject Key Identifier:

              D1:DD:F8:9A:46:B1:01:1D:ED:B2:19:49:6C:7A:E8:48:47:CE:A9:CB

          X509v3 Authority Key Identifier:

              keyid:3E:A6:CE:D8:37:0C:F8:2E:5B:6C:59:2A:DE:39:EF:F9:AF:F3:34:45

Certificate is to be certified until Nov 30 00:17:54 2014 GMT (365days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

[root@ahao certs]# cat /etc/pki/CA/index.txt //檢視是否有證書檔案

V       141130001754Z                01     unknown  /C=CN/ST=HENAN/O=TUOYUANEDU/OU=tec/CN=tec.abc.com

我們還需要将證書與web伺服器綁定,

[root@ahao nginx]# vim /etc/nginx/nginx.conf //在主配置文檔中添加綁定項:

nginx站點安全

我們現在啟動一台windowsxp虛拟機,以它來通路web服務,事先在C:\windows\system32\drives\etc\hosts檔案中添加192.168.1.199  tec.abc.com

設定之後我們可以通路試試:出現下面的情況

nginx站點安全

出現這樣的情況,是主機不能識别證書是哪個權威機構頒發的,就是不認可證書,這樣的情況在nginx中有一種方法就是需要我們将CA伺服器證書與web服務中的證書合成一張證書。

[root@ahao certs]# cp /etc/pki/CA/cacert.pem  ./  //将CA憑證拷貝過來

[root@ahao certs]# mv nginx.cert nginx.cert.bak  //改名字便于區分,

[root@ahao certs]# cat nginx.cert.bak  cacert.pem >nginx.cert   // 合成一張證書,合成名字還是原來WEB服務的證書名字。

nginx站點安全

出現CA服務證書,就證明對了,我們就安裝證書就可以了

繼續閱讀