俗語說:一朝被蛇咬十年怕草繩,一點也不假,本以為自己對LinuxVPS很懂,其實在老外面前還是小菜,"不怕偷,就怕惦記著",這不我的VPS頻頻遭到來自國外的弱口令掃瞄,一開始完全沒有防備,在他們嘗試了一萬多次之後,密碼被破了,恭喜,你得到了shell,瞬間把服務器的資料數據全部清空,這種情況真的很痛苦,所以我加強了防範,也許還有可能被破,但已經不是一件很容易的事情了。
, s; m. s! i7 ^8 A 根據我發生的被黑事件,假設我做好了防黑安全,很可能就安然無恙,就算被黑,如果網站數據有備份,我拿回shell後還是可以恢復網站數據的,鑒於此兩點,我們做好兩大安全防範即可:# h% N/ U) H2 \+ P
第一、LinuxVPS防黑安全常識
; @, v' |0 o4 |0 k1、修改SSH端口。防止服務器掃破密碼,首先就必須改端口,盡量把端口數值改高,例如8135,打開文件/etc/ssh/sshd_config,找到其中的#Port 22,修改為Port 8135;並使用命令 service sshd restart 重啟SSH,以後登陸ssh或winscp都需要在IP或域名後面加端口:8135。9 }1 A) j! N9 {+ q
2、禁止Root登陸。任意添加一個用戶名,例如luoping,命令:useradd luoping,再執行賦予密碼的命令:passwd 123456 ;緊接著修改/etc/ssh/sshd_config文件,第39行:#PermitRootLogin yes,去掉前面的#,並把yes改成no,然後,重啟SSH服務。以後,先使用vpsmm登陸,再su root即可得到ROOT管理權限。
' c! | c, b7 h M: Ylogin as: luoping4 u# D8 f1 M4 j
luoping@ip password:*****+ _# D r# H) H1 C# Z( |6 D
Last login: Tue Oct 22 14:39:58 2010 from 1.2.3.4
/ L! I( B+ `* ]su root
{/ T: y+ [& S1 v4 O4 APassword:*********** #注這裡輸入ROOT的密碼
e; n4 B% C& F4 Q3、SSH密鑰登錄讓Linux VPS/服務器更安全
1 ]8 d5 T; b( x3 p4 U基於密鑰的安全驗證必須為用戶自己創建一對密鑰,並把共有的密鑰放在需要訪問的服務器上。當需要連接到SSH服務器上時,客戶端軟件就會向服務器發出請求,請求使用客戶端的密鑰進行安全驗證。服務器收到請求之後,先在該用戶的根目錄下尋找共有密鑰,然後把它和發送過來的公有密鑰進行比較。如果兩個密鑰一致,服務器就用公有的密鑰加密"質詢",並把它發送給客戶端軟件(putty,xshell等)。客戶端收到質詢之後,就可以用本地的私人密鑰解密再把它發送給服務器,這種方式是相當安全的。請參考:http://www.advertcn.com/thread-92786-1-1.html
8 k# P# H" m: k2 }$ O第二、網站數據自動備份FTP
) O6 i3 k1 q6 o# ~linux系統的功能非常強大,特別是定時器的作用,加上強大的腳本功能,幾乎能為你做任何事情,那麼自動打包壓縮網站數據並傳送到網絡空間上去,也就成了網站數據備份的首選了,這裡提供兩種腳本:
! |. \* _/ L! ?8 G. N# R, {一種是網站數據庫導出並壓縮上傳,參考小夜Blog LinuxVPS自動每日備份文件和數據庫上傳FTP空間http://www.advertcn.com/thread-92776-1-1.html,
9 J7 Y% f' D1 f一種是壓縮網站數據表名下的數據,前者較為嚴謹,後者就簡單方便,我個人使用是後者,腳本代碼如下:- #!/bin/bash4 n8 b- [& P7 u2 x& I4 |
- #你要修改的地方從這裡開始0 M3 ?, E0 ]+ ^4 h- i2 Q4 S
- MAIL_TO=發送數據庫的郵箱地址
5 X& E6 b. p Q. O l2 Y6 c - FTP_USER=FTP用戶名
2 O* Z: Z f# ] - FTP_PASS=FTP登陸密碼1 R1 _) M! H* M. b$ n+ B5 Q- c, c
- FTP_IP=IP或域名
. |( H$ l4 C u" U7 t; n* ?$ O - FTP_backup=FTP上的目錄,如/backup,需要手工創建. I4 Z4 @1 A* z+ z: M
- WEB_DATA=/home/wwwroot
, u$ h) \# C+ r M$ \# O3 O T - mysql_DATA=/usr/local/mysql/var
4 s$ B! E( d( V& U* W! J3 ^0 j - yuming_DATA=/usr/local/nginx/conf/ {% g" `: M' i1 X. x
- #你要修改的地方從這裡結束
& S5 d* x5 i/ ?0 g$ w
2 u; `, N/ e/ M: U# T: ?- #定義數據庫的名字和舊數據庫的名字
4 Q" }# V- o. ~$ W t1 p# w/ c - DataBakName=Data_$(date +"%Y%m%d").tar.gz% M8 x% [, x( D2 V
- WebBakName=Web_$(date +%Y%m%d).tar.gz
6 d0 p K6 c8 j - yumingName=yuming_$(date +%Y%m%d).tar.gz
% [( z2 B/ k' y: g - OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz2 Z! a. N4 D7 A) Q, ]' D1 |
- OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz' @; X$ ^/ s9 R
- Oldyuming=yuming_$(date -d -5day +"%Y%m%d").tar.gz
- E1 ~( @9 u! ~9 y x# v4 B - . r* X, ^0 j' l: B
- #刪除本地3天前的數據
4 h2 g. d% y d" e- z3 x - 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
" V' x( Q3 S0 m! ?3 \8 i
1 {, |- z: T- Q. V/ `" @- cd /home/backup- d9 V& x( }1 d
( _# d' w7 q. H- #停止mysql5 Z- ^; z* h2 r9 i
- service mysql stop
; H" Y4 s9 a2 x* _9 z4 d4 e
/ g( ?- z5 J0 l4 S- #打包mysql目錄
S) Y. v2 w3 S; ~$ V) \) k" P - cd $mysql_DATA
) s) _: {. o$ b! T% L2 _ - tar zcf /home/backup/$DataBakName ./*/ k/ }0 i8 c. \/ o' O* e
4 [7 m( y2 u7 m. f5 k2 ^* G- #運行mysql& ^) X) Y6 o& f$ f
- service mysql start% O# r9 x: I0 \6 L; V' {
5 R5 a' F& g D- L9 j& t& E- #壓縮網站數據
% `8 f) _ g; w I9 B2 Q- C - cd $WEB_DATA2 o3 @* r9 a$ E( N
- tar zcf /home/backup/$WebBakName ./*" x1 d( d1 R9 c- d. y( |( N3 U
0 m1 D3 K: q' Z, S# g- #壓縮域名信息% |) i9 d& |5 l/ v0 G/ t3 L& ~
- cd $yuming_DATA
* G9 C4 q8 w$ q. ~ - tar zcf /home/backup/$yumingName ./*& U% O+ L+ y! Q$ l
1 T1 z# l; G# V2 d- x- #備份完發送郵件
% g( w7 m d) z1 _, R - echo "主題:wancheng" | mutt -s "內容:wancheng" $MAIL_TO: |! y' Y$ M- {3 _, z8 n+ q
) ?4 E' u& L/ g" W- #上傳到FTP空間,刪除FTP空間5天前的數據7 R/ r4 C7 _: x' l( n
- cd /home/backup
" K+ U# P! R8 G: O2 M - ftp -v -n $FTP_IP << END
?7 [7 b+ g* j% x# F - user $FTP_USER $FTP_PASS$ I6 x! R6 T% V% `/ H! t/ S! A, n# f
- type binary' ] @' X- | E
- cd $FTP_backup0 \* h4 b! B8 r$ o
- delete $OldData; Q5 L) o/ A. n, L
- delete $OldWeb
9 @9 [2 T$ b; H3 q. A - delete $Oldyuming* v2 j9 q$ `/ o; H* v4 N, W
- put $DataBakName
+ K5 R$ d' }1 @7 @5 K9 G - put $WebBakName/ b- K/ T6 b. G0 Z
- put $yumingName" ~: N0 Y' |: T
- bye4 ?4 F' \: d/ w( m* T" b; K$ V* ~
- END& T% c1 E* Y5 [$ @* u3 S
複製代碼 腳本的使用方法,非常簡單,將腳本保存並命名AutoDataFTP.sh,將AutoDataFTP.sh上傳到root下,並賦予權限 chmod +x /root/AutoDataFTP.sh,在home下創建一個目錄名為backup,設置好任務啟動時間,每日一備份,00 06 * * * /root/AutoDataFTP.sh ;表示每日6點鐘,執行該腳本裡的所有動作命令。
2 P4 s T* ?) q7 S7 vPS:如果發現數據已經被打包壓縮,但去遠程FTP上沒有上傳數據,可能是沒有安裝好ftp,在xshell下執行命令 yum install lftp 命令即可。 |
|