【拯救趙明】安全方案

【拯救趙明】 拿什麼拯救個人網站php

活動連接:http://51ctoblog.blog.51cto.com/26414/300667html

原架構存在的弊端:
一、 負載均衡器存在單點故障
二、 缺乏***檢測系統
三、 缺乏用戶操做記錄系統
四、 數據庫和前端沒有用路由隔離
五、 缺乏管理員管理設備(***)前端

調整後的架構圖:java

 

說明:
一、 使用Nginx+keepalved實現負載均衡,解決單點與高流量併發問題
二、 數據與前端隔離,加強安全性。
三、 數據庫負載,memcached緩清數據庫壓力。
四、 管理者用×××管理全部設備。監控實時報警。node

注:本文只寫前端負載、數據庫負載、×××部署過程。及詳解。忽略memcache與監控mysql

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145linux

1、 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 頭。nginx

進一步說明:
Keepalived是Linux下面實現VRRP 備份路由的高可靠性運行件。基於Keepalived設計的服務模式可以真正作到主服務器和備份服務器故障時IP瞬間無縫交接。sql

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.三、nginx-0.7.5一、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

2、 數據庫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

3、 ×××部署
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=***

相關文章
相關標籤/搜索