ReactJS: Cơ bản về UFW: Các quy tắc và lệnh tường lửa phổ biến
Giới thiệu
UFW (Uncomplicated FireWall) là một công cụ cấu hình tường lửa chạy trên cùng iptables
, được tích hợp theo mặc định trong các bản phân phối Ubuntu. Nó cung cấp một giao diện được sắp xếp hợp lý để định cấu hình các trường hợp sử dụng tường lửa phổ biến thông qua dòng lệnh.
Bài hướng dẫn kiểu cheat sheet này cung cấp tài liệu tham khảo nhanh về các trường hợp và lệnh sử dụng UFW phổ biến, bao gồm các ví dụ về cách cho phép và chặn các dịch vụ theo cổng, giao diện mạng và địa chỉ IP nguồn.
Cách sử dụng Hướng dẫn này:
- Hướng dẫn này ở định dạng cheat sheet với các đoạn mã dòng lệnh độc lập.
- Chuyển đến bất kỳ phần nào có liên quan đến nhiệm vụ bạn đang cố gắng hoàn thành.
- Khi bạn nhìn thấy văn bản được đánh dấu trong các lệnh của hướng dẫn này, hãy nhớ rằng văn bản này phải tham chiếu đến các địa chỉ IP từ mạng của riêng bạn.
Hãy nhớ rằng bạn có thể kiểm tra bộ quy tắc UFW hiện tại của mình bằng sudo ufw status
hoặc sudo ufw status verbose
.
Xác minh trạng thái UFW
Để kiểm tra xem ufw
đã được bật chưa, hãy chạy:
sudo ufw status
Status: inactive
Output sẽ cho biết tường lửa của bạn có đang hoạt động hay không.
Bật UFW
Nếu bạn nhận được thông báo Status: inactive
khi chạy ufw status
, điều đó có nghĩa là tường lửa chưa được kích hoạt trên hệ thống. Bạn sẽ cần chạy một lệnh để kích hoạt nó.
Theo mặc định, khi được bật UFW sẽ chặn truy cập bên ngoài vào tất cả các cổng trên máy chủ. Trên thực tế, điều đó có nghĩa là nếu bạn được kết nối với máy chủ qua SSH và bật ufwtrước khi cho phép truy cập qua cổng SSH, bạn sẽ bị ngắt kết nối.
Để bật UFW trên hệ thống của bạn, hãy chạy:
sudo ufw enable
Bạn sẽ thấy đầu ra như thế này:
Firewall is active and enabled on system startup
Để xem những gì hiện bị chặn hoặc được phép, bạn có thể sử dụng tham số verbose
khi chạy ufw status
, như sau:
sudo ufw status
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Tắt UFW
Nếu vì lý do nào đó bạn cần tắt UFW, bạn có thể làm như vậy bằng lệnh sau:
sudo ufw disable
Lưu ý rằng lệnh này sẽ vô hiệu hóa hoàn toàn dịch vụ tường lửa trên hệ thống của bạn.
Chặn địa chỉ IP
Để chặn tất cả các kết nối mạng bắt nguồn từ một địa chỉ IP cụ thể, hãy chạy lệnh sau, thay thế địa chỉ IP được đánh dấu bằng địa chỉ IP mà bạn muốn chặn:
sudo ufw deny from 203.0.113.100
Rule added
Trong ví dụ này, from 203.0.113.100
chỉ định địa chỉ IP nguồn là “203.0.113.100”.
Nếu bạn chạy sudo ufw status
ngay bây giờ, bạn sẽ thấy địa chỉ IP được chỉ định được liệt kê là bị từ chối:
Output
Status: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
Tất cả các kết nối, đi vào hoặc đi ra, đều bị chặn đối với địa chỉ IP được chỉ định.
Chặn mạng con
Nếu bạn cần chặn một mạng con đầy đủ, bạn có thể sử dụng địa chỉ mạng con làm tham số from
trên lệnh ufw deny
. Lệnh sau sẽ chặn tất cả các địa chỉ IP trong mạng con mẫu 203.0.113.0/24
:
sudo ufw deny from 203.0.113.0/24
Output
Rule added
Chặn các kết nối đến với giao diện mạng
Để chặn các kết nối đến từ một địa chỉ IP cụ thể đến một giao diện mạng cụ thể, hãy chạy lệnh sau, thay thế địa chỉ IP được đánh dấu bằng địa chỉ IP bạn muốn chặn:
sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added
Tham số in
cho biết ufw
chỉ áp dụng quy tắc cho các kết nối đến và tham số on eth0
chỉ định rằng quy tắc chỉ áp dụng cho giao diện eth0
. Điều này có thể hữu ích nếu bạn có một hệ thống có nhiều giao diện mạng (bao gồm cả giao diện ảo) và bạn cần chặn quyền truy cập từ bên ngoài vào một số giao diện này, nhưng không phải tất cả.
Cho phép địa chỉ IP
Để cho phép tất cả các kết nối mạng bắt nguồn từ một địa chỉ IP cụ thể, hãy chạy lệnh sau, thay thế địa chỉ IP được đánh dấu bằng địa chỉ IP mà bạn muốn cho phép truy cập:
sudo ufw allow from 203.0.113.101
Nếu bạn chạy sudo ufw status
ngay bây giờ, bạn sẽ thấy đầu ra tương tự như thế này, hiển thị từ ALLOW
bên cạnh địa chỉ IP bạn vừa thêm.
Output
Status: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
Bạn cũng có thể cho phép các kết nối từ toàn bộ mạng con bằng cách cung cấp mặt nạ mạng con tương ứng cho một máy chủ, chẳng hạn như 203.0.113.0/24
.
Cho phép kết nối đến với giao diện mạng
Để cho phép các kết nối đến từ một địa chỉ IP cụ thể đến một giao diện mạng cụ thể, hãy chạy lệnh sau, thay thế địa chỉ IP được đánh dấu bằng địa chỉ IP bạn muốn cho phép:
sudo ufw allow in on eth0 from 203.0.113.102
Tham số in
cho biết ufw
chỉ áp dụng quy tắc cho các kết nối đến và tham số on eth0
chỉ định rằng quy tắc chỉ áp dụng cho giao diện eth0
.
Nếu bạn chạy sudo ufw status
ngay bây giờ, bạn sẽ thấy đầu ra tương tự như sau:
Output
Status: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Xóa quy tắc UFW
Để xóa quy tắc mà bạn đã thiết lập trước đó trong UFW, hãy sử dụng ufw delete
đã được phép bới quy tắc ( allow
hoặc deny
) và theo sau là đặc tả mục tiêu. Ví dụ sau sẽ xóa một quy tắc đã đặt trước đó để cho phép tất cả các kết nối từ địa chỉ IP của 203.0.113.101
:
sudo ufw delete allow from 203.0.113.101
Output
Rule deleted
Một cách khác để chỉ định quy tắc bạn muốn xóa là cung cấp ID quy tắc. Thông tin này có thể được lấy bằng lệnh sau:
sudo ufw status numbered
Output
Status: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
Từ output ở trên bạn có thể thấy rằng có hai quy tắc hoạt động. Quy tắc đầu tiên, với các giá trị được đánh dấu, sẽ từ chối tất cả các kết nối đến từ địa chỉ IP 203.0.113.100
. Quy tắc thứ hai cho phép các kết nối trên giao diện eth0
đến từ địa chỉ IP 203.0.113.102
.
Bởi vì theo mặc định, UFW đã chặn tất cả các truy cập bên ngoài trừ khi được cho phép một cách rõ ràng, quy tắc đầu tiên là dư thừa, vì vậy bạn có thể xóa nó. Để xóa một quy tắc theo ID của nó, hãy chạy:
sudo ufw delete 1
Bạn sẽ được nhắc xác nhận thao tác và đảm bảo rằng ID bạn đang cung cấp đề cập đến quy tắc chính xác mà bạn muốn xóa.
Output
Deleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
Nếu liệt kê lại các quy tắc với sudo ufw status
, bạn sẽ thấy rằng quy tắc đã bị xóa.
Liệt kê các Hồ sơ Ứng dụng Có sẵn
Sau khi cài đặt, các ứng dụng dựa vào giao tiếp mạng thường sẽ thiết lập một cấu hình UFW mà bạn có thể sử dụng để cho phép kết nối từ các địa chỉ bên ngoài. Điều này thường giống như chạy ufw allow from
, với lợi thế là cung cấp một phím tắt tóm tắt các số cổng cụ thể mà dịch vụ sử dụng và cung cấp danh pháp thân thiện với người dùng cho các dịch vụ được tham chiếu.
Để liệt kê những cấu hình nào hiện có sẵn, hãy chạy như sau:
sudo ufw app list
Nếu bạn đã cài đặt một dịch vụ chẳng hạn như máy chủ web hoặc phần mềm phụ thuộc vào mạng khác và cấu hình không khả dụng trong UFW, trước tiên hãy đảm bảo rằng dịch vụ đã được bật. Đối với các máy chủ từ xa, bạn thường có sẵn OpenSSH:
Output
Available applications:
OpenSSH
Bật hồ sơ ứng dụng
Để kích hoạt cấu hình ứng dụng UFW, hãy chạy ufw allow
theo sau là tên của cấu hình ứng dụng bạn muốn kích hoạt, bạn có thể lấy tên này bằng một lệnh sudo ufw app list
. Trong ví dụ sau, chúng ta đang bật cấu hình OpenSSH, cấu hình này sẽ cho phép tất cả các kết nối SSH đến trên cổng SSH mặc định.
sudo ufw allow “OpenSSH”
Output
Rule added
Rule added (v6)
Hãy nhớ trích dẫn tên hồ sơ bao gồm nhiều từ, chẳng hạn như Nginx HTTPS
.
Tắt hồ sơ ứng dụng
Để tắt cấu hình ứng dụng mà bạn đã thiết lập trước đó trong UFW, bạn cần xóa quy tắc tương ứng của nó. Ví dụ, hãy xem xét kết quả đầu ra sau đây từ sudo ufw status
:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Output này cho biết rằng hồ sơ ứng dụng Nginx Full
hiện đang được bật, cho phép bất kỳ và tất cả các kết nối đến máy chủ web qua HTTP cũng như qua HTTPS. Nếu bạn muốn chỉ cho phép các yêu cầu HTTPS từ và đến máy chủ web của mình, trước tiên bạn phải bật quy tắc hạn chế nhất, trong trường hợp này sẽ là Nginx HTTPS
, sau đó tắt quy tắc Nginx Full
hiện đang hoạt động:
sudo ufw allow "Nginx HTTPS" sudo ufw delete allow "Nginx Full"
Hãy nhớ rằng bạn có thể liệt kê tất cả các cấu hình ứng dụng có sẵn với sudo ufw app list
.
Cho phép SSH
Khi làm việc với máy chủ từ xa, bạn sẽ muốn đảm bảo rằng cổng SSH mở cho các kết nối để bạn có thể đăng nhập vào máy chủ của mình từ xa.
Lệnh sau sẽ kích hoạt cấu hình ứng dụng OpenSSH UFW và cho phép tất cả các kết nối đến cổng SSH mặc định trên máy chủ:
sudo ufw allow OpenSSH
Output
Rule added
Rule added (v6)
Mặc dù ít thân thiện với người dùng hơn, một cú pháp thay thế là chỉ định số cổng chính xác của dịch vụ SSH, thường được đặt thành 22
theo mặc định:
sudo ufw allow 22
Output
Rule added
Rule added (v6)
Cho phép SSH Đến từ Địa chỉ IP hoặc Mạng con Cụ thể
Để cho phép các kết nối đến từ một địa chỉ IP hoặc mạng con cụ thể, bạn sẽ bao gồm một chỉ thị from
để xác định nguồn của kết nối. Điều này sẽ yêu cầu bạn cũng chỉ định địa chỉ đích với một tham số to
. Để khóa quy tắc này chỉ ở SSH, bạn sẽ giới hạn proto
(protocol - giao thức) tcp
, sau đó sử dụng tham số port
và đặt nó thành 22
, cổng mặc định của SSH.
Lệnh sau sẽ chỉ cho phép các kết nối SSH đến từ địa chỉ IP 203.0.113.103
:
sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Bạn cũng có thể sử dụng địa chỉ mạng con làm tham số from
để cho phép các kết nối SSH đến từ toàn bộ mạng:
sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Cho phép Rsync Đến từ Địa chỉ IP hoặc Mạng con Cụ thể
Chương trình Rsync, chạy trên cổng 873
, có thể được sử dụng để truyền tệp từ máy tính này sang máy tính khác.
Để cho phép các rsync
kết nối đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy sử dụng tham số from
để chỉ định địa chỉ IP nguồn và tham số port
để đặt cổng đích 873
. Lệnh sau sẽ chỉ cho phép các kết nối Rsync đến từ địa chỉ IP 203.0.113.103
:
sudo ufw allow from 203.0.113.103 to any port 873
Để cho phép toàn bộ mạng con 203.0.113.0/24
có thể truy cập rsync
vào máy chủ của bạn, hãy chạy:
sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added
Cho phép Nginx HTTP / HTTPS
Sau khi cài đặt, máy chủ web Nginx thiết lập một số cấu hình UFW khác nhau trong máy chủ. Sau khi bạn đã cài đặt và bật Nginx làm dịch vụ, hãy chạy lệnh sau để xác định cấu hình nào khả dụng:
sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS
Để bật cả lưu lượng HTTP và HTTPS, hãy chọn Nginx Full
. Nếu không, hãy chọn Nginx HTTP
chỉ cho phép HTTP hoặc Nginx HTTPS
chỉ cho phép HTTPS.
Lệnh sau sẽ cho phép cả lưu lượng HTTP và HTTPS trên máy chủ (cổng 80
và 443
):
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
Cho phép Apache HTTP / HTTPS
Sau khi cài đặt, máy chủ web Apache thiết lập một số cấu hình UFW khác nhau trong máy chủ. Sau khi bạn đã cài đặt và kích hoạt Apache như một dịch vụ, hãy chạy lệnh sau để xác định cấu hình nào khả dụng:
sudo ufw app list | grep Apache
Output
Apache
Apache Full
Apache Secure
Để bật cả lưu lượng HTTP và HTTPS, hãy chọn Apache Full
. Nếu không, hãy chọn Apache
cho HTTP hoặc Apache Secure
cho HTTPS.
Lệnh sau sẽ cho phép cả lưu lượng HTTP và HTTPS trên máy chủ (cổng 80
và 443
):
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
Cho phép tất cả HTTP đến (cổng 80
)
Các máy chủ web, chẳng hạn như Apache và Nginx, thường lắng nghe các yêu cầu HTTP trên cổng 80
. Nếu chính sách mặc định của bạn cho lưu lượng đến được đặt thành giảm hoặc từ chối, bạn sẽ cần tạo quy tắc UFW để cho phép truy cập bên ngoài trên cổng 80
. Bạn có thể sử dụng số cổng hoặc tên dịch vụ (http
) làm tham số cho lệnh này.
Để cho phép tất cả các kết nối HTTP (cổng 80
) đến, hãy chạy:
sudo ufw allow http
Output
Rule added
Rule added (v6)
Một cú pháp thay thế là chỉ định số cổng của dịch vụ HTTP:
sudo ufw allow 80
Cho phép tất cả HTTPS đến (cổng 443
)
HTTPS thường chạy trên cổng 443
. Nếu chính sách mặc định của bạn cho lưu lượng đến được đặt thành giảm hoặc từ chối, bạn sẽ cần tạo quy tắc UFW để cho phép truy cập bên ngoài trên cổng 443
. Bạn có thể sử dụng số cổng hoặc tên dịch vụ (https
) làm tham số cho lệnh này.
Để cho phép tất cả các kết nối HTTPS (cổng 443
) đến, hãy chạy:
sudo ufw allow https
Một cú pháp thay thế là chỉ định số cổng của dịch vụ HTTPS:
sudo ufw allow 443
Cho phép tất cả HTTP và HTTPS đến
Nếu bạn muốn cho phép cả lưu lượng HTTP và HTTPS, bạn có thể tạo một quy tắc duy nhất cho phép cả hai cổng. Việc sử dụng này yêu cầu bạn cũng xác định giao thức với proto
tham số, trong trường hợp này nên đặt thành tham số tcp
.
Để cho phép tất cả các kết nối HTTP và HTTPS (cổng 80
và 443
) đến, hãy chạy:
sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added
Rule added (v6)
Cho phép kết nối MySQL từ Địa chỉ IP hoặc Mạng con cụ thể
MySQL lắng nghe các kết nối máy khách trên cổng 3306
. Nếu máy chủ cơ sở dữ liệu MySQL của bạn đang được khách hàng sử dụng trên máy chủ từ xa, bạn sẽ cần tạo quy tắc UFW để cho phép truy cập đó.
Để cho phép các kết nối MySQL đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy sử dụng tham số from
để chỉ định địa chỉ IP nguồn và tham số port
để đặt cổng đích 3306
.
Lệnh sau sẽ cho phép địa chỉ IP 203.0.113.103
kết nối với cổng MySQL của máy chủ:
sudo ufw allow from 203.0.113.103 to any port 3306
Để cho phép toàn bộ mạng con 203.0.113.0/24
có thể kết nối với máy chủ MySQL của bạn, hãy chạy:
sudo ufw allow from 203.0.113.0/24 to any port 3306
Cho phép kết nối PostgreSQL từ Địa chỉ IP hoặc Mạng con cụ thể
PostgreSQL lắng nghe các kết nối máy khách trên cổng 5432
. Nếu máy chủ cơ sở dữ liệu PostgreSQL của bạn đang được khách hàng sử dụng trên máy chủ từ xa, bạn cần đảm bảo cho phép lưu lượng truy cập đó.
Để cho phép các kết nối PostgreSQL đến từ một địa chỉ IP hoặc mạng con cụ thể, hãy chỉ định nguồn với tham số from
và đặt cổng thành 5432
:
sudo ufw allow from 203.0.113.103 to any port 5432
Để cho phép toàn bộ mạng con 203.0.113.0/24
có thể kết nối với máy chủ PostgreSQL của bạn, hãy chạy:
sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added
Chặn thư SMTP đi
Máy chủ thư, chẳng hạn như Sendmail và Postfix, thường sử dụng cổng 25
cho lưu lượng SMTP. Nếu máy chủ của bạn không được gửi thư đi, bạn có thể muốn chặn loại lưu lượng đó. Để chặn các kết nối SMTP đi, hãy chạy:
sudo ufw deny out 25
Output
Rule added
Rule added (v6)
Điều này cấu hình tường lửa của bạn để loại bỏ tất cả lưu lượng đi trên cổng 25
. Nếu bạn cần từ chối các kết nối gửi đi trên một số cổng khác, bạn có thể lặp lại lệnh này và thay thế 25
bằng số cổng bạn muốn chặn.
Phần kết luận
UFW là một công cụ mạnh mẽ có thể cải thiện đáng kể tính bảo mật của các máy chủ của bạn khi được định cấu hình đúng cách. Hướng dẫn tham khảo này bao gồm một số quy tắc UFW phổ biến thường được sử dụng để định cấu hình tường lửa trên Ubuntu.
Hầu hết các lệnh trong hướng dẫn này có thể được điều chỉnh để phù hợp với các trường hợp sử dụng và tình huống khác nhau, bằng cách thay đổi các tham số như địa chỉ IP nguồn và / hoặc cổng đích. Để biết thêm thông tin chi tiết về từng tham số lệnh và các công cụ sửa đổi có sẵn, bạn có thể sử dụng tiện ích man
để kiểm tra hướng dẫn sử dụng của UFW:
man ufw
Trang UFW chính thức trên tài liệu của Ubuntu là một tài nguyên khác mà bạn có thể sử dụng làm tài liệu tham khảo cho các trường hợp và ví dụ sử dụng nâng cao hơn.