您的位置:首页 > 其它

安全方案

2012-05-05 12:41 302 查看
安全方案

原架构存在的弊端:

1、 负载均衡器存在单点故障

2、 缺少***检测系统

3、 缺少用户操作记录系统

4、 数据库和前端没有用路由隔离

5、 缺少管理员管理设备(***)

调整后的架构图:





说明:

1、 使用Nginx+keepalved实现负载均衡,解决单点与高流量并发问题

2、 数据与前端隔离,增强安全性。

3、 数据库负载,memcached缓清数据库压力。

4、 管理者用***管理所有设备。监控实时报警。

注:本文只写前端负载、数据库负载、***部署过程。及详解。忽略memcache与监控

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
一、 Nginx+keepalved实现负载均衡

WHY? 为什么用Nginx而不用LVS?

7点理由足以说明一切:

1 、高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 ~ 3 万并发连接数。

2 、内存消耗少: 在 3 万并发连接下,开启的 10 个 Nginx 进程才消耗 150M 内存( 15M*10=150M )。

3 、配置文件非常简单: 风格跟程序一样通俗易懂。

4 、成本低廉: Nginx 为开源软件,可以免费使用。而购买 F5 BIG-IP 、 NetScaler 等硬件负载均衡交换机则需要十多万至几十万人民币。

• 使用 Nginx 做七层负载均衡的理由

5 、支持 Rewrite 重写规则: 能够根据域名、 URL 的不同,将 HTTP 请求分到不同的后端服务器群组。

6 、内置的健康检查功能: 如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。

7 、节省带宽: 支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

进一步说明:

Keepalived是Linux下面实现VRRP 备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。

Nginx是基于Linux 2.6内核中epoll模型http服务器,与Apache进程派生模式不同的是Nginx进程基于于Master+Slave多进程模型,自身具有非常 稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠 性,Slave进程所有的业务信号都由主进程发出,Slave进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。

服务器IP存活检测是由Keepalived自己本身完成的,将2台服务器配置成Keepalived互为主辅关系,任意一方机器故障对方都能够将IP接 管过去。

Keepalived的服务IP通过其配置文件进行管理,依靠其自身的进程去确定服务器的存活状态,如果在需要对服务器进程在线维护的情况下,只需要停掉 被维护机器的Keepalived服务进程,另外一台服务器就能够接管该台服务器的所有应用。

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
快速配置方法:

A、环境:

centos5.3、nginx-0.7.51、keepalived-1.1.19

主nginx负载均衡器:192.168.0.154

辅nginx负载均衡器:192.168.9.155

vip:192.168.0.188

B、安装keepalived

#tar zxvf keepalived-1.1.19.tar.gz

#cd keepalived-1.1.19

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

#make

#make install

#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/

vim keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

51cto@51cto.com

}

notification_email_from keepalived@chtopnet.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.0.155 <==辅nginx的IP地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.0.188 <==VIP地址

}

}

#service keepalived start

辅机的配置文件:

! Configuration File for keepalived

global_defs {

notification_email {

51cto@51cto.com

}

notification_email_from keepalived@chtopnet.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.0.154 <==主nginx的IP的地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.0.188

}

}

检查其配置: ip a

测试:停主看辅是否接管

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
优化及安全配置:

iptables 只开启80对外,SSH只允许内网连接

Iptables –t filter –A RH-Firewall-1-INPUT –s 192.168.1.0/24 –p tcp –dport 22 –j ACCEPT

Iptables –t filter -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

#防SYN

防止同步包洪水(Sync Flood)

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

也有人写作

#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改

#防止各种端口扫描

# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Ping洪水***(Ping of Death)

# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#修改sysctl.conf

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

打开SYN COOKIE功能:

sysctl -w net.ipv4.tcp_syncookies=1

降低重试次数:

sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3

配置Chkrootkit 轻量级别***检测。

参考:http://www.centospub.com/make/chkrootkit.html

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
二、 数据库cluster 配置

这里写MASTER/SLAVE配置方法:

更为好的负载方案参考我的BLOG:

mysql+mmm+proxy实现mysql读写分离及HA
http://liuyu.blog.51cto.com/183345/98867
A、环境

主服务器IP为:10.0.0.2

从服务器IP为:10.0.0.3

B、主从配置:



[mysqld]

log-bin=mysql-bin

server-id=1



[mysqld]

log-bin=mysql-bin

server-id=2

C、建立同步账号,锁表,建立快照

GRANT REPLICATION SLAVE ON *.*

-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

FLUSH TABLES WITH READ LOCK;

tar -cvf /tmp/mysql-snapshot.tar ./data

D、记下POST值

mysql > SHOW MASTER STATUS;

+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73 | test | manual,mysql |

+---------------+----------+--------------+------------------+

E、解锁、COPY文件

UNLOCK TABLES;

# scp /tmp/mysql-snapshot.tar root@10.0.0.3:/root

F、启动,查看状态

mysql> show slave status\G

会得到类似下面的列表:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

启动同步:mysql> start slave;

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
三、 ***部署

A,基本安装

1.1相关软件包:
http://open***.net/
Lzo-1.08.targz

Open***-2.09.tar.gz

openssl

1.2具体安装

# cd /root

# tar zxvf lzo-1.08.tar.gz

# cd lzo-1.08

# ./configure

# make && make install

# cd /root

# tar zxvf open***-2.0_beta7.tar.gz

# cd open***-2.0

# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib

# make

#cp –Rf open***-2.0 /etc/open***

B,网络配置

网络规划:

***使用路由模式还是网桥模式

建议使用路由模式. 私有子网网段的规划

建立***往往会把各个地方的私有子网网段连接在一起.

互联网IP地址分配机构(IANA)已经保留了以下3个网段为私有子网网段所用(RFC 1918):

10.0.0.0 10.255.255.255 (10/8 prefix)

172.16.0.0 172.31.255.255 (172.16/12 prefix)

192.168.0.0 192.168.255.255 (192.168/16 prefix)

C,具体配置

3.1创建证书配置文件:

下面是linux/bsd/unix系统建立PKI:

#cd /etc/open***/easy-rsa

#vi vars

export KEY_COUNTRY=CN

export KEY_PROVINCE=BJ

export KEY_CITY=Bj

export KEY_ORG="xxxx"

export KEY_EMAIL=liuyu@151cto.com

#. ./vars (注意. .之间有空格)

#./clean-all

#./build-ca

最后的命令build-ca将认证CA证书,这些密匙跟openssl紧密结合.

3.2建立服务器的认证书和密匙:

#./build-key-server server

3.3建立客户端证书:

#./build-key client1

#./build-key client2

#./build-key client3

如果你想保护你的客户端密匙,请运行build-key-pass脚本.

为了区分每个客户端,必须用适当的名称命名”Common Name”, 比如. "client1", "client2", or "client3". 通常是为每个客户端指定唯一的”common name”.

3.4创建Diffie Hellman参数:

open***服务必须创建Diffe Hellman:

#./build-dh

#cd /etc/open***

#mkdir conf keys

#cd easy-rsa/keys

3.5拷贝证书相关的文件:

#cp ca.crt /etc/open***/keys

#cp server.crt /etc/open***/keys

#cp server.key /etc/open***/keys

#cp dh1024.pem /etc/open***/keys

3.6配置服务端:

#cd sample-config-files/

#cp server.conf /etc/open***/conf/

#cd /etc/open***/conf

#cp server.conf server.conf.liuyu

#vi server.conf

---------------------------cut begin-----------------------------------------------------------

port 1194

proto tcp

dev tun

ca /etc/open***/keys/ca.crt

cert /etc/open***/keys/server.crt

key /etc/open***/keys/server.key # This file should be kept secret

dh /etc/open***/keys/dh1024.pem

server 172.16.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "route 172.16.0.0 255.255.255.0"

push "route 172.16.0.0 255.255.255.0"

client-config-dir /etc/open***/ccd

route 172.16.0.0 255.255.255.0

client-to-client

keepalive 10 120

comp-lzo

user nobody

group nobody

persist-key

persist-tun

status open***-status.log

verb 3

plugin /etc/open***/plugin/simple.so

-------------------------------cut end------------------------------------------------

3.7启动服务端open***

#mkdir ccd

#cd ccd

#vi lin

ifconfig-push 172.16.0.6 172.16.0.7

#./open*** --config conf/server.conf

3.8配置client端:

#cd /etc/open***

#mkdir conf

#cd sample-config-files/

#grep –v “^#” client.conf > 1.conf

#cp 1.conf /etc/open***/conf/client.conf

#cd ../

#vi conf/client.conf

-------------------------------------cut begin-----------------------------------------------

client

;dev tap

dev tun

;dev-node MyTap

proto tcp

;proto udp

remote 192.168.13.211 1194

;remote my-server-2 1194

;remote-random

resolv-retry infinite

nobind

user nobody

group nobody

persist-key

persist-tun

;http-proxy-retry # retry on connection failures

;http-proxy [proxy server] [proxy port #]

;mute-replay-warnings

ca /etc/open***/keys/ca.crt

cert /etc/open***/keys/lin.crt

key /etc/open***/keys/lin.key

;ns-cert-type server

;tls-auth ta.key 1

;cipher x

comp-lzo

verb 3

--------------------------------cut end---------------------------------------------

3.9制作启动服务

#cd /etc/open***

#cd sample-scripts/

#cp open***.init /etc/rc.d/init.d/open***

#chkconfig –add open***

#cd /etc/open***/conf

#cp server.conf ../ //将配置文件拷贝到/etc/open***根目录下即可.

#service open*** start 即可即动open*** 服务.

客户端启动服务制作类似于服务器的上述过程.

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
结束语:本文都是采用开源软件来加固架构的安全。并非购买商业性产品。当你的网站发展到一定的规模,可以采用商业性产品时。可以使用IDS,IPS,蜜罐等。

此方案还可以加上扫代码漏洞的软件就是帮你分析你的asp,jsp,java程序里面有没有漏洞等问题。

如有问题请与本人取得联系:

Liuyu105#gmail.com

Liuyu.blog.51cto.com

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145
参考:
http://www.slideshare.net/Cary/nginx-presentation http://www.linuxtone.org/html/27/t-3927.html http://open***.net/index.php/open-source/documentation/howto.html http://bbs.linuxtone.org/viewthread.php?tid=47&highlight=***
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安全方案