Reading Time: 8 minutes

Thiết lập tường lửa (firewall) hiệu quả là điều kiện cốt yếu để bảo vệ máy chủ trên cloud. Trước đây, việc này thường được thực hiện thông qua các công cụ phức tạp và khó dùng. Tuy nhiều công cụ trong số này (như iptables) có nhiều chức năng tích hợp sẵn, chúng đòi hỏi người dùng phải bỏ thêm công sức để tìm hiểu và làm quen.

thiết lập tường lửa UFW

Một lựa chọn khác là UFW, hay Uncomplicated Firewall. UFW là một front-end của iptables, được thiết kế để cung cấp một giao diện thân thiện với người dùng hơn so với các tiện ích quản lý firewall khác. UFW được dùng và hỗ trợ rộng rãi bởi cộng đồng Linux và thường được cài đặt mặc định trên nhiều bản phân phối (distro).

Trong bài hướng dẫn này, chúng ta sẽ thiết lập tường lửa UFW để bảo vệ cloud server Ubuntu hoặc Debian. Chúng ta cũng sẽ tìm hiểu cách thiết lập các rule mặc định cho UFW để cho phép hoặc từ chối kết nối đến các port và địa chỉ IP, xóa các rule đã tạo, cũng như cách tắt, bật UFW và reset mọi thứ về cài đặt mặc định nếu cần.

Chuẩn bị trước khi thiết lập tường lửa UFW

Để thực hiện theo bài hướng dẫn này, chúng ta cần một server đang chạy Ubuntu hoặc Debian. Server này phải có một user không phải root nhưng có đặc quyền sudo. Đảm bảo rằng UFW đã được cài đặt và chúng ta có một môi trường an toàn để thực hành tạo các rule cho firewall.

Sử dụng IPv6 với UFW

Nếu VPS (Virtual Private Server) của bạn đã được cấu hình IPv6, hãy đảm bảo UFW cũng được cấu hình để hỗ trợ giao thức này. Như vậy, UFW sẽ thiết lập các quy tắc firewall cho cả IPv4 và IPv6.

Để thực hiện việc này, hãy mở file cấu hình UFW bằng trình editor bạn hay dùng. Ở đây, chúng ta sẽ dùng nano:

sudo nano /etc/default/ufw

Hãy xác nhận rằng giá trị của IPV6 được đặt là yes:

# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes

Sau khi thực hiện thay đổi, hãy lưu và thoát file. Nếu dùng nano, nhấn Ctrl+X, rồi Y, và cuối cùng là Enter.

Bây giờ, hãy khởi động lại firewall bằng cách tắt nó đi trước:

sudo ufw disable
Firewall stopped and disabled on system startup

Sau đó bật lại:

sudo ufw enable
Firewall is active and enabled on system startup

Tường lửa UFW của chúng ta giờ đã sẵn sàng để cấu hình các rule cho cả IPv4 và IPv6 khi cần. Tiếp theo, chúng ta sẽ điều chỉnh các rule mặc định cho các kết nối đến firewall.

Thiết lập mặc định cho UFW

Chúng ta có thể cải thiện hiệu suất của firewall bằng cách thiết lập các rule mặc định cho việc cho phép và từ chối kết nối. Theo mặc định, UFW từ chối mọi kết nối đến (incoming) và cho phép mọi kết nối đi (outgoing). Điều này có nghĩa là không ai có thể truy cập server từ bên ngoài, trong khi mọi ứng dụng trên server đều có thể kết nối ra ngoài.

Để cập nhật các rule mặc định này, trước tiên, chúng ta hãy xử lý rule cho các kết nối đến:

sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

Tiếp theo, hãy xử lý rule cho các kết nối đi:

sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

Lưu ý: Nếu muốn kiểm soát chặt chẽ hơn, bạn có thể từ chối tất cả các yêu cầu đi tùy thuộc vào nhu cầu cá nhân. Ví dụ, nếu có một cloud server công khai (public), thiết lập đó có thể giúp ngăn chặn mọi loại kết nối shell từ xa. Tuy nhiên, việc này sẽ khiến quản lý firewall trở nên phức tạp hơn, vì chúng ta cũng sẽ phải thiết lập rule cho tất cả các kết nối đi.

Dùng lệnh sau để mặc định chặn kết nối đi:

sudo ufw default deny outgoing

Cho phép kết nối đến firewall

Để cho phép kết nối, chúng ta cần thay đổi các rule của firewall (bằng cách chạy lệnh trong terminal). Khi bật firewall ngay bây giờ, nó sẽ từ chối tất cả các kết nối đến. Đồng nghĩa với việc nó sẽ khóa bạn khỏi server nếu bạn đang kết nối đến đó qua SSH.

Để tránh hiện tượng, hãy cho phép kết nối SSH đến server trước:

sudo ufw allow ssh

Nếu các thay đổi thành công, chúng ta sẽ nhận được output sau:

Rule added
Rule added (v6)

UFW có sẵn một số cấu hình mặc định, ví dụ như lệnh ssh đã dùng ở trên. Hoặc chúng ta có thể cho phép các kết nối đến port 22/tcp, sử dụng TCP (Transmission Control Protocol) để đạt được kết quả tương tự:

sudo ufw allow 22/tcp

Tuy nhiên, nếu chúng ta thử lệnh này sau khi đã chạy allow ssh, chúng ta sẽ nhận được thông báo sau vì rule đã tồn tại:

Skipping adding existing rule
Skipping adding existing rule (v6)

Nếu SSH server của chúng ta đang chạy trên port 2222, chúng ta có thể cho phép kết nối với cú pháp tương tự, nhưng thay bằng port 2222. Lưu ý rằng nếu chỉ dùng số để chỉ định port, rule sẽ áp dụng cho cả tcpudp:

sudo ufw allow 2222/tcp
Rule added
Rule added (v6)

Tăng cường bảo mật web server

Để bảo vệ một web server có truy cập File Transfer Protocol (FTP), chúng ta sẽ cần cho phép kết nối đến port 80/tcp.

Việc cho phép kết nối đến port này rất cần thiết cho các web server như Apache và Nginx bởi chúng listen (lắng nghe) các yêu cầu kết nối HTTP. Để làm điều này, hãy chạy lệnh sau:

sudo ufw allow 80/tcp

UFW thường cung cấp các profile chứa sẵn các rule cần thiết để web server hoạt động. Nếu không, các profile của web server có thể được lưu là “WWW” và được kích hoạt như ftp hoặc tcp như trong các ví dụ sau:

sudo ufw allow www

Chúng ta cũng có thể dùng ftp hoặc port 21 để cho phép các kết nối FTP:

sudo ufw allow ftp
sudo ufw allow 21/tcp

Đối với các kết nối FTP, chúng ta cũng cần cho phép kết nối đến port 20:

sudo ufw allow 20/tcp

Các điều chỉnh cụ thể sẽ tùy thuộc vào các port và service mà chúng ta cần mở. Bạn nên kiểm tra kỹ lưỡng chúng và đừng quên phải đảm bảo kết nối SSH không bị gián đoạn.

Chỉ định dải port

Chúng ta cũng có thể cho phép hoặc từ chối nguyên một dải port với UFW. Để làm vậy, trước tiên hãy chỉ định port đầu của dải, theo sau là dấu hai chấm (:), rồi đến port cuối của dải. Cuối cùng, cần chỉ định giao thức (tcp hoặc udp) mà rule sẽ áp dụng.

Ví dụ, lệnh sau sẽ cho phép truy cập TCP đến mọi port trong khoảng từ 1000 đến 2000 (bao gồm cả hai port này):

sudo ufw allow 1000:2000/tcp

Tương tự, lệnh sau sẽ từ chối các kết nối UDP đến mọi port trong khoảng 1234 từ đến 4321:

sudo ufw deny 1234:4321/udp

Chỉ định địa chỉ IP

Chúng ta có thể cho phép kết nối từ một địa chỉ IP cụ thể như sau (nhớ thay thế bằng địa chỉ IP thực tế của bạn):

sudo ufw allow from your_server_ip

Như các ví dụ trên đã cho thấy, chúng ta có thể linh hoạt điều chỉnh các rule của firewall bằng cách cho phép một cách có chọn lọc các kết nối từ những port và địa chỉ IP nhất định.

Từ chối kết nối

Nếu muốn mở tất cả các port của server (chúng tôi không khuyến khích điều này), bạn có thể cho phép tất cả các kết nối rồi sau đó từ chối những port không muốn cấp quyền truy cập. Ví dụ sau minh họa cách từ chối truy cập vào port 80:

sudo ufw deny 80/tcp

Xóa rule

Nếu chúng ta muốn xóa một số rule đã thiết lập, hãy dùng lệnh delete và chỉ định rule muốn xóa:

sudo ufw delete allow 80/tcp
Rule deleted
Rule deleted (v6)

Khi rule dài và phức tạp, thay vào đó chúng ta có thể làm theo hai bước. Đầu tiên, hãy liệt kê các rule hiện tại kèm theo số thứ tự:

sudo ufw status numbered

Sau đó, dựa vào danh sách đã đánh số này, hãy xem xét các rule hiện có và xóa rule bằng cách chỉ định số thứ tự của nó:

sudo ufw delete number
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 2222/tcp                   ALLOW IN    Anywhere
[ 4] 80                         ALLOW IN    Anywhere
[ 5] 20/tcp                     ALLOW IN    Anywhere
…

Ví dụ, nếu rule cho port 80 thuộc mục số 4 trong danh sách, chúng ta sẽ dùng cú pháp sau:

sudo ufw delete 4

Hệ thống có thể sẽ yêu cầu bạn có xác nhận với hai lựa chọn là có (y) và không (n):

Deleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)

Bật UFW

Sau khi đã tạo tất cả các rule muốn áp dụng cho firewall, chúng ta có thể bật UFW để bắt đầu kích hoạt chúng. Nếu đang kết nối qua SSH, hãy nhớ thiết lập rule cho phép kết nối đến port SSH (thường là port 22). Nếu không, chúng ta có thể bị khóa khỏi server.

Kích hoạt UFW bằng lệnh sau:

sudo ufw enable
Firewall is active and enabled on system startup

Để xác nhận các thay đổi đã được áp dụng thành công, hãy kiểm tra trạng thái của các rule:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere
20/tcp                     ALLOW       Anywhere
80/tcp                     DENY        Anywhere
…

Chúng ta cũng có thể dùng verbose để có output chi tiết hơn:

sudo ufw status verbose

Để tắt UFW, hãy chạy lệnh sau:

sudo ufw disable
Firewall stopped and disabled on system startup

Reset về cấu hình mặc định

Nếu vì lý do nào đó cần reset các rule về mặc định, bạn có thể dùng lệnh ufw reset. Lưu ý rằng hệ thống sẽ nhắc bạn nhập y hoặc n để xác nhận trước khi reset toàn bộ vì thao tác này có thể làm gián đoạn các kết nối SSH hiện tại:

sudo ufw reset
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530'
Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530'
Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

Reset về cấu hình mặc định sẽ tắt UFW và xóa mọi rule đã được tạo trước đó. Tuy nhiên, các cài đặt mặc định của UFW sẽ không tự động khôi phục về giá trị ban đầu nếu trước đó bạn đã thay đổi chúng. Giờ đây, bạn có thể cấu hình UFW lại từ đầu và tùy chỉnh các rule theo ý muốn.

Tổng kết

Trong bài hướng dẫn này, chúng ta đã tìm hiểu cách thiết lập và cấu hình cloud server để cho phép hoặc hạn chế truy cập vào một số port hoặc địa chỉ IP nhất định. Thêm vào đó, bài hướng dẫn cũng đưa ra ví dụ xóa các rule không còn cần thiết và xác nhận các thay đổi đó đã được áp dụng bằng cách tắt rồi bật lại UFW. Cuối cùng, chúng ta đã học cách reset UFW firewall về cài đặt mặc định. Bạn có thể tham khảo các bài viết khác về UFW của chúng tôi để tìm hiểu thêm về những rule và lệnh thông dụng khác.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.