Gợi ý chùm phương án bảo mật giúp bạn bảo vệ server tối ưu

2634
18-04-2023
Gợi ý chùm phương án bảo mật giúp bạn bảo vệ server tối ưu

Thiết lập và chạy các ứng dụng trên các nền tảng Cloud thường là công việc chính và chiếm nhiều thời gian của chúng ta. Do đó, xây dựng các biện pháp bảo mật mạnh mẽ và kỹ lưỡng cho các hệ thống và ứng dụng trước khi chúng được cung cấp cho user - khách hàng là một phần rất quan trọng trong quy trình thiết lập và triển khai. Áp dụng các biện pháp bảo mật được gợi ý từ Bizfly Cloud cho ứng dụng, dịch vụ trước khi triển khai chúng sẽ đảm bảo rằng mọi ứng dụng bạn chạy trên cơ sở hạ tầng sẽ được cấu hình an toàn.

Bài viết sẽ đưa ra một số biện pháp bảo mật thực tế mà bạn có thể thực hiện trong khi cấu hình và thiết lập cơ sở hạ tầng máy chủ. Đây không phải là tất cả những gì bạn có thể làm để bảo mật máy chủ, nhưng các gợi ý sẽ giúp chúng ta có được một cơ sở để triển khai chiến lược riêng của mình sao cho phù hợp với nhu cầu cụ thể của môi trường và ứng dụng đang chạy.

SSH Key

SSH hay Secure Shell, là một giao thức mã hoá được sử dụng để quản trị và giao tiếp với các máy chủ. Khi làm việc với máy chủ, bạn sẽ dành hầu hết thời gian trong một phiên terminal kết nối với máy chủ thông qua SSH. SSH Key là một cơ chế thay thế cho việc đăng nhập bằng việc sử dụng password, và SSH key sử dụng mã hoá để cung cấp một phương thức đăng nhập an toàn vào trong máy chủ và được khuyến nghị sử dụng cho tất cả user.

Gợi ý chùm phương án bảo mật giúp bạn bảo vệ server tối ưu  - Ảnh 1.

Để cấu hình xác thực bằng SSH Key, bạn cần đưa Public SSH Key của bạn lên phía server tại đường dẫn ~/.ssh/authorized_keys .

>> Tìm hiểu thêm: SSH Key là gì? Hướng dẫn cách tạo và sử dụng SSH Key đơn giản

Tại sao SSH Key lại giúp tăng tính an toàn?

Với SSH, bất kể phương thức xác thực nào cũng đều được mã hoá - bao gồm cả phương thức xác thực bằng password. Tuy nhiên, khi sử dụng cơ chế đăng nhập bằng password, người dùng độc hại lại có thể cố gắng liên tục thử truy cập vào server, nguy hiểm hơn nếu server có địa chỉ IP Public .

Thiết lập xác thực bằng SSH key cho phép bạn tắt phương thức xác thực bằng password. Các SSH key thông thường sẽ có độ dài bit lớn hơn nhiều so với 1 password - bạn có thể tạo ra 1 SSH key 128 ký tự chỉ từ 12 ký tự password - khiến cho tấn công brute-force (tấn công vét cạn) khó khăn hơn. Tuy nhiên, một số thuật toán mã hoá có thể bẻ khoá bằng cách cố gắng sử dụng kỹ thuật đảo ngược các password hash nếu đủ thời gian thực hiện trên 1 máy tính đủ mạnh. Và hiện tại chúng ta vẫn chưa thể crack được thuật toán RSA - được sử dụng để tạo ra cặp khoá SSH key.

Triển khai SSH key

SSH Key là phương thức đăng nhập vào Server Linux được khuyến nghị sử dụng. Một cặp khoá SSH key có thể được sinh ra tại máy tính cá nhân sử dụng lệnh ssh , và sau đó ta có thể sao chép public key lên tới server.

Best practice trong việc thiết lập SSH là không cho phép user root có thể login trực tiếp. Thay vì vậy, ta chỉ cho phép các user không có đặc quyền login, và sau đó có thể thực hiện các thao tác cần đặc quyền bằng cách sử dụng sudo. Việc hạn chế quyền của user được biết tới là The principle of least privilege. Một khi bạn đã có thể kết nối tới máy chủ và tạo ra 1 user không có đặc quyền để xác nhận việc hoạt động của SSH, bạn có thể loại bỏ không cho user root login bằng việc thiết lập cấu hình PermitRootLogin no trong file cấu hình /etc/ssh/sshd_config trên máy chủ của bạn, sau đó ta khởi động lại dịch vụ SSH bằng câu lệnh sudo systemctl restart sshd.

Firewall

Firewall là một thiết bị phần mềm hoặc phần cứng cho phép ta cấu hình các dịch vụ được expose ra môi trường network/internet như thế nào. Và firewall cũng xác định các loại của traffic được phép đi ra hay đi vào một hoặc một nhóm các máy chủ. Một thiết lập Firewall tối ưu sẽ đảm bảo rằng chỉ những dịch vụ được Public cho user thì có thể mới có thể truy cập được từ bên ngoài máy chủ hoặc thông qua network.

>> Xem thêm: Firewalld - Khái niệm cơ bản và cách sử dụng

Gợi ý chùm phương án bảo mật giúp bạn bảo vệ server tối ưu  - Ảnh 2.

Một Server tiêu chuẩn thường có các dịch vụ được khởi động mặc định. Những dịch vụ này có thể được phân loại vào các nhóm sau:

Public Service: các dịch vụ có thể được truy cập bởi mọi user trên môi trường internet. Ví dụ là một Web Server. 

Private Service: Là những dịch vụ có thể được truy cập bởi nhóm các tài khoản đã được xác thực hoặc từ một vị trí nào đó. Ví dụ trình quản lý database như phpMyAdmin.

Internal Service: Là những dịch vụ chỉ được truy cập từ chính server đó, và không được expose các service này ra internet. Ví dụ: một database chỉ nên được chấp nhận các kết nối nội bộ.

Firewall có thể đảm bảo hạn chế việc truy cập vào ứng dụng của bạn theo như nhóm dịch vụ bên trên. Public service có thể được mở và sẵn sàng trên internet, Private Service có thể được hạn chế dựa trên các tiêu chí khác nhau như kiểu kết nối, Internal Service có thể chặn hoàn toàn việc truy cập từ internet. Với các port không được sử dụng, truy cập vào các port này cần bị chặn hoàn toàn.

Tại sao Firewall lại cải thiện sự an toàn cho Server ?

Kể cả khi các dịch vụ của bạn có các tính năng an toàn hoặc có các giao diện hạn chế, bạn cũng nên thiết lập firewall cho máy chủ, một firewall được thiết lập là một lớp bảo vệ cơ bản nhờ giới hạn các kết nối đến hoặc từ dịch vụ của bạn trước khi dịch vụ xử lý các traffic đó.

Một cấu hình Firewall tối ưu sẽ hạn chế truy cập tới mọi thứ ngoại trừ các dịch vụ được chỉ định, bạn chỉ nên mở các port mà liên quan tới những dịch vụ đó. Ví dụ SSH thông thường chạy tại port 22 và HTTP/HTTPS truy cập thông qua trình duyệt thông thường chạy trên các cổng 80 và 443. Khi chúng ta chỉ mở những cổng cần thiết thì chúng ta sẽ hạn chế được các cuộc tấn công vào máy chủ của mình và hạn chế các thành phần bị khai thác lỗ hổng.

Hướng dẫn thiết lập Firewall

Có rất nhiều phần mềm firewall có sẵn trên các hệ thống Linux. Thông thường, ta chỉ nên thay đổi cấu hình Firewall khi chúng ta thay đổi các dịch vụ đang chạy trên Server đó. Dưới dây là 1 số phần mềm Firewall mà bạn có thể tham khảo:

UFW hay Uncomplicated Firewall, được cài đặt mặc định trên 1 số phiên bản Linux như Ubuntu. Nếu bạn sử dụng các hệ điều hành như Red Hat, Rocky hay Fedora Linux, bạn có thể sử dụng firewalld để cấu hình Firewall. Hầu hết các phần mềm firewall như UFW hay firewalld sẽ ghi lại các rule mà ta cấu hình vào 1 file gọi là iptables. Một số phần mềm khác có thiết lập các rule liên quan tới Port như Docker cũng ghi file cấu hình trực tiếp vào iptables, cần lưu ý rằng điều này có thể gây xung đột với các rule được thiết lập bởi UFW.

Rất nhiều các nhà cung cấp Cloud bao gồm cả Bizfly Cloud, sẽ cho phép bạn cấu hình Firewall như là một dịch vụ. Dịch vụ Firewall của Bizfly Cloud là một lớp phía bên ngoài Cloud Server của bạn thay vì việc triển khai và cấu hình firewall ngay trực tiếp trong Server. Các cấu hình này thường không phức tạp khi thực hiện, và có thể thực hiện trên giao diện Web, hoặc qua API. Bạn có thể xem thêm tài liệu về Bizfly Cloud Firewall.


Cần đảm bảo rằng cấu hình firewall của bạn sẽ mặc định chặn các traffic không xác định. Bằng cách này, các dịch vụ mới được triển khai trên máy chủ sẽ không được expose ra internet. Thay vào đó, bạn sẽ phải cấu hình cho phép truy cập chỉ định trên firewall. Điều này cho phép bạn đánh giá một service được truy cập như nào và ai có thể sử dụng service đó.

>> Có thể bạn quan tâm: Giải pháp tường lửa dành cho doanh nghiệp

VPC Networks

Virtual Private Cloud (VPC) là các Private Network cho các tài nguyên hạ tầng của bạn. VPC Netowrk cung cấp các kết nối an toàn giữa các tài nguyên của bạn, bởi vì các network interface không được truy cập từ Public Internet.

VPC Network và khả năng tăng độ bảo mật server 

Theo mặc định, một vài nhà cung cấp cloud sẽ gán cho các Cloud Server của bạn một Public network interface và một private network interface. Vô hiệu hoá Public Network Interface trong hạ tầng của bạn sẽ chỉ cho phép các Cloud Server này kết nối với nhau sử dụng Private network interface của chúng thông qua internal network. Điều này có nghĩa là traffic giữa các hệ thống của bạn sẽ không được định tuyền thông qua public internet.

Triển khai VPC Network

Hầu hết các nhà cung cấp dịch vụ hạ tầng cho phép bạn tạo và thêm các tài nguyên vào VPC network bên trong Data Center của họ.

Bizfly Cloud hiện cung cấp VPC Network mặc định cho khách hàng, ngoài ra Khách hàng có thể khởi tạo thêm các VPC Network để phân tách các môi trường khác nhau (ví dụ môi trường Production, môi trường UAT). Tham khảo thêm việc sử dụng 

Bizfly Cloud VPC Network.

Service Auditing

Để bảo mật tốt cho hệ thống của bạn, chúng ta cần hiểu về các dịch vụ có thể bị tấn công và hạn chế các thành phần tới tối đa.

Gợi ý chùm phương án bảo mật giúp bạn bảo vệ server tối ưu  - Ảnh 3.

Service Auditing là một cách để biết về các dịch vụ đang chạy trên 1 hệ thống, các port đang được sử dụng để cho giao tiếp, giao thức nào được sử dụng để các dịch vụ trao đổi với nhau. Thông tin này có thể giúp bạn cấu hình dịch vụ nào nên được public, các cấu hình Firewall, giám sát và cảnh báo.

Tại sao Service Auditing giúp cải thiện sự an toàn?

Mỗi một dịch vụ đang chạy, bất kể nó được dự định chạy internal hay public, luôn luôn tiềm ẩn các nguy cơ tấn công từ các user độc hại. Bạn càng chạy nhiều dịch vụ thì càng có lỗ hổng ảnh hưởng tới phần mềm của bạn.

Khi bạn nắm bắt được các dịch vụ mạng đang chạy trên máy chủ của bạn, bạn có thể bắt đầu phân tích các dịch vụ này. Khi bạn thực hiện audit các dịch vụ, bạn nên trả lời các câu hỏi sau về từng dịch vụ:

Nên chạy dịch vụ này hay không? Dịch vụ này nên được chạy trên Network interface nào? Dịch vụ nên được chạy trên Public hay Private network interface? Liệu rằng các firewall rule đã cho phép các traffic hợp lệ tới dịch vụ này? Liệu rằng các firewall rule đã ngăn chặn các traffic bất hợp lệ? Đã có phương thức nhận cảnh báo về lỗ hổng của mỗi service hay chưa?

Chúng ta nên thực hiện service audit sau vài tháng, điều này sẽ giúp cho bạn có thể biết được các dịch vụ với các cấu hình bị thay đổi một cách vô tình hay cố tình.

Làm thế nào để Service Auditing?

Để audit network service đang chạy trên hệ thống của bạn, sử dụng câu lệnh ss để liệt kê toàn bộ các cổng TCP và UDP đang được sử dụng trên 1 Server. Một câu lệnh ví dụ sau sẽ hiển thị tên chương trình, PID và địa chỉ đang được sử dụng để listen các traffic TCP và UDP:

$ sudo ss -plunt

Các tham số p, l, u, n, và t như sau:

p: hiển thị các tiến trình 

l: chỉ hiển thị các chương trình đang thực hiện listen 

u: bao gồm giao thức UDP 

n: hiển thị giá trị của traffic t: bao gồm giao thức TCP

Output tương tự như sau:

Output

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process

tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))

tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6))

tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4))

tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))

Các cột chính của output bạn cần quan tâm tới là: Netid, Local Address:Port, và Process name. Nếu Local Address:Port là 0.0.0.0, thì service có thể nhận các kết nối trên tất cả các network interface IPv4. Nếu địa chỉ là [::] có nghĩa là service có thể nhận các kết nối trên tất cả các network interface IPv6. Trong ví dụ trên, SSH và Nginx đều listen trên tất cả các public interfaces, và trên cả IPv4 và IPv6.

Nếu bạn muốn SSH và Nginx chỉ listen trên 1 interface, thông thường bạn sẽ disable các service chạy trên các interface không sử dụng đến.

Kết luận

Chiến lược mà tôi đưa ra trong bài hướng dẫn này là tổng quan các bước mà bạn có thể áp dụng để cải thiện an toàn cho hệ thống của bạn. Điều quan trọng là chúng ta cần hiểu rằng những vấn đề bảo mật sẽ giảm đi tính hiệu quả nếu như bạn chờ đợi và không triển khai chúng. Bảo mật nên được xem xét và thiết lập ngay khi bạn triển khai hạ tầng. Một khi bạn đã thiết lập các cấu hình an toàn cơ bản, bạn có thể bắt đầu triển khai các dịch vụ và ứng dụng ở một mức độ đảm bảo nhất định.

Chúng ta cũng cần lưu ý thêm rằng ngay cả với một môi trường đã được thiết lập an toàn từ đầu, bảo mật phải là liên tục và là quá trình lặp đi lặp lại. Luôn luôn lưu ý đến các vấn đề security khi thiết lập thay đổi, đưa ra các bước cần đảm bảo cho việc cấu hình và môi trường an toàn cho ứng dụng của bạn.

Chúc các bạn áp dụng thành công trong công việc vận hành hạ tầng của mình. Hẹn gặp lại các bạn trong các chủ đề công nghệ hấp dẫn cùng Bizfly Cloud trong các bài viết sau!

>> Có thể bạn quan tâm: 13 lời khuyên giúp bảo mật máy chủ Web Server. Bạn đã biết?

Bizfly Cloud - Đơn vị hàng đầu cung cấp các giải pháp hạ tầng Cloud IT phục vụ chuyển đổi số cho doanh nghiệp - tiền thân là VCCloud - trực thuộc Công ty Cổ phần VCCorp - Công ty dẫn đầu trong lĩnh vực truyền thông và công nghệ cao tại Việt Nam.

Bạn đọc quan tâm có thể tham khảo, dùng thử MIỄN PHÍ và nhận nhiều ưu đãi hấp dẫn tại: bizflycloud.vn/

Hotline hỗ trợ: 024 7302 8888 / 028 7302 8888

SHARE