Bảo vệ và giảm tải cho server

Bài viết tổng quan của mình về tối ưu tốc độ cho server đã nhận được khá nhiều sự quan tâm từ mọi người. Việc đó đã có nhiều công đoạn, tuy nhiên trong quá trình vận hành một website, chúng ta sẽ gặp một số tình huống khiến cho server phải vận động nhiều hơn, hoặc hoạt động một cách bất thường. Ví dụ:

  • Có nhiều client tương tác cùng lúc với server.
    • Có những client chỉ giới hạn tương tác với các chức năng được website đưa ra, cùng với những loại thông tin đầu vào được chức năng đó mong đợi để xử lý. Đó là những yêu cầu bình thường. Đối với các yêu cầu như vậy, ban đầu cần tối ưu lại server (và cả mã nguồn).
    • Nhưng cũng không thiếu những client gửi những yêu cầu chứa thông tin mà chức năng đó của website không mong đợi được nhận, đó là những yêu cầu bất thường.
  • Có một client bị thâu tóm và điều khiển bởi một người hoặc tổ chức nào đó, gửi đến server một loại yêu cầu bất thường khác. Nó có thể không chứa thông tin gì đặc biệt, nhưng được gửi liên tục với tốc độ cao, khiến server nằm trong trạng thái bận trong một thời gian dài, không thể đáp ứng yêu cầu từ các client khác. Loại yêu cầu đó là tấn công từ chối dịch vụ (denial of service – DoS). Mở rộng hơn là tấn công từ chối dịch vụ phân tán (distributed denial of service – DDoS), được thực hiện bởi nhiều client khác nhau.
  • Có nhiều client đến từ nhiều quốc gia khác nhau, có vẻ quan tâm đến nội dung của website. Điều này có thể xảy ra nếu website có nhiều thứ tiếng, hoặc khi một trang được chia sẻ tại một cộng đồng sử dụng ngôn ngữ khác.

Trong những hoàn cảnh như vậy, chúng ta cần đến những giải pháp bảo vệ cho server, góp phần làm cho server bớt phải tải nặng đi. Ngoài ra mình cũng giới thiệu sâu hơn về một số cách khác cũng trực tiếp giảm tải nhưng lại không bảo vệ cho server.

Ở bài viết này mình sẽ tập trung phổ cập và phân tích các giải pháp phổ biến hiện nay, kèm theo một số lời khuyên hữu ích.

  1. Một số tiêu chí và hoạt động cơ bản khi bảo vệ và giảm tải
  2. Bảo vệ và giảm tải từ bên ngoài
  3. Bảo vệ từ bên trong

1. Một số tiêu chí và hoạt động cơ bản

Trong khi tiến hành bảo vệ và giảm tải thêm cho một server, chúng ta cần biết và xác định một số tiêu chí quan trọng cùng với các hoạt động mà bất kì ai cũng thực hiện thông qua các chương trình phần mềm khác nhau.

1.1. Tiêu chí

  • Giảm tải ngay từ bên ngoài server, cụ thể (và bản chất) là chia sẻ bớt công việc từ server chính (chạy website) sang các server khác.
  • Bảo vệ gồm hai phần “phòng” và “chống”, trong đó “phòng bệnh hơn chữa bệnh”.
  • Bảo vệ một cách toàn diện, trên từng thành phần phần mềm.

1.2. Hoạt động bảo vệ cơ bản

  • Chặn các yêu cầu từ client dựa trên các dữ liệu kèm theo không được mong đợi. Danh sách đen (black list) là ví dụ điển hình chứa các địa chỉ hoặc định danh (“thực thể”) bị chặn hoàn toàn.
  • Cho phép các yêu cầu từ client dựa trên các dữ liệu kèm theo được mong đợi. Danh sách trắng (white list) là ví dụ điển hình chứa các địa chỉ hoặc định danh được phép truy cập.
  • Lọc dữ liệu kèm theo các yêu cầu từ client. Cụ thể đó là việc chặn, cho phép xử lý trực tiếp, hoặc thay đổi các mảnh dữ liệu đầu vào để đảm bảo quá trình xử lý diễn ra bình thường.
  • Truy tìm và loại bỏ các nội dung độc hại (gồm mã độc và những mã khác làm suy hao nhiều tài nguyên xử lý và lưu trữ) bên trong server.

2. Bảo vệ và giảm tải từ bên ngoài

2.1. Sử dụng mạng phân phối nội dung (CDN)

Hiện nay CDN không còn lạ lẫm gì ở Việt Nam. Ai cũng có thể thấy rõ ràng khả năng giảm tải rất lớn cho server mà CDN mang lại.

Một số nhà cung cấp CDN trả phí đáng tin cậy:

  • Nước ngoài:
    • Nổi tiếng: MaxCDN (nay là StackPath), CloudFlare, Amazon CloudFront, Google Cloud CDN, Akamai (có Facebook sử dụng), Fastly (có Imgur sử dụng)…
    • Một số dịch vụ tốt khác: KeyCDN, CDNsun, CacheFly, LeaseWeb, BunnyCDN…
  • Trong nước: CDN.com.vn, VCCloud…

Cũng có một số nhà cung cấp dịch vụ CDN miễn phí, trong đó CloudFlare là ví dụ điển hình, hỗ trợ sẵn nhiều tính năng cần thiết. Ngoài ra còn có một số dịch vụ CDN miễn phí khác chỉ phục vụ các thư viện CSS, JavaScript và webfont như: Google Hosted Libraries, Google Fonts, CDNJS, jsDelivr, RawGit, GitHack…

Một số nhà cung cấp dịch vụ hosting hay điện toán đám mây còn cung cấp thêm dịch vụ CDN riêng, chủ yếu là hợp tác với các nhà cung cấp dịch vụ CDN lớn khác mà có. Hiện tại mình đang sử dụng dịch vụ CDN miễn phí của NetDepot (miễn phí 100GB mỗi tháng). Một dịch vụ tối ưu ảnh trực tuyến là Cloudinary cũng sử dụng CDN để phục vụ trực tiếp hình ảnh tối ưu đến từng loại thiết bị truy cập trang web.

Việc chúng ta nhúng (embed) hình ảnh, video hoặc đối tượng khác từ bên ngoài server vào trong một trang web, tức là chúng ta cho client tải (download) dữ liệu từ một server bên ngoài, mà server đó có nhiều khả năng thuộc một CDN nào đó.

Có rất nhiều CDN cho các bạn lựa chọn. Nhưng CDN hoạt động như thế nào?

Trước hết, CDN là một mạng máy tính lớn, được chia thành nhiều mạng nhỏ chứa nhiều server và load balancer (máy tính, phần mềm hoặc dịch vụ cân bằng tải). Các server trong một CDN thực hiện mấy việc:

  • Tải (download) và lưu tạm (cache) dữ liệu từ server nguồn (origin server) hoặc server chính (main server) phục vụ trang web.
  • Phục vụ lại dữ liệu lưu tạm đến client.
  • Trao đổi (đúng hơn là đồng bộ) dữ liệu lưu tạm giữa các server.

Người ta sử dụng khái niệm point-of-presence (PoP) để chỉ những địa điểm trên thế giới có đặt các cụm máy chủ thuộc một CDN nào đó.

Khi một client truy cập một trang web sử dụng CDN, server chính trả về một trang HTML chứa các đường link tài nguyên nằm trong CDN. Sau khi client nhận được trang HTML đó, nó sẽ đọc và yêu cầu phục vụ thêm dữ liệu từ CDN. DNS (domain name server – máy chủ phân giải tên miền) sẽ giúp client chọn được server CDN gần nó nhất.

Thông thường một CDN có hai phương thức lấy dữ liệu từ server chính như sau:

  • Pull (kéo): Server của CDN chủ động yêu cầu server chính cung cấp dữ liệu cho nó. Sau đó các server trong CDN thực hiện lưu tạm dữ liệu trong một khoảng thời gian rồi yêu cầu server chính phục vụ lại.
  • Push (đẩy): CDN không còn yêu cầu server chính cung cấp dữ liệu nữa. Server chính (hoặc chính người sử dụng) sẽ chủ động upload dữ liệu lên CDN. Phương thức này tiết kiệm băng thông và lưu lượng đường truyền hơn cho server chính, khi server chính được nắm quyền chủ động chọn lựa dữ liệu được đưa lên CDN và tiết giảm tần suất upload.

Một số CDN sử dụng khái niệm zone (khu vực) để chỉ server hoặc cụm server dùng chung một địa chỉ, cùng thực hiện lấy dữ liệu từ một website có địa chỉ nhất định, và cùng thực hiện một trong hai phương thức lấy dữ liệu như trên.

Khi một website sử dụng CDN, đa phần các thao tác phục vụ nội dung được chuyển sang CDN thực hiện, server chính hầu như chỉ phục vụ nội dung HTML mà thôi. Nếu website có nhiều lượt truy cập từ những nước bên ngoài nơi đặt server chính, thì hiệu quả của CDN nói chung là rất lớn.

Tuy nhiên, nếu có rất nhiều lượt truy cập vào website từ một nước nhất định, thì hãy xem xét tạo thêm server đặt tại chính nước đó, để phục vụ nội dung nhanh hơn cho khách truy cập từ đấy. Những mạng xã hội lớn như Twitter hay Facebook đều không sử dụng duy nhất một (hoặc một cụm) server đặt tại một vị trí nhất định để vận hành website.

2.2. Sử dụng dịch vụ tường lửa

Tường lửa (firewall) ngày càng trở nên quen thuộc với những người sử dụng máy tính. Gần như bất kì hãng bảo mật nào cung cấp dịch vụ bảo vệ website đều sử dụng, giám sát và tinh chỉnh tường lửa để ngăn chặn các dữ liệu độc hại và DDoS.

Dịch vụ tường lửa được vận hành bởi một mạng lưới các server “bao bọc” lấy server chính phục vụ website. Điều đó có nghĩa là, các server này chính là các proxy server cho server chính, bên trong các server đó là phần mềm tường lửa, có thể do chính hãng bảo mật tự phát triển, hoặc cũng có thể là một phần mềm mã nguồn mở như ModSecurity chẳng hạn.

Khi client truy cập một website có sử dụng dịch vụ tường lửa bên ngoài, client không truy cập đến server chính chạy website đó, mà là server tường lửa. Server tường lửa sẽ phản ứng chặn, cho phép hoặc lọc tuỳ theo đặc điểm (dữ liệu kèm theo) của yêu cầu từ phía client. Khi server tường lửa chấp nhận xử lý yêu cầu của client, server tường lửa sẽ chuyển lại (forward) yêu cầu đó cho server chính, sau đó nhận lại kết quả từ server chính và trả kết quả đó về client.

Hiện tại có một số hãng nổi tiếng có dịch vụ tường lửa cho website: Sucuri, StackPath, CloudFlare, Imperva Incapsula, Project Shield (của Jigsaw, một công ty con của Google)…

Do các server tường lửa của các hãng trên đóng vai trò là proxy server, nên một số hãng đã cho chúng kiêm nhiệm luôn chức năng của một CDN, và cung cấp thêm một số giải pháp tối ưu (thu nhỏ kích thước) nội dung ngay trên chính các server đó.

Tương tự như CDN, việc sử dụng dịch vụ tường lửa bên ngoài sẽ giúp giảm gánh nặng cho server chính. Chưa kể, server chính cũng không phải thực hiện nhiều việc lọc thông tin đầu vào. Nhưng điều đó không có nghĩa là các bạn có thể bỏ qua việc lọc thông tin đầu vào ngay trên chính server của các bạn, vì kẻ tấn công luôn tìm mọi cách khai thác lỗ hổng trong mã nguồn mà các bạn sử dụng.

2.3. Phát triển các dịch vụ nhỏ (microservice)

Khi xây dựng và phát triển một trang báo điện tử lớn, một forum, một mạng xã hội hay một trang thương mại điện tử lớn, thì người ta không thể chỉ dựa vào sức mạnh của một server đơn lẻ do hạn chế về năng lực của chính server đó, và của hạ tầng mạng mà thông qua đó server được kết nối với Internet. Khi đó người ta chia một dịch vụ lớn ra nhiều dịch vụ nhỏ hơn, gọi là các microservice (“dịch vụ siêu nhỏ”). Mỗi dịch vụ nhỏ này sẽ do một (cụm) server thực hiện.

Việc chia dịch vụ như vậy, có thể đáp ứng tối ưu về cả tốc độ phục vụ dịch vụ lẫn bảo mật thông tin. Tại sao? Bởi vì ở đây, thay vì ta chỉ sử dụng một máy tính, thì ta sử dụng nhiều máy tính cùng lúc để phục vụ một dịch vụ lớn. Ta có thể trang bị các biện pháp bảo vệ riêng cho từng (cụm) máy tính tuỳ theo mức độ an toàn cần thiết cho microservice tương ứng.

Chi tiết về việc chia dịch vụ và thiết lập server chạy từng microservice, các bạn có thể tìm thấy trong môn Hệ phân tán (Distributed System, hoặc tương tự) thuộc ngành Công nghệ thông tin.

Trong thời điểm hiện nay, một số dịch vụ điện toán đám mây lớn đã cung cấp sẵn các microservice dành cho từng hoạt động cụ thể, ví dụ:

  • Lưu trữ dữ liệu tĩnh (ít thay đổi): Các file CSS, JavaScript, HTML, hình ảnh…
  • Lưu trữ, phục vụ và chuyển đổi định dạng video
  • Lưu trữ cơ sở dữ liệu (database)
  • Lưu tạm (cache) dữ liệu, hoặc CDN
  • Cân bằng tải (load balancing)
  • Các hoạt động an ninh: Tường lửa, mã hoá dữ liệu…
  • Trí tuệ (trí thông minh) nhân tạo
  • v.v…

Khi chúng ta tận dụng luôn các microservice có sẵn ấy, chúng ta không phải quan tâm đến sự hiện diện của các server chạy chúng nữa. Điều đó dẫn đến một khái niệm mới là serverless (“không server”).

Có một điều rất hay và lạ là, dịch vụ máy ảo chạy trên “đám mây” (cloud server) thực chất là một microservice đặc biệt của nhà cung cấp dịch vụ điện toán đám mây. Máy ảo này có một số bản sao được lưu tại một cụm server, và chính cụm server đó sẽ chạy máy ảo đám mây ấy. Điều này rất tốt đối với những người muốn vận hành riêng các website có lượng truy cập nhỏ và vừa, đồng thời là một bước đệm tốt trong quá trình tập sử dụng các microservice khác dành riêng cho từng hoạt động cụ thể.


3. Bảo vệ bên trong server

3.1. Lựa chọn phần mềm bảo vệ cho server

Như mình đã viết ở trên, những kẻ tấn công luôn luôn tìm kiếm và nhắm vào những lỗ hổng ngay tại server chính chạy website. Kể cả khi các bạn sử dụng dịch vụ tường lửa bên ngoài đủ uy tín, thì vẫn sẽ có một vài yêu cầu độc hại lọt qua được lớp phòng vệ đó.

Server là một cái máy tính. Tương tự lúc các bạn sử dụng máy tính tại nhà hay nơi làm việc, việc sử dụng (và cập nhật) các phần mềm diệt virus định kì và tường lửa cho server là điều cần thiết.

  • Diệt virus và phần mềm độc hại khác: Hãy tìm đến những hãng bảo mật lớn đã quen thuộc với các bạn, ví dụ như Symantec, Bitdefender, Kaspersky, Avira, ESET… (thậm chí là cả BKAV nữa). Họ không chỉ cung cấp phần mềm cho cá nhân và hộ gia đình, mà còn cho các doanh nghiệp. Các bạn sẽ tìm thấy các phần mềm bảo vệ server tại các mục phần mềm doanh nghiệp.
  • Tường lửa: Các hãng bảo mật trên cũng cung cấp tường lửa đi kèm các chương trình bảo vệ server cho doanh nghiệp. Và riêng với hệ điều hành Linux, đã có một số chương trình mã nguồn mở khá quen thuộc như iptables, ConfigServer Firewall (CSF), Fail2ban, ufw (Ubuntu Firewall)…

Bên trên là các phần mềm độc lập, có thể hoạt động song song với các phần mềm web server. Ngoài ra, có một số module tường lửa mã nguồn mở dành cho phần mềm web server mà các bạn có thể sử dụng như:

  • ModSecurity: Module này ban đầu được Trustwave SpiderLabs phát triển cho Apache. Về sau nó được mở rộng hỗ trợ thêm cho NGINX và IIS. Hiện tại, ModSecurity đã ra mắt phiên bản thứ ba dưới hình thức của một thư viện (libModSecurity), có thể được sử dụng bởi bất cứ phần mềm web server nào, thông qua các module cầu nối. ModSecurity có nhiều lệnh thiết lập (“luật”) khác nhau, nên có thể sử dụng trong hầu hết hoàn cảnh. Mặc định ModSecurity “mở cửa”, nên người sử dụng phải bổ sung luật khi thiết lập sử dụng ModSecurity. Có hai bộ luật miễn phí đủ tốt là OWASP ModSecurity Core Rule Set (CRS)Comodo WAF.
  • NAXSI (NGINX Anti XSS & SQL Injection): Đây là module được NBS System phát triển cho NGINX. Nó cũng có nhiều luật khác nhau, thiết lập đơn giản hơn và linh hoạt hơn ModSecurity đôi chút. Mặc định NAXSI đã có sẵn một số luật chặn được rất nhiều yêu cầu độc hại, người sử dụng cần bổ sung thêm các luật cho phép phù hợp với website được vận hành.

Thậm chí, có một số gói mở rộng (extension) thực hiện bịt các lỗ hổng ở các ngôn ngữ lập trình. Ví dụ, dành cho ngôn ngữ PHP thì có các gói mở rộng sau:

  • Suhosin dành cho các phiên bản PHP từ 5 trở về trước.
  • Snuffleupagus dành cho phiên bản PHP7 trở về sau.

3.2. Bổ sung các biện pháp bảo vệ vào mã nguồn

3.2.1. Đối với mã nguồn lấy từ bên ngoài

Nếu mã nguồn vận hành website không phải tự viết ra mà lấy từ bên ngoài (ví dụ như WordPress chẳng hạn), thì các giải pháp sau sẽ tăng cường độ an toàn cho mã nguồn đó trước các cuộc tấn công từ bên ngoài:

  • Sử dụng plugin hoặc phần mở rộng có khả năng bảo vệ. Tuỳ theo hoàn cảnh mà sử dụng các cách thức bảo vệ khác nhau mà các plugin như vậy có hỗ trợ:
    • Chặn theo địa chỉ IP (hoặc chặn theo quốc gia).
    • Chặn theo loại yêu cầu và dữ liệu kèm theo.
      • Giới hạn chỉ chấp nhận yêu cầu GET, POST… tuỳ theo các hoạt động hay thực hiện với mã nguồn.
      • Tạo trang đăng nhập và tài khoản (cùng với tên và mật khẩu) hợp lệ. Chặn trang đăng nhập trong một số hoàn cảnh sử dụng cụ thể.
      • Chặn yêu cầu chèn mã độc.
      • v.v…
  • Thường xuyên cập nhật mã nguồn cùng với các plugin. Kèm theo đó là xem xét thay đổi plugin sang các plugin khác chạy được với phiên bản mới nhất của mã nguồn chính.

3.2.2. Đối với mã nguồn tự phát triển

Trong quá trình viết (lập trình) mã nguồn, các bạn thực hiện các việc sau:

  • Phân quyền truy cập và sử dụng lớp (class), đối tượng (object), hàm (function) và các thuộc tính khác.
  • Giới hạn sử dụng các lệnh thực hiện vừa đủ các hoạt động mong muốn.
  • Tránh sử dụng các lệnh tác động đến file, cây thư mục, hay các lệnh của hệ điều hành, khi không thực sự cần thiết.
  • Kiểm tra kĩ các giá trị đầu vào. Đặc biệt nếu ngôn ngữ lập trình thực hiện việc định kiểu dữ liệu qua giá trị (ví dụ như PHP có thực hiện việc đó), thì phải kiểm tra cả kiểu dữ liệu và giới hạn giá trị được sử dụng.
  • Ngăn chặn khai thác các lỗ hổng của ngôn ngữ và của hệ quản trị cơ sở dữ liệu được mã nguồn sử dụng. Điều này có thể thực hiện được nhờ thói quen sử dụng cú pháp (cách viết) chặt chẽ và kiểm tra kĩ các giá trị đầu vào.

3.3. Một số hoạt động quan trọng khác

Toàn bộ những gì mình viết ở trên chủ yếu là các biện pháp ngăn chặn. Thế nhưng từ trước đến nay, kẻ tấn công (hacker) luôn đi trước một bước so với những người lương thiện đi vá các lỗ hổng bảo mật. Thế nên mình viết ra thêm một số việc khác góp phần bảo vệ an toàn cho server.

3.3.1. Phân quyền

Server là một cái máy tính, mà muốn điều khiển được máy tính thì trong máy phải có hệ điều hành. Windows, Linux (Ubuntu, CentOS…) hay macOS đều thực hiện phân quyền sử dụng lệnh, truy cập file và thực thi chương trình thông qua các bảng hoặc danh sách phân quyền, trong đó có chỉ định các tài khoản người dùng (user) và nhóm người dùng (group) cụ thể.

Ví dụ, ở các hệ điều hành Linux có các hoạt động đọc, sửathực thi file và thư mục. Các bạn có thể chỉ định cho những user và group nào được phép thực hiện các hoạt động đó đối với từng file và thư mục cụ thể.

Việc sử dụng và khai thác triệt để tính năng phân quyền sẽ làm hạn chế các hoạt động không mong muốn, ví dụ:

  • Ngăn chặn việc tiết lộ phiên bản và thiết lập của các phần mềm trên server.
  • Hạn chế các chương trình độc hại làm suy hao tài nguyên của server và ảnh hưởng nghiêm trọng đến hệ điều hành.

3.3.2. Hạn chế lưu trữ dữ liệu riêng tư trên server

Dữ liệu riêng tư ở đây chỉ những thông tin riêng và nhạy cảm của những người điều khiển server, và cả những thông tin nhạy cảm khác như mật khẩu đăng nhập các server và dịch vụ liên quan chẳng hạn. Kẻ tấn công luôn tìm kiếm và lợi dụng những thông tin như vậy để ăn cắp tài sản giá trị và lần ra những lỗ hổng khác.

3.3.3. Sử dụng và nâng cấp SSL

Giao thức SSL trên HTTP (hay còn gọi là HTTPS) sẽ mã hoá các thông tin đang được trao đổi giữa server và client. Điều này sẽ rất có ích nếu các bạn điều khiển server và website từ xa, nhất là khi các bạn kết nối mạng ở những nơi công cộng.

SSL có nhiều phiên bản với các cách thức bảo vệ khác nhau. Việc sử dụng các phiên bản mới của giao thức TLS (nâng cấp từ SSL), cùng với việc chọn lựa các bộ mã hoá được công nhận là an toàn, sẽ giúp cho thông tin được giữ cẩn thận hơn.

Mình sẽ đăng một bài chuyên sâu hơn về nâng cấp SSL trong thời gian tới.

3.3.4. Đóng các cổng và giao tiếp không cần thiết

Máy tính (và các thiết bị khác có nối mạng) gửi và nhận dữ liệu qua các cổng (port) của nó và qua một vài giao thức nhất định như TCP, UDP…

Đối với một server phục vụ trang web thông thường, chúng ta chỉ cần mở hai cổng sau:

  • Cổng 80, giao thức TCP: Nhận kết nối qua giao thức HTTP thông thường.
  • Cổng 443, giao thức TCP: Nhận kết nối HTTPS có bảo mật.

Tuỳ nhu cầu mà chúng ta có thể mở các cổng khác, với giao thức khác. Còn lại, chúng ta cần đóng hết lại để từ chối bất cứ cuộc tấn công nào qua các cổng và giao thức không sử dụng đến.

Việc này có thể thực hiện qua:

  • Thiết lập mạng của hệ điều hành.
  • Các phần mềm tường lửa độc lập.
  • Đối với server thật: Phần thiết lập đóng/mở cổng (port forwarding) của router mà server kết nối trực tiếp hoặc thông qua switch.
  • Đối với server ảo: Phần đóng/mở cổng tại trang thiết lập.

3.3.5. Loại bỏ mã độc

Các bạn có thể sử dụng các công cụ diệt virus và mã độc có sẵn, hoặc tự tay dò tìm và loại bỏ mã độc. Thường người ta sẽ đóng hết các cổng kết nối của server khi server đó đang trong quá trình loại bỏ mã độc, mục đích là để giảm tải cho server.

Nhưng đối với một số trường hợp dính nhẹ (không có file chương trình bất thường được cài vào server) mà không có công cụ nào giải quyết được, thì đôi khi các bạn không cần phải đóng cổng kết nối, mà các bạn sẽ tiến hành theo một trong hai hướng sau đây.

3.3.5.1. Khôi phục lại từ bản sao lưu sạch gần nhất

Hướng này dành cho những website thường xuyên được sao lưu cẩn thận, trong đó các bản sao lưu được lưu bên ngoài server. Ngay khi phát hiện được dấu hiệu bất thường, các bạn lập tức khôi phục lại trạng thái từ bản sao lưu gần nhất, vì nhiều khả năng nó vẫn còn tạm thời sạch sẽ.

3.3.5.2. Sao lưu lại trạng thái hiện thời, loại bỏ mã độc trong bản sao lưu, rồi thay thế toàn bộ

Đầu tiên, sao lưu lại mã nguồn và dữ liệu của website hiện tại ra một máy tính đã được trang bị sẵn phần mềm chống virus đủ mạnh. Sau đó:

  • Đối với mã nguồn tự viết: Thay thế những file và thư mục đóng vai trò cốt lõi bằng những file và thư mục ban đầu (hoàn toàn do tự viết mà ra).
  • Đối với mã nguồn lấy từ bên ngoài: Thay thế các file và thư mục cốt lõi bằng các file và thư mục có trong bản cài đặt mới nhất của mã nguồn đó. Đối với plugin hoặc phần mở rộng khác thì cũng tương tự.
  • Đối với dữ liệu khác: Thay thế bằng dữ liệu sạch tương ứng, còn lại thì quét bằng chương trình diệt virus.

Tiếp theo, tiến hành tìm kiếm nốt các đoạn mã đáng ngờ trong các file còn lại chưa được thay thế. Hiện nay, hầu hết các đoạn mã đáng ngờ đều được mã hoá và biến đổi tinh vi dựa trên các cú pháp (cách viết) ít được biết đến của ngôn ngữ lập trình. Trông chúng như một mớ hỗn độn nhưng lại có tổ chức.

Sau khi đã làm sạch bản sao lưu, hãy thay toàn bộ mã nguồn cùng với dữ liệu trên server bằng bản sao sạch đó.

3.3.6. Giám sát

Tương tự như việc tối ưu tốc độ, thì việc kiểm tra các file log ghi nhận truy cập và file log ghi lỗi sẽ giúp cho các bạn nhận biết được các lỗ hổng có thể có trên server, từ đó điều chỉnh và áp dụng thêm các biện pháp bảo vệ cần thiết.


Như vậy mình đã giới thiệu với các bạn một cách khái quát quá trình bảo vệ và giảm tải hơn nữa cho một web server. Thời gian tới mình sẽ đi sâu hơn vào những hoạt động cụ thể có liên quan mà mình đã từng áp dụng tốt cho WordPress, để giúp các bạn làm cho website WordPress trở nên ổn định hơn.

Mình cũng có dự định viết tiếp một bài tổng quát liên quan đến điểm số PageSpeed, mình thấy rất nhiều công ty coi trọng điểm số đó. Trong bài đó mình cũng sẽ nhắc đến một vài điểm số tốc độ liên quan khác.

Hi vọng những gì mình đã viết có thể giúp ích được nhiều cho các bạn. Các bạn hãy bookmark (đánh dấu) lại blog Noisy Stream này của mình để theo dõi bài viết mới nhé. Mình sẽ bổ sung thêm feedthông báo đẩy (push notification) sau.

Bài viết này có 2 bình luận

  1. Bác viết bài nào là chất bài đó, mong bác ra các bài chi tiết về bảo mật để anh em còn được học hỏi ạ

    1. Mình đang chuẩn bị kĩ càng cho một bài viết sắp tới về bảo mật rồi, bạn nhé.

Tính năng bình luận đã được đóng.