Vì mỗi lần cài lại VPS là mỗi lần mình lại đi search các câu lệnh, rất mất thời gian mà đôi khi lại bị sai xót nên mình tổng hợp lại thành một bài duy nhất, trước giờ vẫn ém làm của riêng, giờ thì mình share ai có dùng thì dùng, không dùng cũng không sao :) Tất cả các bước dưới đây mình đều làm trên VPS digitalocean.
Đầu tiên
I.Cài VPS Lamp trên Centos 6.5
1. Cài đặt APACHE
——————
sudo yum install httpd sudo service httpd start
2. Cài đặt MYSQL
——————
sudo yum install mysql-server
sudo service mysqld start
sudo /usr/bin/mysql_secure_installation
cứ Enter + và chọn Y
3. Cài đặt PHP
——————
sudo yum install php php-mysql
4. Tự động chạy khi khởi động
——————
sudo chkconfig httpd on sudo chkconfig mysqld on
Khởi động lại Apache
sudo service httpd restart
II. Add tên miền vào VPS
1. Tạo thư mục chưa Source
——————-
sudo mkdir -p /var/www/example.com/public_html
2.Chmod cho thư mục
——————-
sudo chown -R apache:apache /var/www/example.com/public_html sudo chmod 755 /var/www
3. Chỉnh sửa httpd.conf
——————-
sudo nano /etc/httpd/conf/httpd.conf tất nhiên bạn có thể dùng các chường trình edit khác. ( Mình thì dùng FileZilla chỉnh sửa cho nhanh)
thêm dòng sau đây
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/example.com/public_html ServerName www.example.com ServerAlias example.com ErrorLog /var/www/example.com/error.log CustomLog /var/www/example.com/requests.log common </VirtualHost>
4.Khởi động lại Apache
——————-
sudo apachectl -k stop sudo /etc/init.d/httpd start
5.Virtual Hosts
—————–
Trong trường hợp thêm nhiều website bạn vẫn add tương tự như trên nhưng thêm dòng sau vào httpd.conf
NameVirtualHost *:80
III. Tạo Database + User
1.Đăng nhập vào MySQL
—————–
mysql -u root -p
2.Tạo database
—————–
create database dbname;
3.Tạo user
———–
create user 'username'@'localhost' identified by 'password';
4.Connect Database + User
——————
grant all on dbname.* to username@localhost;
FLUSH PRIVILEGES; exit
IV. Upload source + Import databse
Đầu tiên bạn vào website bạn đang dùng nén source lại và đặt tên là source.zip, export database và đặt tên là database.sql.tar cả 2 file đặt ở thư mục gốc của website.
1.Chuyển Source từ host cũ lên VPS mới
—————–
chuyển đến thư mục gốc website.
cd /var/www/example.com/public_html
Download source về VPS.
wget https://domain.com/source.zip
giải nén.
unzip source.zip
Trong trường hợp chưa cài wget và unzip thì bạn gõ các lệnh sau:
yum install wget
yum install unzip
yum install tar
yum install gzip
2.Import Database
——————-
cd /var/www/example.com/public_html wget https://domain.com/database.sql.tar gunzip *.sql.gz mysql -u username -p'password' dbname < *.sql
3.Chỉnh wp-config.php và edit user + database giống như lúc tạo
V. Trong trường hợp bị lỗi không update và cái đặt Plugin được thì các bạn gõ lên sau:
cd /var/www/example.com/public_html
chown -R apache:apache *
VI. Kích hoạt MOD_REWRITE
Chỉnh sửa file httpd.conf
nano /etc/httpd/conf/httpd.conf
Tìm dòng
<Directory “/var/www/html”>
đổi dòng AllowOverride None thành AllowOverride All
Khởi động
service httpd restart
VII. Cài đặt CSF làm tường lửa và chống DDoS
1.Cài đặt CSF
rm -fv csf.tgz wget https://www.configserver.com/free/csf.tgz tar -xzf csf.tgz cd csf sh install.sh
2.Cấu hình CSF
chỉnh sửa file /etc/csf/csf.conf
Cho phép CSF
mặc định TESTING = “1” chỉnh lại thành
TESTING = "0"
Giới hạn số connect từ 1 IP
CT_LIMIT = "500"
Đổi thành Email của bạn để nhận thông báo bảo mật từ VPS
LF_ALERT_TO = "your_email@your_domain.com"
Mỗi IP được 20 kết nối từ cổng 80
CONNLIMIT = "80;20"
Nếu nhiều hơn 20 kết nối tcp đến port 80 trong vòng 5s thì block IP đó tối thiểu 5s tính từ packet cuối cùng của IP đó. Sau 5s IP đó sẽ tự động được unlock và truy cập bình thường.
PORTFLOOD = "80;tcp;20;5"
Sau đó gõ lệnh
csf -x
để tắt CSF
và lệnh
csf -e
để chạy CSF
3. Kiểm tra Website có bị DDoS hay không bằng lệnh
a.Chỉ kiểm tra kết nối cổng 80
netstat -ntu | grep ':80' | awk '{print $5}' | sed 's/::ffff://' | cut -f1 -d ':' | sort | uniq -c | sort -n
b.Kiểm tra tất cả các kết nối
netstat -ntu | grep ':' | awk '{print $5}' | sed 's/::ffff://' | cut -f1 -d ':' | sort | uniq -c | sort -n
c.Mấy cái IP nào có nhiều kết nối thì Block lại mình thì cứ trên 300 là block bằng lệnh
csf -d ip (trong đó ip là địa chỉ IP cần block)
d.Mở IP đã block trước đó bằng lệnh
csf -dr ip (trong đó ip là địa chỉ IP đã block trước đó)
Hoặc bạn không cần làm 2 bước c + d nhưng có thể update vào file csf.deny tất nhiên khi update xong bạn cần phải khởi động lại csf để tuyd chỉnh có hiệu lực.
csf -r
4. Các IP nên thêm vào White list để tránh bị Ban oan
Google bot
216.239.32.0/19 64.233.160.0/19 72.14.192.0/18 209.85.128.0/17 66.102.0.0/20 74.125.0.0/16 66.249.64.0/19
Cloudflare
199.27.128.0/21 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32
VIII. Chỉnh lại múi giờ
Để kiểm tra múi giờ bạn gõ lệnh
date
trong trường hợp không đúng múi giờ bạn update lại như sau:
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
sau đó kiểm tra lại
date
IX. Giải phóng RAM cho VPS
Tạo 1 tập tin /root/cacheclear.sh với nội dung sau:
#!/bin/sh sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"
Quy định 1 giờ sẽ giải phóng RAM 1 lần
sudo crontab -e
0 * * * * /root/cacheclear.sh
Lưu lại và thoát ra. Từ giờ VPS của bạn sẽ được giải phóng RAM mỗi giờ 1 lần :)
X. Tạo File Backup Tự Động Cho VPS
Tạo tập tin /root/backup.sh với nội dung:
#!/bin/bash { printf "subject:Backup for VPS\nfrom:[email protected]\n\n" mkdir /var/backups/$(date +"%Y-%m-%d")/ mkdir /var/backups/$(date +"%Y-%m-%d")/yourdomain.com/ echo "Starting backup database for yourdomain.com..." mysqldump --single-transaction --routines --triggers --add-drop-table --extended-insert -u TaiKhoanUser -h 127.0.0.1 -p'MatKhau' DataBase | gzip -9 > /var/backups/$(date +"%Y-%m-%d")/yourdomain.com/db_$(date +"%Y-%m-%d").sql.gz echo "Starting backup files for yourdomain.com..." zip -r /var/backups/$(date +"%Y-%m-%d")/yourdomain.com/file_$(date +"%Y-%m-%d").zip /var/www/yourdomain.com/public_html/ } | /usr/sbin/sendmail "[email protected]"
Chú ý: nhớ thay đôi Domain + User + Database cho phù hợp
Quy định 1 ngày backup một lần:
crontab -e
Nhận o để thêm dòng mới với nội dung:
0 0 * * * /root/backup.sh >/dev/null 2>&1
Để lưu lại và thoát bạn nhấn ESC, rồi gõ vào :wq nhấn Enter.
Chú ý: Set quyền thực thi cho tập tin backup.sh, trong trường hợp bị lỗi /bin/sh^M: bad interpreter: No such file or directory thì làm như sau:
sửa file backup bằng lệnh vi
vi /root/backup.sh
Chuyển sang định dạng unix
:set ff=unix
Lưu và thoát khỏi vi bằng lệnh
:x
Làm tương tự với file cacheclear.sh
Hay qua, dang can , Thks Admin
X. Cache cho MySQL
———————————————————-
mysql -u root -p
show variables like ‘%query_cache%’;
show status like ‘%qcache%’;
Qcache_free_memory: Lượng RAM giành riêng cho việc cache. (26300528 ~ 30MB)
Qcache_hits: Số lượng Query lấy từ cache ra sử dụng.
Qcache_lowmem_prunes: Lượng RAM tối thiểu được thêm vào khi lượng Qcache_free_memory bị sử dụng hết. Nếu số lượng này quá lớn, nghĩa là Qcache_lowmem_prunes sẽ phải tự thông thêm RAM vào cache và lúc này bạn cần tăng Qcache_free_memory lên. Nếu gặp giá trị bằng 0
Qcache_queries_in_cache: Số query đang được cache.
SET GLOBAL query_cache_type = ON;
SET GLOBAL query_cache_size = 268435456;