俗語說:一朝被蛇咬十年怕草繩,一點也不假,本以為自己對LinuxVPS很懂,其實在老外面前還是小菜,"不怕偷,就怕惦記著",這不我的VPS頻頻遭到來自國外的弱口令掃瞄,一開始完全沒有防備,在他們嘗試了一萬多次之後,密碼被破了,恭喜,你得到了shell,瞬間把服務器的資料數據全部清空,這種情況真的很痛苦,所以我加強了防範,也許還有可能被破,但已經不是一件很容易的事情了。6 o/ n: t# q/ f- _! R
根據我發生的被黑事件,假設我做好了防黑安全,很可能就安然無恙,就算被黑,如果網站數據有備份,我拿回shell後還是可以恢復網站數據的,鑒於此兩點,我們做好兩大安全防範即可:
( C: V/ h! f1 u4 E第一、LinuxVPS防黑安全常識" J; M% A/ a2 L7 E7 @2 F. v7 h
1、修改SSH端口。防止服務器掃破密碼,首先就必須改端口,盡量把端口數值改高,例如8135,打開文件/etc/ssh/sshd_config,找到其中的#Port 22,修改為Port 8135;並使用命令 service sshd restart 重啟SSH,以後登陸ssh或winscp都需要在IP或域名後面加端口:8135。
: W8 f' B% f% G, A2、禁止Root登陸。任意添加一個用戶名,例如luoping,命令:useradd luoping,再執行賦予密碼的命令:passwd 123456 ;緊接著修改/etc/ssh/sshd_config文件,第39行:#PermitRootLogin yes,去掉前面的#,並把yes改成no,然後,重啟SSH服務。以後,先使用vpsmm登陸,再su root即可得到ROOT管理權限。
2 w0 Q6 v/ R, `8 Y/ x ?2 W5 nlogin as: luoping Q2 ]( K5 }6 Y$ _( g/ }9 }
luoping@ip password:*****, p- C' f" \9 d
Last login: Tue Oct 22 14:39:58 2010 from 1.2.3.4
& h; u+ q1 Z: m/ wsu root
& X1 K/ c- t2 t( \ bPassword:*********** #注這裡輸入ROOT的密碼
' M' N9 ^- F4 |* x z/ R6 z: }3、SSH密鑰登錄讓Linux VPS/服務器更安全
" o. @* Q% c4 A' J- R! N- a基於密鑰的安全驗證必須為用戶自己創建一對密鑰,並把共有的密鑰放在需要訪問的服務器上。當需要連接到SSH服務器上時,客戶端軟件就會向服務器發出請求,請求使用客戶端的密鑰進行安全驗證。服務器收到請求之後,先在該用戶的根目錄下尋找共有密鑰,然後把它和發送過來的公有密鑰進行比較。如果兩個密鑰一致,服務器就用公有的密鑰加密"質詢",並把它發送給客戶端軟件(putty,xshell等)。客戶端收到質詢之後,就可以用本地的私人密鑰解密再把它發送給服務器,這種方式是相當安全的。請參考:http://www.advertcn.com/thread-92786-1-1.html
' T- h+ m- I$ p. b1 x6 A第二、網站數據自動備份FTP
! d% ^. g' Z ]) ]linux系統的功能非常強大,特別是定時器的作用,加上強大的腳本功能,幾乎能為你做任何事情,那麼自動打包壓縮網站數據並傳送到網絡空間上去,也就成了網站數據備份的首選了,這裡提供兩種腳本:% |/ e' X0 b- q* j' {9 l
一種是網站數據庫導出並壓縮上傳,參考小夜Blog LinuxVPS自動每日備份文件和數據庫上傳FTP空間http://www.advertcn.com/thread-92776-1-1.html,6 \- c8 R; f, g1 o! ^" k" b
一種是壓縮網站數據表名下的數據,前者較為嚴謹,後者就簡單方便,我個人使用是後者,腳本代碼如下:- #!/bin/bash
6 {- v, w# L6 J: G1 G - #你要修改的地方從這裡開始
/ r- ?* j0 f! e3 \' F4 r/ l - MAIL_TO=發送數據庫的郵箱地址, G# `5 q2 ~( {
- FTP_USER=FTP用戶名' J5 c3 B" r; c6 i; w
- FTP_PASS=FTP登陸密碼
, l* ~& d8 T/ j: ^1 C: }, { - FTP_IP=IP或域名
6 I r3 n; n+ \# A/ G8 W - FTP_backup=FTP上的目錄,如/backup,需要手工創建
3 t9 t- o+ w, C% ^5 ?8 a - WEB_DATA=/home/wwwroot
- o4 E) R( R" Q a - mysql_DATA=/usr/local/mysql/var Z6 e6 ^) _! X- H
- yuming_DATA=/usr/local/nginx/conf3 z3 |$ k5 H* b! q8 v. {
- #你要修改的地方從這裡結束- o$ d, ]! S5 |( \' u
. K( a5 F9 I' M7 {/ W2 z- #定義數據庫的名字和舊數據庫的名字
+ W! E1 o8 f& X9 m W' }+ I - DataBakName=Data_$(date +"%Y%m%d").tar.gz% R* G4 T$ r2 W, |0 T2 I
- WebBakName=Web_$(date +%Y%m%d).tar.gz: @3 u h' ?4 E- H* Y, b4 ?' s B( V
- yumingName=yuming_$(date +%Y%m%d).tar.gz V3 ^$ f% I' o: C5 z
- OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
* H0 b2 P% }0 m; G - OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz$ O: g2 ]" w/ K+ W" {0 x
- Oldyuming=yuming_$(date -d -5day +"%Y%m%d").tar.gz h U& Z4 z1 K
- ; P# }$ K* @( C# W' n9 ^# d
- #刪除本地3天前的數據8 [3 y/ G2 f/ N3 j2 o" v" W
- rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/yuming_$(date -d -3day +"%Y%m%d").tar.gz
6 r$ @% y4 z9 F: s0 f/ d) [2 Z8 S - : q4 C) {& x! p+ [6 {
- cd /home/backup
J+ k7 u2 [, E4 N1 w8 b& e6 F3 ~
% g. ~8 o# Z) l& m) ]! g0 i- #停止mysql
+ N! v* U8 G; x/ W: Q- C - service mysql stop
) L8 ^% C& E+ @) y
4 `/ B8 P# K+ V+ n4 u4 C, }- #打包mysql目錄/ {9 ]! c# f$ Z% ~, X& e3 \7 v
- cd $mysql_DATA' R: M7 [3 ^9 C K) Y
- tar zcf /home/backup/$DataBakName ./* W0 e; D9 c2 s: X3 E! ~
/ T: F8 E9 y- H, t% ^- #運行mysql
' e$ ^$ ]/ _3 \; L$ S' l# q! S" ^% D - service mysql start
F0 V2 Q5 \6 u. t7 s+ [" w. W
! l% f! R C9 m* R$ e8 J& w- #壓縮網站數據
5 s/ c5 o1 W6 g$ H5 _3 } - cd $WEB_DATA! Y# `, t$ J+ m( M1 ~& ^! W
- tar zcf /home/backup/$WebBakName ./*
& N: [# i- I0 `5 \ - 4 l1 K( U# Z8 R c
- #壓縮域名信息* i3 D* s1 g ~
- cd $yuming_DATA; ]$ m: n! P& }2 J9 }
- tar zcf /home/backup/$yumingName ./*
7 ^! \0 |+ W7 U7 a - 5 ]+ v; \" v' F, d# F* O
- #備份完發送郵件9 m: n: c4 u5 H; r( d
- echo "主題:wancheng" | mutt -s "內容:wancheng" $MAIL_TO4 O7 g3 y: n% e$ Q, \% a" H
- ; i- q5 l0 ?) W3 v/ n2 [+ Z
- #上傳到FTP空間,刪除FTP空間5天前的數據
6 @2 N; H. ?7 E - cd /home/backup
5 l1 ~8 l% l4 ?( C/ @/ {% ` - ftp -v -n $FTP_IP << END
3 T$ T. m1 k7 F - user $FTP_USER $FTP_PASS3 l' a4 O# W, W3 t
- type binary3 N; y0 r( M7 m/ B
- cd $FTP_backup
2 i& n' b2 M- n7 f - delete $OldData3 J4 J# v4 i6 g( y. ^/ [/ r4 b
- delete $OldWeb9 {( h% W, i8 e9 o3 ^/ t, D
- delete $Oldyuming
/ O+ g/ m O& u" S3 L' ~ - put $DataBakName" {: Z9 v9 G( Q0 H" t: U
- put $WebBakName6 l9 F9 k$ M$ J2 b1 m# G: X
- put $yumingName3 b* j$ R! `% u# R
- bye% c) s$ v% I/ l2 ^
- END: b3 N* h: S6 F0 k
複製代碼 腳本的使用方法,非常簡單,將腳本保存並命名AutoDataFTP.sh,將AutoDataFTP.sh上傳到root下,並賦予權限 chmod +x /root/AutoDataFTP.sh,在home下創建一個目錄名為backup,設置好任務啟動時間,每日一備份,00 06 * * * /root/AutoDataFTP.sh ;表示每日6點鐘,執行該腳本裡的所有動作命令。' Q" F8 ] e, K( Q! X( w% T
PS:如果發現數據已經被打包壓縮,但去遠程FTP上沒有上傳數據,可能是沒有安裝好ftp,在xshell下執行命令 yum install lftp 命令即可。 |
|