UFW (Uncomplicated Firewall) là một giao diện đơn giản cho iptables, được thiết kế nhằm đơn giản hoá quá trình cấu hình tường lửa trên Ubuntu. Mặc dù iptables là một công cụ mạnh mẽ và linh hoạt, nhưng đối với người mới bắt đầu, việc sử dụng nó để cấu hình một tường lửa một cách chính xác có thể gặp khó khăn. Nếu bạn đang tìm cách bảo mật mạng của mình và chưa biết sử dụng công cụ nào, UFW có thể là lựa chọn phù hợp.
Bài hướng dẫn này sẽ chỉ cho bạn cách cài đặt tường lửa với UFW trên Ubuntu (phiên bản 18.04 trở lên).
Yêu cầu tiên quyết trước khi cài đặt Tường Lửa UFW
Nếu bạn đang dùng Ubuntu phiên bản 16.04 hoặc thấp hơn, chúng tôi khuyến nghị bạn nâng cấp lên phiên bản mới hơn vì Ubuntu đã ngừng hỗ trợ các phiên bản này. Bộ sưu tập hướng dẫn của chúng tôi sẽ giúp bạn nâng cấp phiên bản Ubuntu.
Để theo dõi bài hướng dẫn này, bạn cần:
- Một máy chủ chạy Ubuntu (phiên bản 18.04 trở lên) cùng với một tài khoản không phải root có quyền sudo. Để biết cách thiết lập, hãy chọn bản phân phối của bạn từ danh sách và theo dõi Hướng Dẫn Cài Đặt Máy Chủ Ban Đầu.
- UFW được cài đặt sẵn trên Ubuntu. Nếu vì lý do nào đó nó đã bị gỡ bỏ, bạn có thể cài đặt lại bằng
sudo apt install ufw
Cài đặt tường lửa Ubuntu với UFW
- Bước 1 — Đảm Bảo IPv6 Đã Được Bật
- Bước 2 — Thiết Lập Chính Sách Mặc Định
- Bước 3 — Cho Phép Kết Nối SSH
- Cho phép hồ sơ ứng dụng UFW OpenSSH
- Cho phép SSH theo tên dịch vụ
- Cho phép SSH theo số cổng
- Bước 4 — Bật UFW
- Bước 5 — Cho Phép Các Kết Nối Khác
- Các dải cổng cụ thể
- Các địa chỉ IP cụ thể
- Các mạng con
- Kết nối đến giao diện mạng cụ thể
- Bước 6 — Từ Chối Các Kết Nối
- Bước 7 — Xóa Các Quy Tắc UFW
- Xóa quy tắc UFW theo số thứ tự
- Xóa quy tắc UFW theo tên
- Bước 8 — Kiểm Tra Trạng Thái và Các Quy Tắc UFW
- Bước 9 — Vô Hiệu Hoá hoặc Reset Tường Lửa
Bước 1 — Đảm Bảo IPv6 Đã Được Bật trước khi cài đặt Tường Lửa UFW Trên Ubuntu
Trong các phiên bản Ubuntu mới, IPv6 thường được bật mặc định. Điều này có nghĩa là hầu hết các quy tắc tường lửa bạn thêm vào máy chủ sẽ bao gồm cả phiên bản IPv4 và IPv6 (phiên bản IPv6 được đánh dấu bằng “v6” trong đầu ra của lệnh ufw status
).
Để đảm bảo IPv6 đã được bật, hãy kiểm tra file cấu hình UFW tại /etc/default/ufw
. Mở file này bằng nano (hoặc trình soạn thảo bạn ưa thích):
sudo nano /etc/default/ufw
Sau đó, đảm bảo rằng giá trị của IPV6 được đặt là yes. File sẽ có đoạn như sau:
IPV6=yes
Lưu và đóng file (với nano: nhấn CTRL+X
, sau đó Y
và ENTER
).
Khi UFW được bật ở bước sau, nó sẽ tự động cấu hình các quy tắc cho cả IPv4 và IPv6.
Bước 2 — Thiết Lập Chính Sách Mặc Định UFW trên Ubuntu
Nếu bạn mới bắt đầu với UFW, bước đầu tiên nên làm là kiểm tra các chính sách mặc định của tường lửa. Các quy tắc này kiểm soát cách xử lý lưu lượng không khớp với bất kỳ quy tắc nào khác.
Mặc định, UFW được thiết lập để từ chối (deny) tất cả các kết nối đến và cho phép (allow) tất cả các kết nối đi. Điều này có nghĩa là nếu ai đó cố gắng truy cập máy chủ của bạn, họ sẽ không thể kết nối, trong khi các ứng dụng trên máy chủ có thể truy cập Internet.
Để thiết lập chính sách mặc định, chạy:
sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)
Tiếp theo, để thiết lập chính sách outgoing mặc định là cho phép:
sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)
Những lệnh này thiết lập các chính sách cơ bản: từ chối lưu lượng đến và cho phép lưu lượng đi. Đối với một máy tính cá nhân, các chính sách này có thể đủ, nhưng các máy chủ thường cần phản hồi các yêu cầu từ bên ngoài, điều này sẽ được thiết lập trong các bước tiếp theo.
Bước 3 — Cho Phép Kết Nối SSH
Nếu bạn bật tường lửa ngay bây giờ, nó sẽ chặn tất cả các kết nối đến, do đó bạn cần tạo quy tắc cho phép các kết nối hợp lệ như SSH hoặc HTTP để máy chủ có thể phản hồi.
Cho Phép Hồ Sơ Ứng Dụng UFW OpenSSH
Khi cài đặt, hầu hết các ứng dụng dựa trên mạng sẽ đăng ký một hồ sơ ứng dụng (UFW application profile) để cho phép bạn nhanh chóng cho phép hoặc từ chối truy cập đến một dịch vụ. Để kiểm tra các hồ sơ hiện có, chạy:
sudo ufw app list
Output
Available applications: OpenSSH
Để kích hoạt hồ sơ ứng dụng OpenSSH, chạy:
sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)
Cho Phép SSH theo Tên Dịch Vụ
Một cách khác để cho phép kết nối SSH đến là tham chiếu theo tên dịch vụ (ssh):
sudo ufw allow ssh
Output
Rule added Rule added (v6)
Cho Phép SSH theo Số Cổng
Ngoài ra, bạn có thể chỉ định số cổng thay vì tên dịch vụ. Ví dụ, nếu SSH mặc định sử dụng cổng 22:
sudo ufw allow 2222
Output
Rule added Rule added (v6)
Nếu SSH của bạn chạy trên cổng khác (ví dụ: 2222), hãy thay số cổng tương ứng.
Bước 4 — Bật UFW
Bây giờ, khi bạn đã cấu hình quy tắc cho phép kết nối SSH, hãy bật UFW.
Để kiểm tra các quy tắc đã được thêm (mặc dù tường lửa vẫn ở trạng thái tắt), chạy:
sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH
Sau khi xác nhận rằng quy tắc cho phép SSH đã có, bật tường lửa bằng:
sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system st
Bạn sẽ nhận được cảnh báo rằng lệnh có thể làm gián đoạn các kết nối SSH hiện tại. Vì bạn đã thiết lập quy tắc cho phép SSH, hãy trả lời “y” và nhấn ENTER.
Bây giờ, tường lửa đã được bật. Bạn có thể dùng lệnh sudo ufw status verbose
, để xem các quy tắc hiện hành.
Bước 5 — Cho Phép Các Kết Nối Khác
Ở bước này, bạn cầ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 này phụ thuộc vào nhu cầu cụ thể của bạn. Bạn đã biết cách tạo quy tắc cho SSH, và bây giờ bạn có thể làm tương tự cho:
- HTTP (cổng 80): Sử dụng lệnh
sudo ufw allow http
hoặcsudo ufw allow 80
- HTTPS (cổng 443): Sử dụng lệnh
sudo ufw allow https
hoặcsudo ufw allow 443
- Apache: Cho phép cả HTTP và HTTPS với hồ sơ “Apache Full”
sudo ufw allow "Apache Full"
- Nginx: Cho phép cả HTTP và HTTPS với hồ sơ “Nginx Full”
sudo ufw allow "Nginx Full"
Ngoài ra, bạn có thể tạo các quy tắc khác bằng cách chỉ định các dải cổng, địa chỉ IP cụ thể, hoặc mạng con, như được minh họa trong các phần dưới đây.
Các Dải Cổng Cụ Thể
Ví dụ, để cho phép kết nối X11 (sử dụng các cổng 6000–6007):
sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
Khi chỉ định dải cổng, bạn phải xác định giao thức (tcp hoặc udp).
Các Địa Chỉ IP Cụ Thể và Mạng Con
Để cho phép kết nối từ một địa chỉ IP cụ thể, ví dụ 203.0.113.4:
sudo ufw allow from 203.0.113.4
Output
Rule added
Nếu bạn chỉ muốn cho phép kết nối đến cổng 22 từ địa chỉ đó:
sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added
Để cho phép một mạng con, ví dụ 203.0.113.0/24, chạy:
sudo ufw allow from 203.0.113.0/24
Output
Rule added
Nếu bạn muốn chỉ định cả cổng đích (ví dụ cổng 22):
sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added
Bước 6 — Từ Chối Các 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 đã được thiết lập để từ chối tất cả các kết nối đến trừ khi có quy tắc cho phép. Tuy nhiên, đôi khi bạn cầ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.
Để viết quy tắc từ chối, hãy sử dụng các lệnh đã trình bày ở trên nhưng thay thế allow
bằng deny
.
Ví dụ, để từ chối các kết nối HTTP:
sudo ufw deny http
Output
Rule added Rule added (v6)
Hoặc, để từ chối tất cả các kết nối từ địa chỉ 203.0.113.4:
sudo ufw deny from 203.0.113.4
Output
Rule added
Ngoài ra, nếu bạn muốn chặn lưu lượng xuất đi trên một cổng cụ thể (ví dụ, cổng 25 cho SMTP):
sudo ufw deny out 25
Output
Rule added Rule added (v6)
Bước 7 — Xóa Các Quy Tắc UFW
Biết cách xóa các quy tắc tường lửa cũng quan trọng như biết tạo chúng. Có hai cách để chỉ định quy tắc cần xóa: theo số thứ tự hoặc theo tên (định danh).
Xóa Quy Tắc UFW Theo Số Thứ Tự
Đầu tiên, hiển thị danh sách các quy tắc có số thứ tự:
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 muốn xóa quy tắc số 2 (cho phép kết nối HTTP trên cổng 80), chạy:
sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted
Xóa Quy Tắc UFW Theo Tên
Thay vì dùng số thứ tự, bạn cũng có thể xóa quy tắc dựa trên tên (định danh) của quy tắc. Ví dụ, để xóa quy tắc cho phép kết nối từ hồ sơ “Apache Full”:
sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)
Lưu ý: Khi xóa quy tắc theo tên, cả quy tắc IPv4 và IPv6 sẽ bị xóa nếu có.
Bạn cũng có thể xóa quy tắc bằng cách thay thế tên dịch vụ bằng số cổng. Ví dụ, thay vì allow http
, bạn có thể dùng allow 80
.
sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)
Bước 8 — Kiểm Tra Trạng Thái và Các Quy Tắc UFW
Ở bất kỳ thời điểm nào, bạn có thể kiểm tra trạng thái của UFW bằng lệnh:
sudo ufw status verbose
Nếu UFW chưa được bật, đầu ra sẽ như sau:
Output
Status: inactive
Nếu UFW đang hoạt động, đầu ra sẽ cho biết trạng thái là active và liệt kê các quy tắc đã được thiết lập. Ví dụ, nếu máy chủ của bạn được cấu hình cho phép các kết nối SSH trên cổng 22, đầu ra có thể như sau:
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere
Sử dụng lệnh này để xác nhận rằng các quy tắc của UFW đã được áp dụng chính xác.
Bước 9 — Vô Hiệu Hoá hoặc Reset Tường Lửa
Nếu bạn quyết định không sử dụng tường lửa UFW, bạn có thể vô hiệu hoá nó bằng lệnh:
sudo ufw disable
Output
Firewall stopped and disabled on system startup
Lệnh này sẽ tắt hoàn toàn dịch vụ tường lửa trên hệ thống của bạn.
Nếu bạn đã cấu hình các quy tắc UFW nhưng muốn khởi đầu lại từ đầu, bạn có thể sử dụng lệnh reset:
sudo ufw reset
Output
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.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Lệnh reset sẽ vô hiệu hoá UFW và xóa mọi quy tắc đã được định nghĩa, mang lại một cấu hình mới ban đầu cho UFW. Lưu ý rằng các chính sách mặc định sẽ không trở lại giá trị ban đầu nếu bạn đã thay đổi chúng.
Kết Luận
Tường lửa của bạn hiện đã được cấu hình để cho phép (ít nhất) các kết nối SSH đến. Hãy đảm bảo rằng bạn cũng cho phép những kết nối đến khác mà máy chủ của bạn cần để hoạt động, đồng thời hạn chế các kết nối không cần thiết để bảo vệ an toàn cho máy chủ.
Để tìm hiểu thêm về các cấu hình UFW thông dụng, hãy tham khảo bài hướng dẫn “UFW Essentials: Common Firewall Rules and Commands“.