Tường lửa là gì, và nó bảo vệ mạng như thế nào?
Máy chủ chạy nhiều dịch vụ, làm sao chỉ mở đúng thứ cần mở?
Giả sử bạn có một máy chủ nối với Internet.
Trên máy đó đang chạy ba dịch vụ:
443 Website
22 SSH
5432 PostgreSQL
Website phải cho mọi người truy cập.
SSH chỉ dành cho người quản trị.
PostgreSQL chỉ cần được chương trình bên trong hệ thống sử dụng.
Nhưng Internet không tự biết điều đó.
Nếu không có lớp bảo vệ nào phía trước, máy ở bên ngoài vẫn có thể thử gửi kết nối tới cả ba cổng.
Làm sao chỉ mở đúng thứ cần mở?
Đó là việc của tường lửa (firewall).
Tường lửa quyết định gói nào được đi qua
Khi một gói tin đi từ Internet tới máy chủ, tường lửa có thể kiểm tra một số thông tin như:
- gói đến từ địa chỉ IP nào;
- nó muốn tới máy nào;
- dùng TCP hay UDP;
- muốn tới cổng nào.
Sau đó tường lửa so những thông tin đó với các quy tắc đã được đặt trước.
Ví dụ:
CHO PHÉP TCP cổng 443 từ Internet
CHẶN TCP cổng 22 từ Internet
CHẶN TCP cổng 5432 từ Internet
Một người mở website:
Internet
|
| TCP :443
v
Tường lửa
|
| cho phép
v
Website
Gói tin được đi tiếp.
Nhưng nếu một máy trên Internet thử kết nối vào PostgreSQL:
Internet
|
| TCP :5432
v
Tường lửa
X
|
Cơ sở dữ liệu
Tường lửa chặn nó trước khi nó tới cơ sở dữ liệu (database).
Cơ sở dữ liệu vẫn đang chạy.
Tường lửa không sửa cơ sở dữ liệu, cũng không làm cơ sở dữ liệu an toàn hơn.
Nó chỉ ngăn những máy không được phép chạm tới cơ sở dữ liệu ngay từ đầu.
Nếu quên viết quy tắc thì sao?
Giả sử ngày mai bạn cài thêm một dịch vụ mới trên cổng 8080.
Nhưng bạn quên cập nhật tường lửa.
Có hai cách xử lý.
Cách thứ nhất:
Nếu không có quy tắc → cho qua
Như vậy dịch vụ mới có thể vô tình bị mở ra Internet.
Cách an toàn hơn là:
Nếu không có quy tắc → chặn

Đây gọi là mặc định chặn (default deny).
Ta chỉ liệt kê những thứ thực sự muốn mở:
CHO PHÉP 443
CHO PHÉP một số kết nối cần thiết
CHẶN mọi thứ còn lại
Nhờ vậy, một dịch vụ mới không tự nhiên xuất hiện trên Internet chỉ vì ai đó vừa bật nó lên.
Vì sao người ta cần cách này?
Internet ban đầu nhỏ hơn rất nhiều và phần lớn kết nối các trường đại học, viện nghiên cứu và cơ quan chính phủ.
Nhiều máy để mở các dịch vụ cho máy khác sử dụng.
Năm 1988, sâu Morris lợi dụng một số dịch vụ và cấu hình như vậy để tự lây từ máy này sang máy khác.
Trong khoảng một ngày, hàng nghìn máy bị ảnh hưởng.
Vấn đề lộ ra rất rõ.
Một tổ chức có thể có hàng nghìn máy. Mỗi máy lại chạy nhiều chương trình mạng khác nhau.
Nếu muốn bảo vệ hệ thống chỉ bằng cách đảm bảo:
mọi chương trình
trên mọi máy
đều không bao giờ có lỗi
thì rất khó.
Nhưng lưu lượng từ Internet thường chỉ đi vào tổ chức qua một số ít điểm.
Vì vậy có thể đặt bộ lọc ngay tại những điểm đó:
Internet
|
v
+-----------+
| Tường lửa |
+-----------+
|
v
Mạng bên trong
| | |
PC Máy chủ Cơ sở dữ liệu
Thay vì để mọi gói tin đi tới từng máy rồi mới xử lý, ta loại bỏ những kết nối không cần thiết từ ngoài cửa.
Đó là ý tưởng cơ bản của tường lửa.
Nhưng máy trong mạng vẫn vào Internet được chứ?
Có.
Giả sử laptop của bạn mở một website.
Laptop chủ động tạo kết nối ra ngoài:
Laptop ------> Website
Website sau đó gửi dữ liệu trả về:
Laptop <------ Website
Tường lửa hiện đại có thể nhớ rằng laptop vừa tạo kết nối này.

Vì vậy khi dữ liệu trả về, nó biết:
Đây là dữ liệu trả lời
cho một kết nối đã được cho phép.
và cho nó đi qua.
Nhưng nếu một máy lạ trên Internet tự nhiên thử mở một kết nối mới vào laptop:
Máy lạ ------> Laptop
tường lửa có thể chặn lại.
Khả năng nhớ các kết nối đang tồn tại này thường được gọi là theo dõi trạng thái kết nối (stateful firewall).
Bạn không cần nhớ tên đó để hiểu ý chính:
máy bên trong có thể chủ động đi ra ngoài và nhận câu trả lời, nhưng máy bên ngoài không vì thế mà được tự do mở kết nối vào trong.
Tường lửa có chặn virus không?
Không phải theo cách phần mềm diệt virus làm.
Giả sử bạn tải một file qua website.
Website dùng HTTPS trên cổng 443.
Tường lửa có quy tắc:
CHO PHÉP TCP cổng 443
Vì vậy dữ liệu của website được đi qua.
Nếu file tải xuống là file độc hại, một tường lửa chỉ lọc theo địa chỉ, giao thức và cổng không thể kết luận:
file này là virus
Nó chỉ biết:
kết nối này được phép đi qua
Đây là hai việc khác nhau.
| Câu hỏi nó trả lời | |
|---|---|
| Tường lửa | Kết nối này có được phép đi qua không? |
| Phần mềm chống mã độc | File hoặc chương trình này có nguy hiểm không? |
Các hệ thống bảo mật hiện đại có thể kiểm tra sâu hơn vào nội dung lưu lượng. Nhưng đó là những chức năng bổ sung.
Ý tưởng cơ bản của tường lửa vẫn rất đơn giản:
Gói tin tới
|
v
Có quy tắc cho phép?
/ \
Có Không
| |
v X
Qua Chặn
Tường lửa không đảm bảo chương trình phía sau không có lỗi.
Nó làm một việc khác:
chỉ cho những kết nối cần thiết tới được chương trình đó.
Vì vậy với máy chủ ban đầu:
443 Website → Internet được vào
22 SSH → Internet bị chặn
5432 PostgreSQL → Internet bị chặn
Máy chủ vẫn chạy cả ba dịch vụ.
Nhưng từ Internet, người ngoài chỉ thấy thứ mà chúng ta chủ động mở ra.
Gói cước 300 Mbps, sao game vẫn giật?
Nguồn bài viết (4)
- Morris Worm · FBI (bản lưu Wayback Machine)
- RFC 1135: The Helminthiasis of the Internet · IETF / RFC Editor, 1989
- Simple and Flexible Datagram Access Controls for Unix-based Gateways (WRL Research Report 89/4) · Digital Equipment Corporation, Western Research Laboratory, 1989 (bản lưu Wayback của HP Labs)
- NIST SP 800-41 Rev. 1 — Guidelines on Firewalls and Firewall Policy · NIST