Bài 10: Firewall và quản lý port Linux

Bài 10: Firewall và quản lý port Linux

Bài này giúp anh hiểu port, service listen, UFW/firewalld và cách mở/đóng truy cập an toàn trên server.

Sau bài này anh sẽ biết:

  • Port là gì và cách kiểm tra port đang mở.
  • Dùng UFW trên Ubuntu/Debian.
  • Dùng firewalld trên Rocky/Alma/RHEL.
  • Tránh tự khóa SSH khi bật firewall.

Chốt ý nhanh

Chủ đề Điểm cần nhớ
Firewall Không phải để chặn cho có, mà để chỉ mở đúng thứ cần mở.
Port Mỗi port mở ra nên gắn với một service và lý do rõ ràng.
An toàn thay đổi Khi sửa rule từ xa, luôn giữ một phiên SSH sống để tránh tự khóa mình.

1. Port là gì?

Port giống “cửa” của service. SSH thường 22, HTTP 80, HTTPS 443, MySQL 3306, PostgreSQL 5432. Không phải port nào cũng nên public ra Internet.

2. Kiểm tra port đang listen

ss -tulpn
sudo ss -tulpn | grep LISTEN

LISTEN nghĩa là service đang chờ kết nối. Cột local address cho biết service bind trên IP nào.

3. Lab với UFW

sudo ufw status verbose
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status numbered

Nếu SSH port không phải 22, phải allow đúng port trước khi enable.

4. Lab với firewalld

sudo firewall-cmd --state
sudo firewall-cmd --list-all
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

5. Tình huống thực tế

Server web chỉ cần public 80/443. SSH nên giới hạn IP quản trị. Database không nên mở public nếu không có lý do rất rõ.
# UFW giới hạn SSH theo IP ví dụ
sudo ufw allow from 1.2.3.4 to any port 22 proto tcp

6. Lỗi thường gặp

  • Bật firewall trước khi allow SSH.
  • Mở database ra public.
  • Service không chạy nhưng tưởng firewall chặn.
  • Firewall mở nhưng cloud security group vẫn chặn.

7. Quy trình debug port không vào được

  1. Service có chạy không: systemctl status.
  2. Port có listen không: ss -tulpn.
  3. Firewall OS có allow không.
  4. Cloud security group có allow không.
  5. DNS có trỏ đúng IP không.

8. Bài tập

  1. Liệt kê các port đang listen trên máy lab.
  2. Xác định service nào dùng port 22/80/443.
  3. Viết rule firewall chỉ mở SSH và HTTP/HTTPS.

Phần thực hành mở rộng: firewall theo tư duy “default deny”

Người mới rất hay mở hết cho nhanh, rồi quên đóng lại. Bài này cần giúp người học hình thành tư duy đúng: chỉ mở đúng cổng cần thiết, đúng nguồn cần thiết, trong đúng thời gian cần thiết.

Lab 1: Nhìn service đang listen trước khi mở firewall

ss -tulpn
sudo lsof -i -P -n | grep LISTEN | head -30

Trước khi viết rule, phải biết máy đang có service nào thật sự lắng nghe.

Lab 2: ufw cơ bản trên Ubuntu

sudo ufw status verbose
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status numbered

Nếu là máy remote, tuyệt đối đừng bật firewall mà chưa allow SSH trước.

Lab 3: firewalld cơ bản trên Rocky/Alma

sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Lab 4: Kiểm tra từ bên trong và bên ngoài

ss -tulpn | grep -E ':22|:80|:443'
curl -I http://127.0.0.1
nc -vz 127.0.0.1 22

Nếu có một máy khác trong lab, hãy test từ ngoài vào để thấy sự khác nhau giữa service listen và firewall cho phép.

Lab 5: Mở port theo IP nguồn

Nếu công cụ hỗ trợ, hãy tập thói quen chỉ cho IP quản trị đi vào SSH thay vì mở toàn Internet. Đây là một thay đổi nhỏ nhưng giá trị bảo mật rất lớn.

Tình huống thực tế

Một web server chỉ cần mở 80/443 cho công chúng, còn SSH nên giới hạn tối đa. Database như MySQL/PostgreSQL thường không nên mở public nếu app và DB ở cùng mạng riêng.

Lỗi phổ biến

  • Mở port trên firewall nhưng service chưa listen.
  • Service listen đúng nhưng quên mở firewall/security group.
  • Xóa rule SSH khi đang quản trị từ xa.
  • Mở cả dải port rộng mà không có lý do rõ ràng.

Kết bài

Firewall là lớp rất cơ bản nhưng cực kỳ quan trọng của vận hành server. Nếu anh nắm chắc bài này, anh sẽ bắt đầu có thói quen nhìn hạ tầng theo hướng “cái gì thực sự cần public, cái gì phải giữ kín”. Bài tiếp theo sẽ mở rộng từ port sang lớp mạng và DNS, tức là cách dữ liệu thực sự đi qua hệ thống.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *