Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách thiết lập tường lửa với UFW trên Ubuntu 22.04

Ngày đăng: 16 tháng 10 năm 2023

Giới thiệu

UFW, hay Uncomplicated Firewall, là giao diện quản lý tường lửa được đơn giản hóa giúp che giấu sự phức tạp của các công nghệ lọc gói (packet filtering) cấp thấp hơn như iptablesnftables. Nếu bạn đang muốn bảo mật mạng của mình và không chắc chắn nên sử dụng công cụ nào, thì UFW có thể là lựa chọn phù hợp cho bạn.

Hướng dẫn này sẽ chỉ cho bạn cách thiết lập tường lửa với UFW trên Ubuntu 22.04.

Điều kiện tiên quyết

Để làm theo hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu 22.04 có sudo non-root user mà bạn có thể thiết lập bằng cách làm theo hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 22.04 của chúng tôi.
  • UFW được cài đặt mặc định trên Ubuntu. Nếu nó đã bị gỡ cài đặt vì lý do nào đó, bạn có thể cài đặt nó bằng sudo apt install ufw.

Bước 1 - Sử dụng IPv6 với UFW (Tùy chọn)

Hướng dẫn này được viết dành cho IPv4 nhưng sẽ hoạt động với IPv6 miễn là bạn kích hoạt nó. Nếu máy chủ Ubuntu của bạn đã bật IPv6, hãy đảm bảo rằng UFW được định cấu hình để hỗ trợ IPv6 để nó quản lý các quy tắc tường lửa cho IPv6 ngoài IPv4. Để thực hiện việc này, hãy mở cấu hình UFW bằng nano hoặc trình chỉnh sửa yêu thích của bạn.

  1. sudo nano /etc/default/ufw

Sau đó hãy đảm bảo giá trị của IPV6yes. Nó sẽ giống như thế này:

/etc/default/ufw excerpt
IPV6=yes

Lưu và đóng tập tin. Bây giờ, khi UFW được kích hoạt, nó sẽ được cấu hình để ghi cả các quy tắc tường lửa IPv4 và IPv6. Tuy nhiên, trước khi bật UFW, chúng tôi muốn đảm bảo rằng tường lửa của bạn được định cấu hình để cho phép bạn kết nối qua SSH. Hãy bắt đầu với việc thiết lập các chính sách mặc định.

Bước 2 - Thiết lập chính sách mặc định

Nếu bạn mới bắt đầu sử dụng tường lửa, quy tắc đầu tiên cần xác định là các chính sách mặc định của bạn. Các quy tắc này kiểm soát cách xử lý lưu lượng truy cập không khớp rõ ràng với bất kỳ quy tắc nào khác. Theo mặc định, UFW được đặt để từ chối tất cả các kết nối đến và cho phép tất cả các kết nối đi. Điều này có nghĩa là bất kỳ ai cố gắng truy cập máy chủ của bạn sẽ không thể kết nối, trong khi bất kỳ ứng dụng nào trong máy chủ đều có thể truy cập thế giới bên ngoài.

Hãy đặt các quy tắc UFW của bạn về mặc định để chúng tôi có thể chắc chắn rằng bạn có thể làm theo hướng dẫn này. Để đặt các giá trị mặc định được UFW sử dụng, hãy sử dụng các lệnh sau:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Bạn sẽ nhận được đầu ra như sau:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Các lệnh này đặt mặc định để từ chối các kết nối đến và cho phép các kết nối đi. Chỉ riêng các giá trị mặc định của tường lửa này có thể đủ cho một máy tính cá nhân, nhưng các máy chủ thường cần phản hồi các yêu cầu đến từ người dùng bên ngoài. Chúng ta sẽ xem xét điều đó tiếp theo.

Bước 3 - Cho phép kết nối SSH

Nếu chúng tôi kích hoạt tường lửa UFW ngay bây giờ, nó sẽ từ chối tất cả các kết nối đến. Điều này có nghĩa là chúng tôi sẽ cần tạo các quy tắc cho phép rõ ràng các kết nối đến hợp pháp - ví dụ: kết nối SSH hoặc HTTP - nếu chúng tôi muốn máy chủ của mình phản hồi các loại yêu cầu đó. Nếu bạn đang sử dụng máy chủ đám mây, có thể bạn sẽ muốn cho phép các kết nối SSH đến để có thể kết nối và quản lý máy chủ của mình.

Để định cấu hình máy chủ của bạn để cho phép các kết nối SSH đến, bạn có thể sử dụng lệnh này:

  1. sudo ufw allow ssh

Điều này sẽ tạo ra các quy tắc tường lửa cho phép tất cả các kết nối trên cổng 22, đây là cổng mà daemon SSH lắng nghe theo mặc định. UFW biết cổng allow ssh nghĩa là gì vì nó được liệt kê dưới dạng dịch vụ trong tệp /etc/services.

Tuy nhiên, chúng ta thực sự có thể viết quy tắc tương đương bằng cách chỉ định cổng thay vì tên dịch vụ. Ví dụ: lệnh này hoạt động tương tự như lệnh trên:

  1. sudo ufw allow 22

Nếu bạn đã định cấu hình trình nền SSH của mình để sử dụng một cổng khác, bạn sẽ phải chỉ định cổng thích hợp. Ví dụ: nếu máy chủ SSH của bạn đang nghe trên cổng 2222, bạn có thể sử dụng lệnh này để cho phép kết nối trên cổng đó:

  1. sudo ufw allow 2222

Bây giờ tường lửa của bạn đã được định cấu hình để cho phép các kết nối SSH đến, chúng tôi có thể kích hoạt nó.

Bước 4 - Kích hoạt UFW

Để kích hoạt UFW, hãy sử dụng lệnh này:

  1. sudo ufw enable

Bạn sẽ nhận được cảnh báo cho biết lệnh có thể làm gián đoạn các kết nối SSH hiện có. Bạn đã thiết lập quy tắc tường lửa cho phép kết nối SSH, vì vậy bạn có thể tiếp tục. Trả lời lời nhắc bằng y và nhấn ENTER.

Tường lửa hiện đang hoạt động. Chạy lệnh sudo ufw status verbose để xem các quy tắc được đặt. Phần còn lại của hướng dẫn này trình bày cách sử dụng UFW chi tiết hơn, chẳng hạn như cho phép hoặc từ chối các loại kết nối khác nhau.

Bước 5 - Cho phép các kết nối khác

Tại thời điểm này, bạn nên cho phép tất cả các kết nối khác mà máy chủ của bạn cần phản hồi. Các kết nối mà bạn nên cho phép tùy thuộc vào nhu cầu cụ thể của bạn. May mắn thay, bạn đã biết cách viết các quy tắc cho phép kết nối dựa trên tên dịch vụ hoặc cổng; chúng tôi đã thực hiện việc này cho SSH trên cổng 22. Bạn cũng có thể thực hiện việc này cho:

  • HTTP trên cổng 80, cổng mà các máy chủ web không được mã hóa sử dụng, sử dụng sudo ufw allow http hoặc sudo ufw allow 80
  • HTTPS trên cổng 443, cổng mà các máy chủ web được mã hóa sử dụng, sử dụng sudo ufw allow https hoặc sudo ufw allow 443

Có một số cách khác để cho phép các kết nối khác, ngoài việc chỉ định cổng hoặc dịch vụ đã biết.

Phạm vi cổng cụ thể

Bạn có thể chỉ định phạm vi cổng bằng UFW. Một số ứng dụng sử dụng nhiều cổng thay vì một cổng duy nhất.

Ví dụ: để cho phép kết nối X11 sử dụng cổng 6000-6007, hãy sử dụng các lệnh sau:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Khi chỉ định phạm vi cổng bằng UFW, bạn phải chỉ định giao thức (tcp hoặc udp) mà các quy tắc sẽ áp dụng. Chúng tôi chưa đề cập đến điều này trước đây vì việc không chỉ định giao thức sẽ tự động cho phép cả hai giao thức, điều này ổn trong hầu hết các trường hợp.

Địa chỉ IP cụ thể

Khi làm việc với UFW, bạn cũng có thể chỉ định địa chỉ IP. Ví dụ: nếu bạn muốn cho phép kết nối từ một địa chỉ IP cụ thể, chẳng hạn như địa chỉ IP cơ quan hoặc nhà riêng là 203.0.113.4, bạn cần chỉ định from, sau đó là địa chỉ IP:

  1. sudo ufw allow from 203.0.113.4

Bạn cũng có thể chỉ định một cổng cụ thể mà địa chỉ IP được phép kết nối bằng cách thêm to any port theo sau là số cổng. Ví dụ: Nếu bạn muốn cho phép 203.0.113.4 kết nối với cổng 22 (SSH), hãy sử dụng lệnh này:

  1. sudo ufw allow from 203.0.113.4 to any port 22

Mạng con

Nếu bạn muốn cho phép một mạng con (subnet) gồm các địa chỉ IP, bạn có thể làm như vậy bằng cách sử dụng ký hiệu CIDR để chỉ định netmask. Ví dụ: nếu bạn muốn cho phép tất cả các địa chỉ IP từ 203.0.113.1 đến 203.0.113.254, bạn có thể sử dụng lệnh này:

  1. sudo ufw allow from 203.0.113.0/24

Tương tự, bạn cũng có thể chỉ định cổng đích mà mạng con 203.0.113.0/24 được phép kết nối tới. Một lần nữa, chúng tôi sẽ sử dụng cổng 22 (SSH) làm ví dụ:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

Kết nối với một network interface cụ thể

Nếu bạn muốn tạo quy tắc tường lửa chỉ áp dụng cho một network interface (giao diện mạng) cụ thể, bạn có thể làm như vậy bằng cách chỉ định “allow in on” theo sau là tên của network interface.

Bạn có thể muốn tra cứu network interface của mình trước khi tiếp tục. Để làm như vậy, hãy sử dụng lệnh này:

  1. ip addr
Output
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: enp0s4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

Đầu ra được đánh dấu cho biết tên network interface. Chúng thường được đặt tên giống như eth0, ens1 hoặc enp3s2.

Vì vậy, nếu máy chủ của bạn có public network interface có tên ens3, bạn có thể cho phép lưu lượng HTTP (cổng 80) tới nó bằng lệnh này:

  1. sudo ufw allow in on ens3 to any port 80

Làm như vậy sẽ cho phép máy chủ của bạn nhận được các yêu cầu HTTP từ internet công cộng.

Hoặc, ví dụ: nếu bạn muốn máy chủ cơ sở dữ liệu MySQL (cổng 3306) lắng nghe các kết nối trên private network interface eth1, bạn có thể sử dụng lệnh này:

  1. sudo ufw allow in on eth1 to any port 3306

Điều này sẽ cho phép các máy chủ khác trên mạng riêng (private network) của bạn kết nối với cơ sở dữ liệu MySQL của bạn.

Bước 6 - Từ chối kết nối

Nếu bạn chưa thay đổi chính sách mặc định cho các kết nối đến, UFW sẽ được định cấu hình để từ chối tất cả các kết nối đến. Nói chung, điều này giúp đơn giản hóa quá trình tạo chính sách tường lửa an toàn bằng cách yêu cầu bạn tạo các quy tắc cho phép rõ ràng các cổng và địa chỉ IP cụ thể đi qua.

Tuy nhiên, đôi khi bạn sẽ muốn từ chối các kết nối cụ thể dựa trên địa chỉ IP nguồn hoặc mạng con, có lẽ vì bạn biết rằng máy chủ của mình đang bị tấn công từ đó. Ngoài ra, nếu bạn muốn thay đổi chính sách gửi đến mặc định của mình thành allow (điều này không được khuyến nghị), bạn sẽ cần tạo quy tắc deny cho bất kỳ dịch vụ hoặc địa chỉ IP nào mà bạn không muốn cho phép kết nối.

Để viết quy tắc từ chối, bạn có thể sử dụng các lệnh được mô tả ở trên, thay thế allow bằng deny.

Ví dụ: để từ chối kết nối HTTP, bạn có thể sử dụng lệnh này:

  1. sudo ufw deny http

Hoặc nếu bạn muốn từ chối tất cả các kết nối từ 203.0.113.4, bạn có thể sử dụng lệnh này:

  1. sudo ufw deny from 203.0.113.4

Bây giờ chúng ta hãy xem cách xóa các quy tắc.

Bước 7 - Xóa quy tắc

Biết cách xóa các quy tắc tường lửa cũng quan trọng như biết cách tạo chúng. Có hai cách khác nhau để chỉ định quy tắc nào cần xóa: theo quy tắc số hoặc theo quy tắc thực tế (tương tự như cách quy tắc được chỉ định khi chúng được tạo). Chúng ta sẽ bắt đầu với phương pháp xóa theo quy tắc số vì nó dễ dàng hơn.

Theo quy tắc số

Nếu bạn đang sử dụng quy tắc số để xóa các quy tắc tường lửa, điều đầu tiên bạn cần làm là lấy danh sách các quy tắc tường lửa của mình. Lệnh UFW status có tùy chọn hiển thị số bên cạnh mỗi quy tắc, như được minh họa ở đây:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Nếu bạn quyết định muốn xóa quy tắc 2, quy tắc cho phép kết nối cổng 80 (HTTP), bạn có thể chỉ định quy tắc đó trong lệnh xóa UFW như sau:

  1. sudo ufw delete 2

Thao tác này sẽ hiển thị lời nhắc xác nhận, sau đó xóa quy tắc 2, quy tắc cho phép kết nối HTTP. Lưu ý rằng nếu bạn đã bật IPv6, bạn cũng cần xóa quy tắc IPv6 tương ứng.

Theo quy định thực tế

Cách thay thế cho quy tắc số là chỉ định quy tắc thực tế cần xóa. Ví dụ: nếu bạn muốn xóa quy tắc allow http, bạn có thể viết nó như thế này:

  1. sudo ufw delete allow http

Bạn cũng có thể chỉ định quy tắc bằng allow 80, thay vì theo tên dịch vụ:

  1. sudo ufw delete allow 80

Phương pháp này sẽ xóa cả quy tắc IPv4 và IPv6, nếu chúng tồn tại.

Bước 8 - Kiểm tra trạng thái và quy tắc của UFW

Bất cứ lúc nào, bạn có thể kiểm tra trạng thái của UFW bằng lệnh này:

  1. sudo ufw status verbose

Nếu UFW bị tắt theo mặc định, bạn sẽ thấy một cái gì đó như thế này:

Output
Status: inactive

Nếu UFW đang hoạt động, điều này sẽ xảy ra nếu bạn làm theo Bước 3, đầu ra sẽ cho biết rằng nó đang hoạt động và nó sẽ liệt kê mọi quy tắc đã được đặt. Ví dụ: nếu tường lửa được đặt để cho phép kết nối SSH (cổng 22) từ mọi nơi, thì kết quả đầu ra có thể trông giống như thế này:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)

Sử dụng lệnh status nếu bạn muốn kiểm tra xem UFW đã cấu hình tường lửa như thế nào.

Bước 9 - Vô hiệu hóa hoặc đặt lại UFW (tùy chọn)

Nếu bạn quyết định không muốn sử dụng UFW, bạn có thể tắt nó bằng lệnh này:

  1. sudo ufw disable

Mọi quy tắc bạn tạo bằng UFW sẽ không còn hiệu lực. Bạn luôn có thể chạy sudo ufw enable nếu bạn cần kích hoạt nó sau.

Nếu bạn đã định cấu hình quy tắc UFW nhưng bạn muốn bắt đầu lại, bạn có thể sử dụng lệnh reset:

  1. sudo ufw reset

Điều này sẽ vô hiệu hóa UFW và xóa mọi quy tắc đã được xác định trước đó. Hãy nhớ rằng các chính sách mặc định sẽ không thay đổi về cài đặt ban đầu nếu bạn sửa đổi chúng bất kỳ lúc nào. Điều này sẽ mang lại cho bạn một khởi đầu mới với UFW.

Kết luận

Tường lửa của bạn hiện đã được định cấu hình để cho phép (ít nhất) kết nối SSH. Hãy đảm bảo cho phép mọi kết nối đến khác mà máy chủ của bạn cần, đồng thời hạn chế mọi kết nối không cần thiết, để máy chủ của bạn hoạt động bình thường và an toàn.

Để tìm hiểu về các cấu hình UFW phổ biến hơn, hãy xem hướng dẫn UFW Essentials: Các quy tắc và lệnh tường lửa chung.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời