项目要求链接如下:http://51ctoblog.blog.51cto.com/26414/300667
解决思路:
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; 访问日志记录路径,等级
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
,以监控生产服务器。
具体安装文档网上有。这里发几张截图说明其监控的直观性和便捷性。
本文出自 “西瓜皮” 博客,谢绝转载!