Vì sao cần chặn mọi port trừ 22, 80, 443 ngay?
VPS của bạn đang mở toang cửa đón khách không mời? Mặc định, nhiều nhà cung cấp VPS sẽ mở gần như tất cả các cổng (port) trên máy chủ của bạn. Điều này tạo ra một bề mặt tấn công lớn, khiến VPS dễ bị khai thác bởi hacker.
- 🚪 Cổng mở bừa bãi: Kẻ xấu dễ dàng dò quét và tìm ra các dịch vụ không cần thiết đang chạy.
- 🛡️ Rủi ro bảo mật: Các dịch vụ không được bảo vệ có thể chứa lỗ hổng, là cửa ngõ cho mã độc.
- ⚙️ Quản lý phức tạp: Theo dõi và bảo mật từng dịch vụ chạy trên các cổng khác nhau là rất khó khăn.
- 🔒 Tập trung bảo mật: Chỉ mở những cổng thực sự cần thiết giúp giảm thiểu rủi ro.
- 🚀 Tăng hiệu suất: Giảm tải cho hệ thống bằng cách chặn các kết nối không mong muốn.
1. Hiểu về UFW — Tường lửa đơn giản cho người mới
Tóm gọn: UFW (Uncomplicated Firewall) là công cụ quản lý tường lửa trên Linux, được thiết kế để dễ sử dụng, đặc biệt phù hợp cho người mới bắt đầu. Nó là một giao diện đơn giản hóa cho iptables, giúp bạn kiểm soát lưu lượng mạng vào/ra máy chủ một cách hiệu quả.
1.1. Cài đặt UFW
UFW thường đã được cài đặt sẵn trên các bản phân phối Ubuntu. Nếu chưa có, bạn có thể cài đặt dễ dàng bằng lệnh sau:
sudo apt update
sudo apt install ufw
sudo apt update: Lệnh này cập nhật danh sách các gói phần mềm có sẵn từ kho lưu trữ.sudo apt install ufw: Lệnh này cài đặt gói UFW lên hệ thống của bạn.
1.2. Kiểm tra trạng thái UFW
Sau khi cài đặt, bạn nên kiểm tra xem UFW đã hoạt động chưa và trạng thái hiện tại của nó.
sudo ufw status
Output mẫu khi UFW chưa được kích hoạt:
Status: inactive
💡 Mẹo: Khi UFW ở trạng thái
inactive, nó không thực hiện bất kỳ hành động chặn hay cho phép nào.
1.3. Kích hoạt UFW
Để bắt đầu sử dụng UFW, bạn cần kích hoạt nó. Quan trọng: Trước khi kích hoạt, hãy đảm bảo bạn đã cho phép các quy tắc cần thiết (như SSH) để tránh bị khóa khỏi máy chủ.
sudo ufw enable
Output mẫu sau khi kích hoạt:
Command may disrupt existing ssh connections. Proceed with the operation (y|n)? y
Firewall is active and enabled on system startup
Command may disrupt existing ssh connections. Proceed with the operation (y|n)? y: UFW cảnh báo bạn rằng việc kích hoạt có thể làm gián đoạn kết nối SSH hiện tại. Bạn cần nhậpyđể xác nhận.Firewall is active and enabled on system startup: Thông báo UFW đã được kích hoạt và sẽ tự động chạy mỗi khi hệ thống khởi động.
⚠️ Cảnh báo: Luôn luôn cho phép cổng SSH (mặc định là 22) trước khi kích hoạt UFW, nếu không bạn sẽ mất kết nối đến VPS.
2. Cấu hình các quy tắc cơ bản với UFW
Tóm gọn: UFW cho phép bạn định nghĩa các quy tắc rõ ràng để kiểm soát lưu lượng mạng, bao gồm việc cho phép hoặc từ chối các kết nối dựa trên cổng, địa chỉ IP, hoặc giao thức.
2.1. Thiết lập chính sách mặc định
Chính sách mặc định là bước quan trọng để đảm bảo an toàn. Chúng ta sẽ thiết lập để 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.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny incoming: Quy tắc này thiết lập chính sách mặc định là từ chối mọi kết nối đến máy chủ của bạn.sudo ufw default allow outgoing: Quy tắc này cho phép máy chủ của bạn chủ động kết nối ra bên ngoài (ví dụ: để tải cập nhật, truy cập API).
2.2. Cho phép cổng SSH (Port 22)
Đây là quy tắc quan trọng nhất để bạn không bị khóa khỏi VPS. Cổng SSH mặc định là 22.
sudo ufw allow 22/tcp
sudo ufw allow 22/tcp: Lệnh này cho phép tất cả các kết nối đến cổng 22 sử dụng giao thức TCP./tcp: Chỉ định giao thức TCP. SSH sử dụng TCP.
2.3. Cho phép cổng HTTP (Port 80) và HTTPS (Port 443)
Nếu bạn đang chạy một web server (như Nginx, Apache), bạn cần cho phép các cổng này để người dùng có thể truy cập website của bạn.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp: Cho phép truy cập HTTP.sudo ufw allow 443/tcp: Cho phép truy cập HTTPS (kết nối mã hóa).
💡 Mẹo: Bạn có thể sử dụng tên dịch vụ thay cho số cổng nếu chúng được định nghĩa trong file
/etc/services. Ví dụ:sudo ufw allow http/tcpvàsudo ufw allow https/tcp.
2.4. Xem lại các quy tắc đã thiết lập
Sau khi thêm các quy tắc, bạn nên kiểm tra lại để đảm bảo chúng đã được áp dụng đúng.
sudo ufw status numbered
Output mẫu:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6)
Status: active: Cho biết UFW đang hoạt động.ALLOW IN: Các quy tắc cho phép lưu lượng truy cập vào máy chủ.Anywhere: Cho phép kết nối từ bất kỳ địa chỉ IP nào.(v6): Các quy tắc tương ứng cho địa chỉ IPv6.
3. Tinh chỉnh nâng cao với UFW
Tóm gọn: UFW cung cấp các tùy chọn mạnh mẽ hơn để kiểm soát truy cập, cho phép bạn giới hạn kết nối dựa trên địa chỉ IP nguồn hoặc cấu hình các ứng dụng cụ thể.
3.1. Cho phép cổng từ một địa chỉ IP cụ thể
Trong một số trường hợp, bạn chỉ muốn cho phép truy cập vào một cổng nhất định từ một địa chỉ IP đáng tin cậy. Ví dụ, cho phép truy cập SSH chỉ từ IP văn phòng của bạn.
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
from 192.168.1.100: Chỉ định địa chỉ IP nguồn được phép.to any port 22: Chỉ định đích đến là cổng 22 trên máy chủ của bạn.proto tcp: Chỉ định giao thức TCP.
3.2. Từ chối kết nối đến một cổng cụ thể
Nếu bạn muốn chặn hoàn toàn một cổng không sử dụng, bạn có thể thêm quy tắc từ chối.
sudo ufw deny 1234/tcp
sudo ufw deny 1234/tcp: Lệnh này sẽ chặn mọi kết nối đến cổng 1234 trên máy chủ của bạn.
3.3. Quản lý các ứng dụng với UFW
UFW có thể hiểu các cấu hình ứng dụng được định nghĩa trong file /etc/ufw/applications.d/. Điều này giúp việc quản lý quy tắc cho các dịch vụ phổ biến trở nên dễ dàng hơn.
Ví dụ, nếu bạn cài đặt Nginx, có thể có một cấu hình sẵn:
sudo ufw app list
Output mẫu:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Postfix
Postfix SMTPS
Postfix Submission
Samba
Sip
Bạn có thể cho phép một ứng dụng bằng tên của nó:
sudo ufw allow 'OpenSSH'
sudo ufw allow 'Apache' # Nếu bạn dùng Apache
sudo ufw allow 'OpenSSH': Tương đương vớisudo ufw allow 22/tcp.sudo ufw allow 'Apache': Cho phép cổng 80 (HTTP).sudo ufw allow 'Apache Full': Cho phép cả cổng 80 và 443.
3.4. Xóa quy tắc
Nếu bạn cần xóa một quy tắc, bạn có thể sử dụng ufw delete cùng với số thứ tự của quy tắc (lấy từ ufw status numbered) hoặc chính xác lệnh quy tắc đó.
Xóa theo số thứ tự:
sudo ufw delete 1
Xóa theo lệnh quy tắc:
sudo ufw delete allow 80/tcp
sudo ufw delete 1: Xóa quy tắc có số thứ tự là 1.sudo ufw delete allow 80/tcp: Xóa quy tắc cho phép cổng 80/tcp.
⚠️ Cảnh báo: Hãy cẩn thận khi xóa quy tắc, đặc biệt là quy tắc SSH. Đảm bảo bạn không xóa nhầm quy tắc cho phép truy cập SSH.
4. UFW và Docker
Tóm gọn: Khi sử dụng Docker, các container có thể tự động tạo ra các quy tắc tường lửa riêng, đôi khi xung đột hoặc ghi đè lên quy tắc UFW của hệ thống. Cần có sự phối hợp để UFW hoạt động đúng với Docker.
4.1. Vấn đề khi UFW và Docker cùng tồn tại
Docker mặc định sử dụng iptables để quản lý mạng cho các container. Khi UFW cũng sử dụng iptables (thông qua netfilter), có thể xảy ra xung đột. Docker có thể thiết lập các quy tắc iptables với độ ưu tiên cao hơn, khiến UFW không kiểm soát được lưu lượng ra/vào container.
4.2. Cấu hình UFW để hoạt động với Docker
Để UFW có thể quản lý các cổng mà Docker expose, bạn cần chỉnh sửa file cấu hình UFW.
Mở file cấu hình UFW:
sudo nano /etc/default/ufw
Tìm dòng DEFAULT_FORWARD_POLICY và thay đổi giá trị thành ACCEPT:
#
# By default, all incoming traffic is denied and all outgoing traffic is allowed.
#
DEFAULT_FORWARD_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="ACCEPT": Thay đổi này cho phép UFW xử lý các gói tin được chuyển tiếp (forwarded), điều này cần thiết cho Docker hoạt động đúng cách.
Sau khi thay đổi, lưu file và thoát (Ctrl+X, Y, Enter). Sau đó, khởi động lại UFW:
sudo ufw disable
sudo ufw enable
4.3. Cho phép các cổng Docker expose
Bây giờ bạn có thể thêm các quy tắc UFW cho các cổng mà container Docker của bạn sử dụng. Ví dụ, nếu bạn có một container chạy web server trên cổng 8080 của host:
sudo ufw allow 8080/tcp
Sau đó, bạn cần đảm bảo Docker đã cấu hình để expose cổng này ra host.
💡 Mẹo: Nếu bạn chỉ muốn cho phép truy cập vào cổng Docker từ một dải IP nhất định, bạn có thể sử dụng lệnh
sudo ufw allow from <IP_RANGE> to any port <DOCKER_PORT>.
5. Pitfalls & lỗi thường gặp
Tóm gọn: Việc cấu hình tường lửa đôi khi gặp phải những sai lầm phổ biến, dẫn đến mất kết nối hoặc các lỗ hổng bảo mật không mong muốn.
- Bị khóa SSH: Đây là lỗi phổ biến nhất khi quên hoặc xóa nhầm quy tắc cho phép cổng 22/tcp trước khi kích hoạt UFW hoặc sau khi reset cấu hình.
- Cách fix: Nếu bạn bị khóa, bạn cần truy cập vào giao diện quản lý máy chủ của nhà cung cấp VPS (thường có console hoặc VNC), đăng nhập và chạy lại lệnh
sudo ufw allow 22/tcprồisudo ufw enable.
- Cách fix: Nếu bạn bị khóa, bạn cần truy cập vào giao diện quản lý máy chủ của nhà cung cấp VPS (thường có console hoặc VNC), đăng nhập và chạy lại lệnh
- Quên cho phép cổng dịch vụ: Sau khi cài đặt một dịch vụ mới (web server, database), bạn quên thêm quy tắc UFW cho phép cổng tương ứng.
- Cách fix: Xác định cổng mà dịch vụ đang chạy (thường có trong tài liệu của dịch vụ hoặc file cấu hình), sau đó thêm quy tắc
sudo ufw allow <PORT>/<PROTOCOL>. Ví dụ:sudo ufw allow 3306/tcpcho MySQL.
- Cách fix: Xác định cổng mà dịch vụ đang chạy (thường có trong tài liệu của dịch vụ hoặc file cấu hình), sau đó thêm quy tắc
- Cấu hình UFW xung đột với Docker: Như đã đề cập ở trên, Docker có thể tự quản lý
iptables, làm UFW không hoạt động như mong đợi.- Cách fix: Chỉnh sửa
/etc/default/ufwđểDEFAULT_FORWARD_POLICY="ACCEPT"và khởi động lại UFW. Sau đó, quản lý các cổng Docker thông qua UFW.
- Cách fix: Chỉnh sửa
- Sử dụng
ufw denythay vìufw allowcho các cổng cần thiết: Nhầm lẫn giữa hai lệnh này có thể dẫn đến việc chặn nhầm các dịch vụ quan trọng.- Cách fix: Kiểm tra kỹ các quy tắc bằng
sudo ufw status numberedtrước khi thực hiện các thay đổi lớn. Xóa quy tắc sai và thêm quy tắc đúng.
- Cách fix: Kiểm tra kỹ các quy tắc bằng
- Chỉ cấu hình cho IPv4 mà quên IPv6: Nếu máy chủ của bạn có địa chỉ IPv6, các quy tắc chỉ áp dụng cho IPv4 sẽ không bảo vệ đầy đủ.
- Cách fix: UFW tự động áp dụng quy tắc cho cả IPv4 và IPv6 nếu được bật trong file
/etc/default/ufw(IPV6=yes). Tuy nhiên, bạn có thể chỉ định rõ ràng hơn nếu cần, ví dụ:sudo ufw allow 80/tcpsẽ áp dụng cho cả hai. Để kiểm tra quy tắc IPv6, dùngsudo ufw status verbose.
- Cách fix: UFW tự động áp dụng quy tắc cho cả IPv4 và IPv6 nếu được bật trong file
6. Key takeaways
- UFW là công cụ tường lửa mạnh mẽ và dễ sử dụng cho người mới bắt đầu trên Linux.
- Luôn thiết lập chính sách mặc định là
deny incomingvàallow outgoingđể tăng cường bảo mật. - Bắt buộc phải cho phép cổng SSH (22/tcp) trước khi kích hoạt UFW để tránh bị khóa khỏi máy chủ.
- Chỉ mở các cổng cần thiết cho dịch vụ của bạn (ví dụ: 80/tcp cho HTTP, 443/tcp cho HTTPS).
- Hiểu cách UFW tương tác với Docker và cấu hình phù hợp để tránh xung đột.
7. FAQ
H3: UFW có miễn phí không?
Có, UFW là một phần của hệ điều hành Linux và hoàn toàn miễn phí để sử dụng.
H3: Tôi có thể dùng UFW trên các bản phân phối Linux khác ngoài Ubuntu không?
UFW chủ yếu được phát triển cho Ubuntu và các bản phân phối dựa trên Debian. Tuy nhiên, bạn có thể tìm thấy các công cụ tương tự hoặc cài đặt UFW trên các hệ thống khác, nhưng cách thức có thể khác biệt.
H3: Tôi nên mở cổng nào khác ngoài 22, 80, 443?
Điều này phụ thuộc hoàn toàn vào các dịch vụ bạn đang chạy. Ví dụ:
* MySQL: 3306/tcp
* PostgreSQL: 5432/tcp
* FTP: 21/tcp (nên cân nhắc dùng SFTP thay thế)
* Mail (SMTP, POP3, IMAP): 25/tcp, 110/tcp, 143/tcp, 587/tcp, 993/ssl, 995/ssl.
H3: Làm thế nào để biết UFW có đang chạy không?
Sử dụng lệnh sudo ufw status. Nếu kết quả hiển thị Status: active, tức là UFW đang chạy.
H3: Tôi có thể cấu hình UFW để chỉ cho phép một số IP cụ thể truy cập vào tất cả các cổng không?
Có, bạn có thể tạo một quy tắc cho phép toàn bộ dải IP của bạn truy cập vào máy chủ, sau đó áp dụng các quy tắc chi tiết hơn. Tuy nhiên, cách tiếp cận tốt nhất là chỉ cho phép các cổng cần thiết.
H3: UFW có bảo vệ tôi khỏi các cuộc tấn công DDoS không?
UFW chủ yếu là một tường lửa stateless/stateful ở lớp mạng (layer 3/4), giúp kiểm soát truy cập cổng. Nó không cung cấp khả năng bảo vệ toàn diện chống lại các cuộc tấn công DDoS phức tạp, vốn yêu cầu các giải pháp chuyên dụng hơn.
8. Cần VPS chạy UFW?
Bảo mật VPS là ưu tiên hàng đầu, và UFW là một công cụ tuyệt vời để bắt đầu. Nếu bạn đang tìm kiếm một máy chủ mạnh mẽ, ổn định và dễ dàng quản lý để triển khai các dịch vụ của mình, hãy khám phá các gói VPS tại vsis.net/vps. Chúng tôi cung cấp hạ tầng tin cậy để bạn yên tâm xây dựng và phát triển.



