nginx针对静态页面防CC攻击.docx

上传人:b****1 文档编号:10252152 上传时间:2023-05-24 格式:DOCX 页数:17 大小:70.80KB
下载 相关 举报
nginx针对静态页面防CC攻击.docx_第1页
第1页 / 共17页
nginx针对静态页面防CC攻击.docx_第2页
第2页 / 共17页
nginx针对静态页面防CC攻击.docx_第3页
第3页 / 共17页
nginx针对静态页面防CC攻击.docx_第4页
第4页 / 共17页
nginx针对静态页面防CC攻击.docx_第5页
第5页 / 共17页
nginx针对静态页面防CC攻击.docx_第6页
第6页 / 共17页
nginx针对静态页面防CC攻击.docx_第7页
第7页 / 共17页
nginx针对静态页面防CC攻击.docx_第8页
第8页 / 共17页
nginx针对静态页面防CC攻击.docx_第9页
第9页 / 共17页
nginx针对静态页面防CC攻击.docx_第10页
第10页 / 共17页
nginx针对静态页面防CC攻击.docx_第11页
第11页 / 共17页
nginx针对静态页面防CC攻击.docx_第12页
第12页 / 共17页
nginx针对静态页面防CC攻击.docx_第13页
第13页 / 共17页
nginx针对静态页面防CC攻击.docx_第14页
第14页 / 共17页
nginx针对静态页面防CC攻击.docx_第15页
第15页 / 共17页
nginx针对静态页面防CC攻击.docx_第16页
第16页 / 共17页
nginx针对静态页面防CC攻击.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

nginx针对静态页面防CC攻击.docx

《nginx针对静态页面防CC攻击.docx》由会员分享,可在线阅读,更多相关《nginx针对静态页面防CC攻击.docx(17页珍藏版)》请在冰点文库上搜索。

nginx针对静态页面防CC攻击.docx

nginx针对静态页面防CC攻击

nginx针对静态页面防CC攻击

一、架构

Nginx介绍

Nginx是一款由俄罗斯程序设计师IgorSysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。

Nginx的特点

Nginx相较于Apache、lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。

在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。

Nginx的反向代理功能

nginxproxy是nginx的重要功能,利用proxy基本可以实现一个完整的7层负载均衡,它有这些特色:

1、功能强大,性能超强,工作稳定。

2、后端转向与业务配置分离,非常灵活。

3、可以指定任意IP和端口进行配置,与网络环境是不相干的。

4、可以针对后端返回的情况判断,不正常则重新请求另一台主机,并自动剔除不正常的主机。

5、可以分配权重,并且分配均匀。

6、可以实现多种分配策略。

7、上传文件使用异步处理方式,nginx会先将文件接收下来,然后再转发到后端,这样可以减少后端服务器很多连接。

根据Nginx的特点与反向代理的功能,使之成为静态页面防CC攻击绝佳选择。

根据我们以往的经验,一台Q9300、4GB内存的主机,可以轻松防住7万链接的CC攻击,此时服务器资源占用仍然相当低。

Nginx防CC攻击的架构:

二、服务器配置

服务器环境:

CentOS6.3X64

(注:

以下文档,蓝色为配置文件的内容,红色为运行的命令)

1、安装系统、编译环境等

最小化安装CentOS。

因为安装后我们要升级系统补丁,再安装必要组件,所以没必要安装其他组件。

安装完后,配置iptables,打开80端口,或者直接关闭iptables。

用 yumupdate-y 升级系统的组件

安装编译Nginx必要的组件:

yuminstall-ygccmakesendmailpcrepcre-developensslopenssl-develnanoscreenlrzszwgetcurlcurl-develsendmailmlocateopenssh-clientsmanpatch

添加www用户组和用户,并且指定www用户的shell为/sbin/nologin

groupaddwww&& useradd-gwww-s/sbin/nologinwww

创建相关的目录

mkdir-p/var/log/nginx /var/proxy_temp_dir /var/proxy_cache_dir

#touch/var/log/nginx/.log

2、编译nginx

下载nginx

cd~

wgethttp:

//nginx.org/download/nginx-1.2.7.tar.gz

tarzxfnginx-1.2.7.tar.gz

下载ngx_cache_purge

wget--no-check-certificate"-O"ngx_cache_purge-master.zip"

unzip-xngx_cache_purge-master.zip

下载nginx-upstream-jvm-route

wget"http:

//nginx-upstream-jvm--O"nginx-upstream-jvm-route-0.1.tar.gz"

tarzxfnginx-upstream-jvm-route-0.1.tar.gz

 

进入nginx源代码目录

cdnginx-1.2.7

打补丁

patch-p0<../nginx_upstream_jvm_route/jvm_route.patch

编译

./configure--user=www--group=www--add-module=../nginx_upstream_jvm_route--add-module=../ngx_cache_purge-master--prefix=/usr/local/nginx--with-http_stub_status_module--with-http_ssl_module

make&&makeinstall

 

3、配置nginx

进入nginx的配置目录

cd/usr/local/nginx/conf/

vinginx.conf

nginx.conf的配置

userwwwwww;

worker_processes8;

pid/usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile65535;

events {

useepoll;

worker_connections65535;

}

http{

include      mime.types;

default_typeapplication/octet-stream;

server_names_hash_bucket_size128;

client_header_buffer_size32k;

large_client_header_buffers432k;

client_max_body_size8m;

log_formataccess_log'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent"$http_x_forwarded_for';

sendfileon;

tcp_nopush    on;

keepalive_timeout60;

tcp_nodelayon;

fastcgi_connect_timeout300;

fastcgi_send_timeout300;

fastcgi_read_timeout300;

fastcgi_buffer_size64k;

fastcgi_buffers464k;

fastcgi_busy_buffers_size128k;

fastcgi_temp_file_write_size128k;

##cache_start##

proxy_connect_timeout5;

proxy_read_timeout60;

proxy_send_timeout5;

proxy_buffer_size16k;

proxy_buffers464k;

proxy_busy_buffers_size128k;

proxy_temp_file_write_size128k;

#注:

proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

proxy_temp_path/var/proxy_temp_dir;

#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为1GB。

proxy_cache_path/var/proxy_cache_dirlevels=1:

2keys_zone=cache_one:

200minactive=1dmax_size=1g;

##cache_end##

gzipon;

gzip_min_length1k;

gzip_buffers    416k;

gzip_http_version1.0;

gzip_comp_level2;

gzip_types      text/plainapplication/x-javascripttext/cssapplication/xml;

gzip_varyon;

include      upstream.conf;

include      vhostconf/*.conf;

}

viupstream.conf

(增加后端服务器时,需要在此添加后端服务器。

添加或修改的主要内容是上游服务器的访问地址,以及指定upstream名称。

upstream {

server192.168.1.102:

80weight=1max_fails=2fail_timeout=30s;

server192.168.1.103:

80weight=1max_fails=2fail_timeout=30s;

server192.168.1.105:

80weight=1max_fails=2fail_timeout=30s;

jvm_route$cookie_JSESSIONIDreverse;

}

创建vhostconf目录

mkdir vhostconf

配置相应的主机

(增加后端服务器时,需要在此添加后端服务器。

主要修改的有绑定域名、proxy_pass对应upstream.conf的地址)

vi vhostconf/.conf

server{

listen80;

server_name;

location/{

#root/var/;

#indexindex.jspindex.htmindex.html;

#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。

proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;

proxy_cachecache_one;

#对不同的HTTP状态码设置不同的缓存时间

proxy_cache_valid2003021h;

proxy_cache_valid3011d;

proxy_cache_validany1m;

#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内

proxy_cache_key$host$uri$is_args$args;

proxy_redirectoff;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

proxy_pass;

expires1d;

}  

#用于清除缓存,假设一个URL为http:

//192.168.8.42/test.txt,通过访问http:

//192.168.8.42/purge/test.txt就可以清除该URL的缓存。

location~/purge(/.*)

{

#设置只允许指定的IP或IP段才可以清除URL缓存。

allow127.0.0.1;

allow192.168.0.0/16;

denyall;  

proxy_cache_purgecache_one$host$1$is_args$args;

}

#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。

location~.*\.(php|jsp|cgi|asp|aspx)?

$

{

proxy_set_headerHost$host;

proxy_set_headerX-Forwarded-For$remote_addr;

proxy_pass;

}

location/nginx_status{

stub_statuson;

access_logoff;

allow183.63.215.39;

denyall;

}

access_log/var/log/nginx/.logaccess_log;

}

 

测试配置文件是否正确:

/usr/local/nginx/sbin/nginx-t

nginx:

theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisok

nginx:

configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful

4、配置nginx自启动

创建nginx自启动脚本

vi/etc/init.d/nginx

#!

/bin/bash

#nginxStartupscriptfortheNginxHTTPServer

#itisv.0.0.2version.

#chkconfig:

-8515

#description:

Nginxisahigh-performancewebandproxyserver.

#             Ithasalotoffeatures,butit'snotforeveryone.

#processname:

nginx

#pidfile:

/var/run/nginx.pid

#config:

/usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx

nginx_config=/usr/local/nginx/conf/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0

prog="nginx"

#Sourcefunctionlibrary.

./etc/rc.d/init.d/functions

#Sourcenetworkingconfiguration.

./etc/sysconfig/network

#Checkthatnetworkingisup.

[${NETWORKING}="no"]&&exit0

[-x$nginxd]||exit0

#Startnginxdaemonsfunctions.

start(){

if[-e$nginx_pid];then

  echo"nginxalreadyrunning...."

  exit1

fi

  echo-n$"Starting$prog:

"

  daemon$nginxd-c${nginx_config}

  RETVAL=$?

  echo

  [$RETVAL=0]&&touch/var/lock/subsys/nginx

  return$RETVAL

}

#Stopnginxdaemonsfunctions.

stop(){

       echo-n$"Stopping$prog:

"

       killproc$nginxd

       RETVAL=$?

       echo

       [$RETVAL=0]&&rm-f/var/lock/subsys/nginx/var/run/nginx.pid

}

#reloadnginxservicefunctions.

reload(){

   echo-n$"Reloading$prog:

"

   #kill-HUP`cat${nginx_pid}`

   killproc$nginxd-HUP

   RETVAL=$?

   echo

}

#Seehowwewerecalled.

case"$1"in

start)

       start

       ;;

stop)

       stop

       ;;

reload)

       reload

       ;;

restart)

       stop

       start

       ;;

status)

       status$prog

       RETVAL=$?

       ;;

*)

       echo$"Usage:

$prog{start|stop|restart|reload|status|help}"

       exit1

esac

exit$RETVAL

加上x权限

chmod+x /etc/init.d/nginx

加上自启动

echo/etc/init.d/nginxstart>>/etc/rc.local

启动nginx

/etc/init.d/nginxstart

 

三、优化

1、避免后端服务器出现大文件。

通常CC攻击会连接服务器的大文件,企图用尽服务器的带宽资源,因此,后端服务器不要放置大文件,对于大的图片,应对图片进行切片,切成多块以减小体积。

2、后端服务器尽量单独开一个非80端口(比如24392)给前端服务器,如果后端有硬件防火墙,要做直通。

3、如果后端服务器负荷仍然大,可以通过修改缓存时间等,提高命中率。

4、可以配置nginx的防攻击模块,对于连接过于频繁的client进行屏蔽。

5、可以对前端服务器进行双网卡捆绑,提高服务器带宽。

6、可以多台前端机器,采用keepalived负载均衡

 

四、负载均衡配置

注意:

做keepalived负载均衡,交换机必须不能绑定MAC或IP,否则keepalived无法正常运作。

yum-yinstallkernel-devel

yum-yupdatekernel

modprobeip_vs//内核加载ip_vs模块

lsmod|grepip_vs//查看是否加载成功。

以下请根据实际系统核心修改命令选项:

ln-s/usr/src/kernels/2.6.18-308.4.1.el5-i686//usr/src/linux//生成一个链接文件

cp/usr/src/kernels/2.6.18-308.4.1.el5-i686/include/net/ip_vs.h/usr/include/net///这个很重要,否则在安装ipvsadm的时候会提示缺少*.h文件

wget-c

tarzxvfkeepalived-1.2.2.tar.gz

vikeepalived-1.2.2/keepalived/libipvs-2.6/ip_vs.h

将#include放到#include的前面

cdkeepalived-1.2.2

./configure--prefix=/usr/local/keepalived

make

makeinstall

cp/usr/local/keepalived/sbin/keepalived/usr/sbin/

cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

mkdir/etc/keepalived

cd/etc/keepalived/

chkconfig--addkeepalived

chkconfigkeepalivedon

vikeepalived.conf

-------------------------------------------

主从配置实例之一

注:

配置文件里的网络接口、email、IP要根据实际情况填写。

!

ConfigurationFileforkeepalived

global_defs{

notification_email{

zhou@

}

notification_email_fromkeepalived@keepalived.org

smtp_server127.0.0.1

smtp_connect_timeout30

router_idLVS_DEVEL

}

vrrp_instanceVI_1{

stateMASTER

interfaceeth0

virtual_router_id51

mcast_src_ip113.105.157.114

priority100

advert_int1

authentication{

auth_typePASS

auth_passwy4nginx

}

virtual_ipaddress{

113.105.157.116

}

}

之二

!

ConfigurationFileforkeepalived

global_defs{

notification_email{

yuhongchun027@

}

notification_email_fromkeepalived@

smtp_server127.0.0.1

smtp_connect_timeout30

router_idLVS_DEVEL

}

vrrp_instanceVI_1{

stateBACKUP

interfaceeth0

virtual_router_id51

mcast_src_ip113.105.157.115

priority100

advert_int1

authentication{

auth_typePASS

auth_passwy4nginx

}

virtual_ipaddress{

113.105.157.116

}

}

--------------------------------------------

-----------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2