<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

解决思路:
1,监控机由于只作为日志监控,负载较低,在其上安装部署nagios以监控生产服务器。

 

2,服务器负载调度换成nginx,因为后台就两个WEB服务器,并且是一主一从,可以将两个都换成在线的,提高了存活性。负载方面要求简单。挂机了用nagios通知。

 

3nginx可以以极小的内存损耗来运行,生产中可以支持2万到4万个并发连接。因此DDOS***对其来说无用,合理利用转发策略可以将***引导向别处。更何况,nginx可以实现静态页面前端缓存,便于缩短访问时间。可以把其处理不了的动态页面转发给后台WEB服务器,像apache,tomcat都可以,这样减轻了后台WEB服务器负载,并且两台WEB同时在线,单机平均负载更低,更不易掉线。

 

4,安全加固:在前端nginx上打开iptables防火墙,屏蔽一些非正常的链接,如SYN***等等。

 

5nginx可以通过access_log记录访问者IP  nagios监控链接阈值 iptables封骇客IP,将nginx以后的服务器都设置成内网IP,在iptables设置禁止外网访问内网IP

 

拓扑图:
详细说明和配置:

 

nginx 主机配置:

 

1)安全性配置 改内核,编写防火墙脚本

 

负载均衡器上部署linux,更改内核:
echo 1 > /proc/sys/net/ipV4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

 

编写脚本:
#!/bin/bash

 

ipt=/sbin/iptables
INPUT_ech0=
TURN_ech1=

 

$ipt -t filter -F INPUT
$ipt -t filter -F OUTPUT
$ipt -t filter -p OUTPUT DROP
$ipt -t filter -P INPUT  DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -m state --state INVALID -j DROP

 

$ipt -t filter -A INPUT -i ${INPUT_eth0} -p tcp --syn -m multiport --dports 22,…… -m state --state NEW -j ACCEPT
$ipt -t filter -A INPUT -i ${INPUT_eth0} -p icmp --icmp-type8 -m limit --limit 6/m --limit-brust 10 -j ACCEPT
$ipt -t filter -A INPUT -i ${INPUT_eth0} -p icmp -m state --state NEW -j DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -m state --state ESTABLISTED,RELATED -j ACCEPT

 

$ipt -t filter -A INPUT -i ${INPUT_eth0} -s DDOS_IP --dport 80 -j DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -s DDOS_IP -O ${TURN_ech1} -j DROP

 

 

2nginx缓存方面配置

 

静态文件缓存到nginx服务器上,直接处理并返回给浏览器,root指令指定缓存路径

 

location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {
    root /opt/webapp;
    expires 24h;
}
                      
图片在浏览器本地缓存15
 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   {
     expires      15d;
   }
JavaScriptCSS在浏览器本地缓存一天
 location ~ .*\.(js|css)?$
   {
     expires      1d;
   }  

 

3)nginx负载均衡方面配置

 

定义一个负载均衡池名为apache
  upstream apache {
        server 192.168.0.1:80 weight=10;
        server 192.168.0.2:80 weight=10;

 

 

在前面定义了nginx能够直接处理一些静态文件请求后,其他的所有请求通过 proxy_pass 指令传送给后端的服务器
location / {
    proxy_pass        http://apache;
    proxy_set_header  X-Real-IP  $remote_addr;
}

 

Nginx 的集群配置中,Nginx 使用最简单的平均分配规则给集群中的每个节点分配请求。一旦某个节点失效时,或者重新起效时,Nginx 都会非常及时的处理状态的变化,以保证不会影响到用户的访问

 

4nginx防***方面配置,epoll算法,增大最高并发连接数
    (如果预算充足的话,就部署硬件防火墙)

 

开启进程数(nginx每个进程耗费10M~12M内存,可以根据实际情况增加进程数)
worker_processes  8;
events {
    use epoll;
    worker_connections  40960;# 总的允许最大的同时连接数
 }
5)nginx的负载能力超强,一般的DDOS是无法击垮一台nginx代理的,所以用nginx来过滤掉一些DDOS是完全没有问题。比如说user-agentIE5.01,可以指向另外一个地方

 

if ( $http_user_agent ~* "MSIE 5.01" ) {
    proxy_pass http://www.西瓜皮.com;
  }
 
6) 记录访问者的日志信息
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
   access_log  /data1/logs/access.log  access;   访问日志记录路径,等级

 

7)其他优化配置
 
keepalive_timeout 60;           #长连接超时时间

 

对网页文件、CSSJSXML等启动gzip压缩,减少数据传输量,提高访问速度。
gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

 

这里nginx主要作为前端缓存和WEB负载均衡集群,通过其承受的高并发连接数来抵抗DDOS***,同时减轻后台服务器单机平均负载。还是那句话:这是在保留现有架构的基础上所作的更改,如果预算充足的话买抗DDOS的硬件防火墙。

 

写在后面的假设:假如nginx也宕机呢??

 

后面的WEB服务器都安装上nginx,并将nginx配置文件稍作改进,如果前端nginx宕机了,可以由后台的WEB1来接替前端nginx的工作:关闭apache,打开nginx,更改IP,将动态处理转发到WEB2上。同时抢修前端nginx

 

 

后端的监控服务器配置:

 

在监控服务器上安装nagios,以监控生产服务器。
具体安装文档网上有。这里发几张截图说明其监控的直观性和便捷性。