Trong thời đại công nghệ số, bảo mật mạng máy chủ là yếu tố sống còn đối với bất kỳ hệ thống nào. Một trong những mối đe dọa phổ biến hiện nay là các gói tin không hợp lệ (Invalid Packets), gây ra nguy cơ tấn công từ chối dịch vụ (DoS), làm chậm hệ thống hoặc thậm chí chiếm quyền kiểm soát máy chủ.
UFW (Uncomplicated Firewall) là công cụ tường lửa đơn giản nhưng mạnh mẽ trên hệ điều hành Ubuntu và nhiều bản phân phối Linux khác, giúp quản lý và bảo vệ hệ thống trước những rủi ro từ Internet. Việc chặn Invalid Packets bằng UFW không chỉ giúp giảm thiểu nguy cơ bị tấn công mà còn đảm bảo hiệu suất hoạt động ổn định cho server.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết cách cấu hình UFW để ngăn chặn các gói tin không hợp lệ, giúp tăng cường lớp bảo vệ và duy trì an toàn cho hệ thống mạng của bạn. Cùng khám phá các bước thực hiện đơn giản, hiệu quả, phù hợp cho cả người mới bắt đầu lẫn quản trị viên giàu kinh nghiệm.

Cách UFW chặn các gói tin không hợp lệ
Nếu bạn xem file /etc/ufw/before.rules, bạn sẽ thấy hai dòng quy tắc sau:
# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
Hai quy tắc này sẽ ghi log và chặn bất kỳ gói tin nào bị coi là INVALID, và chúng được UFW thêm mặc định.
UFW sử dụng module conntrack (connection tracking) để theo dõi các kết nối liên quan đến trạng thái kết nối INVALID.
Tôi sẽ minh họa bằng cách dùng Nmap chạy một XMAS scan từ MacBook của tôi nhắm vào một server đã bật UFW, và đang có rule cho phép truy cập SSH:
nmap -sX 165.22.65.229
Kết quả:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-30 11:14 UTC
Nmap scan report for 165.22.65.229
Host is up (0.0016s latency).
All 1000 scanned ports on 165.22.65.229 are open|filtered
Nmap done: 1 IP address (1 host up) scanned in 27.22 seconds
Mặc định, Nmap chỉ quét 1.000 cổng phổ biến nhất. XMAS scan gửi các gói tin không hợp lệ với các cờ FIN, PSH và URG.
Như bạn thấy, UFW đã chặn thành công kiểu quét này, khiến Nmap không xác định được cổng 22 đang mở.
Thông báo của Nmap: All 1000 scanned ports on 165.22.65.229 are open|filtered nghĩa là quá trình quét không thành công.
Bây giờ, hãy thử chạy một Window scan, kiểu này sử dụng nhiều gói ACK:
nmap -sW 165.22.65.229
Quét này sẽ cho thấy cổng 22 là open hoặc filtered, nghĩa là UFW chưa chặn được kiểu quét này.
Chặn các gói tin không hợp lệ đúng cách
Để tăng cường bảo mật cho máy chủ, ta có thể thêm hai quy tắc để log và chặn bất kỳ kết nối mới nào không chỉ có cờ SYN.
Thêm hai quy tắc sau vào dưới các quy tắc mặc định của UFW:
-A ufw-before-input -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ufw-logging-deny
-A ufw-before-input -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j DROP
Đừng quên thêm vào file before6.rules (với IPv6):
-A ufw6-before-input -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ufw6-logging-deny
-A ufw6-before-input -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j DROP
Bây giờ, reload UFW:
sudo ufw reload
Các quy tắc này giúp chặn các gói tin không hợp lệ và có thể độc hại:
- Quy tắc đầu tiên loại bỏ bất kỳ gói nào bị coi là
INVALIDbởi moduleconntrack. - Quy tắc thứ hai chặn các gói TCP được đánh dấu là NEW (kết nối mới) nhưng không chỉ có cờ SYN.
Bây giờ, thử chạy lại Window scan:
nmap -sW 165.22.65.229
Kết quả:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-30 13:12 UTC
Nmap scan report for 165.22.65.229
Host is up (0.0017s latency).
All 1000 scanned ports on 165.22.65.229 are filtered
Nmap done: 1 IP address (1 host up) scanned in 21.08 seconds
Rất tốt, UFW đã chặn hiệu quả kiểu quét này, ngăn Nmap xác định cổng 22 mở.
Chuỗi PREROUTING
Còn một cách nữa để nâng cao khả năng chặn các gói tin không hợp lệ của UFW, đó là sử dụng chuỗi PREROUTING thay vì chuỗi INPUT.
Nếu giữ nguyên hiện tại, các gói tin không hợp lệ sẽ đi qua toàn bộ chuỗi INPUT trước khi bị chặn bởi các rule của chúng ta.
Tuy nhiên, với chuỗi PREROUTING, chúng ta có thể chặn ngay từ đầu trước khi nó đến các chuỗi OUTPUT, FORWARD hoặc INPUT. Như vậy sẽ tối ưu hiệu suất firewall.
Vì bảng filter không có chuỗi PREROUTING, nên ta cần dùng chuỗi PREROUTING của bảng mangle.
Thêm các dòng sau vào cuối file before.rules và before6.rules, ngay sau dòng COMMIT cuối cùng:
*mangle
:PREROUTING ACCEPT [0:0]
-A PREROUTING -m conntrack --ctstate INVALID -j DROP
-A PREROUTING -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j DROP
COMMIT
Reload lại UFW:
sudo ufw reload
Bảng mangle được dùng để thay đổi đặc điểm của gói tin hoặc áp dụng lọc đặc biệt, rất phù hợp để loại bỏ các gói không đáp ứng yêu cầu kết nối bình thường.
Chuỗi PREROUTING là một trong những chuỗi đầu tiên mà các gói tin đi qua ngay khi đến máy chủ. Bằng cách áp dụng rule ở đây, ta có thể chặn các gói không hợp lệ ngay lập tức trước khi chúng đến phần còn lại của firewall.
Việc này giúp giảm tải cho firewall và đảm bảo chỉ có lưu lượng hợp lệ mới được xử lý tiếp.
Kết luận
Việc sử dụng UFW để chặn các gói tin không hợp lệ là bước quan trọng giúp tăng cường bảo mật cho máy chủ Linux. Qua việc cấu hình đúng các quy tắc trong file before.rules và before6.rules, bạn có thể ngăn chặn hiệu quả các kiểu tấn công mạng dựa trên gói tin bất thường như XMAS scan hay Window scan. Ngoài ra, việc áp dụng các quy tắc chặn ở chuỗi PREROUTING của bảng mangle giúp xử lý lưu lượng ngay từ lúc đầu, giảm tải cho firewall và nâng cao hiệu suất bảo vệ hệ thống.
Đặc biệt, việc ghi log các gói bị chặn giúp quản trị viên dễ dàng theo dõi và phân tích các mối đe dọa tiềm ẩn. Khi bạn thực hiện đúng các bước này, UFW không chỉ giúp bảo vệ cổng SSH mà còn tăng cường an toàn cho toàn bộ hệ thống mạng. Đây là giải pháp đơn giản, hiệu quả và dễ áp dụng cho mọi máy chủ. Để bảo vệ máy chủ khỏi các cuộc tấn công mạng ngày càng tinh vi, việc cấu hình UFW chặn gói tin không hợp lệ là yếu tố không thể bỏ qua trong chiến lược bảo mật mạng tổng thể.









