<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
解决思路:
1,监控机由于只作为日志监控,负载较低,在其上安装部署nagios以监控生产服务器。
2,服务器负载调度换成nginx,因为后台就两个WEB服务器,并且是一主一从,可以将两个都换成在线的,提高了存活性。负载方面要求简单。挂机了用nagios通知。
3,nginx可以以极小的内存损耗来运行,生产中可以支持2万到4万个并发连接。因此DDOS***对其来说无用,合理利用转发策略可以将***引导向别处。更何况,nginx可以实现静态页面前端缓存,便于缩短访问时间。可以把其处理不了的动态页面转发给后台WEB服务器,像apache,tomcat都可以,这样减轻了后台WEB服务器负载,并且两台WEB同时在线,单机平均负载更低,更不易掉线。
4,安全加固:在前端nginx上打开iptables防火墙,屏蔽一些非正常的链接,如SYN***等等。
5,nginx可以通过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
2)nginx缓存方面配置
静态文件缓存到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;
}
JavaScript、CSS在浏览器本地缓存一天
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 都会非常及时的处理状态的变化,以保证不会影响到用户的访问
4)nginx防***方面配置,epoll算法,增大最高并发连接数
(如果预算充足的话,就部署硬件防火墙)
开启进程数(nginx每个进程耗费10M~12M内存,可以根据实际情况增加进程数)
worker_processes 8;
events {
use epoll;
worker_connections 40960;# 总的允许最大的同时连接数
}
5)nginx的负载能力超强,一般的DDOS是无法击垮一台nginx代理的,所以用nginx来过滤掉一些DDOS是完全没有问题。比如说user-agent为IE5.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; 访问日志记录路径,等级
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access; 访问日志记录路径,等级
7)其他优化配置
keepalive_timeout 60; #长连接超时时间
对网页文件、CSS、JS、XML等启动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,以监控生产服务器。
具体安装文档网上有。这里发几张截图说明其监控的直观性和便捷性。



转载于:https://blog.51cto.com/1234567aaa/304183