Bạn đã bao giờ tự hỏi làm thế nào để bảo vệ máy chủ của mình trước những con mắt tò mò và các cuộc tấn công trên không gian mạng chưa? Tường lửa, hay firewall là gì, chính là người lính gác cổng tận tụy, làm nhiệm vụ kiểm soát mọi luồng dữ liệu ra vào hệ thống của bạn. Nó hoạt động như một rào cản kỹ thuật số, phân tích các gói tin dựa trên những quy tắc được định sẵn và quyết định cho phép hoặc chặn chúng. Việc thiếu đi một lớp bảo vệ vững chắc như tường lửa sẽ khiến máy chủ của bạn phơi bày trước vô số rủi ro, từ truy cập trái phép, đánh cắp dữ liệu nhạy cảm cho đến các cuộc tấn công từ chối dịch vụ (DDoS) có thể làm sập toàn bộ hệ thống.
Trên các hệ điều hành Linux là gì như Ubuntu 20.04, iptables nổi lên như một công cụ tường lửa cực kỳ mạnh mẽ và linh hoạt. Tuy giao diện dòng lệnh có vẻ hơi phức tạp ban đầu, nhưng nó cho phép bạn kiểm soát chi tiết từng kết nối mạng. Bài viết này sẽ là kim chỉ nam, hướng dẫn bạn từng bước từ cài đặt, cấu hình các quy tắc cơ bản đến quản lý lưu lượng nâng cao với iptables. Hãy cùng AZWEB khám phá cách biến máy chủ Ubuntu của bạn thành một pháo đài bất khả xâm phạm.
Cài đặt và cấu hình iptables trên Ubuntu 20.04
Để bắt đầu hành trình bảo mật máy chủ, việc đầu tiên chúng ta cần làm là đảm bảo iptables đã sẵn sàng hoạt động. Hầu hết các bản phân phối Ubuntu đều cài đặt sẵn công cụ này.
Cài đặt iptables trên hệ thống
Trước hết, hãy kiểm tra xem iptables đã được cài đặt hay chưa. Bạn có thể làm điều này bằng một câu lệnh đơn giản trong terminal. Mở terminal và gõ:
sudo iptables -V
Nếu bạn nhận được kết quả hiển thị phiên bản của iptables (ví dụ: iptables v1.8.4), điều đó có nghĩa là công cụ đã được cài đặt. Trong trường hợp bạn gặp lỗi “command not found”, bạn cần cài đặt nó bằng lệnh sau:
sudo apt update
sudo apt install iptables

Lệnh apt update giúp làm mới danh sách các gói phần mềm, đảm bảo bạn cài đặt được phiên bản mới nhất. Sau khi cài đặt xong, bạn có thể kiểm tra lại phiên bản để chắc chắn mọi thứ đã sẵn sàng.
Cấu hình iptables cơ bản
Cấu hình iptables xoay quanh việc thiết lập các quy tắc trong các “chain” (chuỗi). Có ba chain cơ bản bạn cần nắm vững:
- INPUT: Quản lý các gói tin đi vào máy chủ.
- OUTPUT: Quản lý các gói tin đi ra từ máy chủ.
- FORWARD: Quản lý các gói tin đi ngang qua máy chủ (thường dùng cho router).
Mỗi chain có một chính sách mặc định (default policy). Chính sách này sẽ được áp dụng nếu không có quy tắc nào khớp với gói tin. Để an toàn, chúng ta nên thiết lập chính sách mặc định là DROP (hủy bỏ gói tin) cho chain INPUT và FORWARD, và ACCEPT (chấp nhận) cho chain OUTPUT để máy chủ có thể gửi yêu cầu ra ngoài.
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Thiết lập này có nghĩa là mặc định, không ai có thể kết nối đến máy chủ của bạn. Bây giờ, chúng ta sẽ bắt đầu “đục lỗ” tường lửa một cách có kiểm soát.
Các quy tắc tường lửa cơ bản: mở và đóng cổng
Sau khi đã thiết lập chính sách mặc định là chặn mọi kết nối đến, bước tiếp theo là mở các cổng cần thiết để các dịch vụ hợp lệ có thể hoạt động. Đây là phần quan trọng nhất trong việc cấu hình tường lửa.
Mở cổng cho các dịch vụ phổ biến
Mỗi dịch vụ mạng chạy trên một cổng (port) cụ thể. Để người dùng có thể truy cập, bạn phải cho phép lưu lượng truy cập qua các cổng đó. Dưới đây là cách mở một số cổng phổ biến:
- SSH (Cổng 22): Cực kỳ quan trọng để bạn có thể quản trị máy chủ từ xa.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- HTTP (Cổng 80): Dành cho máy chủ web không mã hóa.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- HTTPS (Cổng 443): Dành cho máy chủ web có mã hóa SSL/TLS.
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Trong các lệnh trên:
-A INPUT: Thêm quy tắc vào cuối chain INPUT.-p tcp: Chỉ định giao thức là TCP.--dport 22: Chỉ định cổng đích là 22.-j ACCEPT: Hành động là chấp nhận gói tin.
Đặc biệt, port 443 liên quan mật thiết đến HTTPS là gì, giao thức bảo mật trên Internet giúp mã hóa dữ liệu truyền tải.
Đóng các cổng không cần thiết
Nguyên tắc bảo mật cơ bản là “chặn tất cả những gì không được phép một cách rõ ràng”. Vì chúng ta đã đặt chính sách mặc định là DROP, về cơ bản tất cả các cổng đều đã bị đóng. Tuy nhiên, nếu bạn đã lỡ mở một cổng nào đó và muốn đóng lại, bạn có thể xóa quy tắc tương ứng.
Đầu tiên, hãy liệt kê các quy tắc với số dòng để dễ dàng xác định:
sudo iptables -L INPUT --line-numbers
Giả sử quy tắc bạn muốn xóa ở dòng số 5, bạn sử dụng lệnh sau:
sudo iptables -D INPUT 5
Việc chỉ mở những cổng thực sự cần thiết giúp giảm thiểu “lỗ hổng bảo mật” (attack surface), làm cho kẻ xấu có ít cơ hội hơn để xâm nhập vào hệ thống của bạn. Luôn kiểm tra định kỳ các cổng đang mở và đóng ngay những cổng không còn sử dụng.
Quản lý kết nối và lưu lượng mạng bằng iptables
iptables không chỉ đơn thuần là một công cụ chặn/mở cổng. Nó còn là một tường lửa trạng thái (stateful firewall) thông minh, có khả năng theo dõi và quản lý các kết nối mạng, giúp tăng cường an ninh lên một tầm cao mới.
Quản lý kết nối trạng thái (stateful firewall)
Một tường lửa trạng thái có thể nhận biết được ngữ cảnh của các gói tin. Nó hiểu được một gói tin là một phần của một kết nối mới, hay thuộc về một kết nối đã được thiết lập. Có ba trạng thái kết nối chính bạn cần quan tâm:
- NEW: Gói tin bắt đầu một kết nối mới (ví dụ: khi bạn truy cập một trang web lần đầu).
- ESTABLISHED: Gói tin thuộc về một kết nối đã tồn tại (ví dụ: dữ liệu tải về từ trang web sau khi kết nối đã được thiết lập).
- RELATED: Gói tin liên quan đến một kết nối đã tồn tại nhưng không phải là một phần của nó (ví dụ: kết nối FTP data).

Tận dụng tính năng này, chúng ta có thể tạo ra một quy tắc cực kỳ hiệu quả: cho phép tất cả các gói tin thuộc kết nối ESTABLISHED và RELATED.
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Quy tắc này rất quan trọng. Nó cho phép máy chủ của bạn nhận phản hồi từ các yêu cầu mà nó đã gửi đi. Ví dụ, khi bạn chạy apt update, máy chủ gửi yêu cầu ra ngoài (được OUTPUT ACCEPT cho phép), và quy tắc trên đảm bảo nó có thể nhận lại các gói dữ liệu cập nhật, liên quan mật thiết đến VPN là gì và các kết nối bảo mật.
Giới hạn lưu lượng và ngăn chặn tấn công
iptables còn cung cấp các module giúp bạn giới hạn số lượng kết nối, một kỹ thuật hữu ích để giảm thiểu các cuộc tấn công từ chối dịch vụ (DoS) đơn giản. Ví dụ, bạn có thể giới hạn số lượng kết nối SSH mới từ một địa chỉ IP để chống lại các cuộc tấn công brute-force.
Lệnh sau sẽ giới hạn một IP chỉ được tạo 5 kết nối SSH mới trong vòng 60 giây:
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

Quy tắc đầu tiên ghi lại địa chỉ IP của mỗi kết nối SSH mới. Quy tắc thứ hai kiểm tra, nếu một IP cố gắng tạo quá 5 kết nối trong 60 giây, gói tin sẽ bị hủy. Đây là một cách đơn giản nhưng hiệu quả để tăng cường bảo mật cho các dịch vụ quan trọng, giúp phòng tránh các cuộc tấn công như phishing là gì hay malware là gì.
Kiểm tra và giám sát trạng thái tường lửa
Sau khi thiết lập các quy tắc, việc kiểm tra và giám sát thường xuyên là vô cùng cần thiết để đảm bảo tường lửa hoạt động đúng như mong đợi và phát hiện sớm các hoạt động đáng ngờ.
Kiểm tra các quy tắc iptables đang hoạt động
Để xem tất cả các quy tắc hiện tại trong tường lửa, bạn sử dụng lệnh iptables -L. Tuy nhiên, để có cái nhìn chi tiết và dễ hiểu hơn, hãy thêm các tùy chọn -v (verbose – hiển thị chi tiết) và -n (numeric – hiển thị địa chỉ IP và cổng dưới dạng số).
sudo iptables -L -v -n

Kết quả trả về sẽ cho bạn thấy:
- Chain: Tên của chain (ví dụ: INPUT, FORWARD, OUTPUT).
- pkts: Số lượng gói tin đã khớp với quy tắc.
- bytes: Tổng dung lượng (tính bằng byte) của các gói tin đó.
- target: Hành động sẽ được thực hiện (ACCEPT, DROP, REJECT).
- prot: Giao thức (tcp, udp, icmp…).
- source/destination: Địa chỉ IP nguồn và đích.
Việc phân tích các cột pkts và bytes rất hữu ích. Nếu bạn thấy một quy tắc DROP có số lượng gói tin tăng đột biến, đó có thể là dấu hiệu của một cuộc tấn công hoặc một cấu hình sai, liên quan đến các vấn đề an ninh như botnet là gì, backdoor là gì.
Giám sát lưu lượng và log tường lửa
iptables có thể ghi lại log về các gói tin bị chặn, cung cấp thông tin quý giá để phân tích và điều tra các vấn đề bảo mật. Để kích hoạt logging, bạn cần tạo một quy tắc riêng sử dụng target LOG.
Ví dụ, để ghi log tất cả các gói tin bị hủy ở chain INPUT, bạn có thể thêm quy tắc sau vào gần cuối chain, ngay trước quy tắc DROP cuối cùng:
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROPPED: "
Các log này thường được lưu trong file /var/log/kern.log hoặc /var/log/syslog. Bạn có thể xem chúng bằng lệnh tail hoặc grep.
sudo tail -f /var/log/kern.log | grep "IPTABLES-DROPPED"
Dữ liệu log sẽ chứa thông tin chi tiết như địa chỉ IP nguồn, IP đích, cổng nguồn, cổng đích… Việc thường xuyên theo dõi các log này giúp bạn phát hiện các mẫu tấn công, xác định các địa chỉ IP đáng ngờ và tinh chỉnh lại các quy tắc tường lửa cho hiệu quả hơn, đồng thời hỗ trợ trong việc phòng chống các lỗ hổng như exploit là gì và XSS là gì.
Một số lưu ý khi sử dụng iptables để bảo vệ máy chủ
Việc cấu hình iptables đòi hỏi sự cẩn trọng. Một sai sót nhỏ cũng có thể khiến bạn mất quyền truy cập vào máy chủ hoặc tạo ra lỗ hổng bảo mật. Dưới đây là những lưu ý quan trọng bạn cần ghi nhớ.
Lưu ý về thứ tự và ưu tiên quy tắc
iptables xử lý các quy tắc theo thứ tự từ trên xuống dưới trong một chain. Khi một gói tin đi vào, nó sẽ được so khớp với quy tắc đầu tiên. Nếu khớp, hành động tương ứng sẽ được thực hiện và quá trình xử lý trong chain đó sẽ dừng lại. Nếu không khớp, nó sẽ tiếp tục được so sánh với quy tắc thứ hai, và cứ thế tiếp tục.
Điều này có nghĩa là thứ tự của các quy tắc là cực kỳ quan trọng. Ví dụ, nếu bạn đặt một quy tắc ACCEPT chung chung (ví dụ ACCEPT tất cả lưu lượng TCP) ở trên một quy tắc DROP cụ thể (ví dụ DROP lưu lượng từ một IP độc hại), thì IP độc hại đó vẫn sẽ được phép truy cập.

Một cách tổ chức quy tắc hiệu quả là:
- Bắt đầu với các quy tắc
ACCEPTcho các kết nối đã thiết lập (ESTABLISHED, RELATED). - Tiếp theo là các quy tắc
ACCEPTcụ thể cho các dịch vụ bạn muốn mở (SSH, HTTP…). - Đặt các quy tắc
DROPhoặcREJECTcho các IP hoặc dải mạng cụ thể mà bạn muốn chặn. - Cuối cùng, chính sách mặc định
DROPsẽ xử lý tất cả những gì còn lại.
Backup cấu hình và tự động áp dụng sau khởi động
Một đặc điểm quan trọng của iptables là các quy tắc được tạo ra sẽ bị mất khi máy chủ khởi động lại. Đây là một vấn đề lớn nếu bạn không có cơ chế lưu và phục hồi chúng. May mắn là có một công cụ giúp giải quyết việc này: iptables-persistent.
Đầu tiên, hãy cài đặt nó:
sudo apt update
sudo apt install iptables-persistent
Trong quá trình cài đặt, nó sẽ hỏi bạn có muốn lưu các quy tắc iptables (cho IPv4) và ip6tables (cho IPv6) hiện tại không. Hãy chọn “Yes”. Sau này, mỗi khi bạn thay đổi cấu hình iptables, hãy chạy lệnh sau để lưu lại các thay đổi:
sudo netfilter-persistent save
Lệnh này sẽ ghi các quy tắc hiện tại vào các file cấu hình (thường là /etc/iptables/rules.v4 và /etc/iptables/rules.v6). Khi máy chủ khởi động, dịch vụ netfilter-persistent sẽ tự động nạp lại các quy tắc từ những file này, đảm bảo tường lửa của bạn luôn được áp dụng. Luôn tạo một bản sao lưu của các file này trước khi thực hiện các thay đổi lớn.
Các vấn đề thường gặp và cách khắc phục
Ngay cả với sự chuẩn bị kỹ lưỡng, đôi khi bạn vẫn có thể gặp phải sự cố khi làm việc với iptables. Dưới đây là hai vấn đề phổ biến nhất và cách để bạn nhanh chóng xử lý chúng.
Không thể truy cập dịch vụ sau khi cấu hình iptables
Đây là tình huống “kinh điển”: bạn vừa áp dụng một bộ quy tắc mới và đột nhiên không thể SSH vào máy chủ hoặc trang web của mình không tải được nữa. Đừng hoảng sợ, nguyên nhân thường khá đơn giản.
Nguyên nhân và cách xử lý:
- Quên mở cổng cần thiết: Kiểm tra lại xem bạn đã thêm quy tắc
ACCEPTcho dịch vụ bị chặn chưa. Ví dụ, nếu không vào được SSH, hãy chắc chắn có quy tắcsudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT. - Thứ tự quy tắc sai: Có thể một quy tắc
DROPhoặcREJECTchung chung đang nằm phía trên quy tắcACCEPTcủa bạn. Hãy dùng lệnhsudo iptables -L INPUT --line-numbersđể kiểm tra thứ tự. - Đặt chính sách mặc định
DROPquá sớm: Nếu bạn đặt chính sáchINPUTthànhDROPmà chưa tạo quy tắcACCEPTcho kết nối SSH của mình, bạn sẽ tự khóa mình ở ngoài. Một mẹo an toàn là luôn thêm quy tắc cho phép SSH từ IP của bạn trước khi thay đổi chính sách mặc định. - Lỗi cú pháp: Kiểm tra kỹ lại lệnh bạn vừa gõ, có thể có sai sót về cổng, giao thức hoặc hành động.
Để xử lý nhanh, nếu bạn có quyền truy cập vật lý hoặc qua console của nhà cung cấp dịch vụ hosting/VPS, bạn có thể tạm thời xóa tất cả các quy tắc để vào lại bằng lệnh sudo iptables -F.
iptables không lưu cấu hình sau khi reboot
Bạn đã dành thời gian cấu hình cẩn thận, mọi thứ hoạt động hoàn hảo. Nhưng sau khi khởi động lại máy chủ, toàn bộ công sức của bạn biến mất và tường lửa trở về trạng thái mặc định.
Nguyên nhân và hướng dẫn khắc phục:
Nguyên nhân phổ biến nhất là bạn chưa cài đặt hoặc cấu hình cơ chế để lưu và tự động nạp lại các quy tắc. iptables không tự động làm điều này.

Giải pháp: Sử dụng gói iptables-persistent như đã đề cập ở phần trước.
- Kiểm tra cài đặt: Đảm bảo gói đã được cài đặt:
dpkg -l | grep iptables-persistent. - Lưu quy tắc thủ công: Sau khi đã hoàn tất cấu hình, hãy chạy lệnh sau để lưu lại:
sudo netfilter-persistent save
- Kiểm tra dịch vụ: Đảm bảo dịch vụ
netfilter-persistentđược kích hoạt để khởi động cùng hệ thống:
sudo systemctl is-enabled netfilter-persistent
Nếu nó bị vô hiệu hóa (disabled), hãy kích hoạt nó:
sudo systemctl enable netfilter-persistent
Bằng cách đảm bảo iptables-persistent được cài đặt và cấu hình đúng, bạn có thể yên tâm rằng “người lính gác” của mình sẽ luôn ở vị trí sau mỗi lần hệ thống khởi động lại.
Các best practices khi sử dụng iptables trên Ubuntu 20.04
Để sử dụng iptables một cách hiệu quả và an toàn nhất, việc tuân thủ các nguyên tắc đã được kiểm chứng là rất quan trọng. Dưới đây là những thực tiễn tốt nhất mà AZWEB khuyên bạn nên áp dụng.
- Luôn sao lưu cấu hình trước khi thay đổi: Trước khi chỉnh sửa bất kỳ quy tắc nào, hãy lưu lại cấu hình hiện tại. Lệnh
sudo iptables-save > iptables-backup.txtsẽ tạo một bản sao lưu. Nếu có sự cố, bạn có thể khôi phục lại nhanh chóng bằngsudo iptables-restore < iptables-backup.txt. - Chỉ mở cổng cần thiết, đóng tất cả các cổng không dùng: Áp dụng nguyên tắc “đặc quyền tối thiểu”. Thiết lập chính sách mặc định là
DROPvà chỉ mở từng cổng cho các dịch vụ thực sự cần thiết. Điều này giảm thiểu đáng kể bề mặt tấn công của máy chủ. - Sử dụng logs để giám sát và điều chỉnh kịp thời: Kích hoạt ghi log cho các gói tin bị từ chối. Việc phân tích log giúp bạn phát hiện các hành vi bất thường, các cuộc tấn công tiềm tàng và tinh chỉnh các quy tắc cho phù hợp với tình hình thực tế.
- Không áp dụng quy tắc ngay trên máy chủ sản xuất mà thử nghiệm trước: Nếu có thể, hãy thử nghiệm các quy tắc mới trên một môi trường staging hoặc máy chủ thử nghiệm. Điều này giúp bạn tránh được những sai lầm có thể gây gián đoạn dịch vụ nghiêm trọng trên hệ thống đang hoạt động.
- Theo dõi và cập nhật iptables cùng hệ điều hành định kỳ: Giữ cho hệ điều hành Ubuntu và gói
iptablescủa bạn luôn được cập nhật. Các bản cập nhật không chỉ mang lại tính năng mới mà còn vá các lỗ hổng bảo mật đã biết, giúp tường lửa của bạn luôn vững chắc, tương tự như việc hiểu rõ TLS là gì và áp dụng các giao thức bảo mật mới.

Việc tuân thủ những nguyên tắc này không chỉ giúp bạn xây dựng một hệ thống phòng thủ mạnh mẽ mà còn giúp quá trình quản lý trở nên dễ dàng và ít rủi ro hơn.
Kết luận
Qua bài hướng dẫn chi tiết này, chúng ta đã cùng nhau khám phá sức mạnh của iptables – một công cụ không thể thiếu trong việc bảo vệ máy chủ Ubuntu 20.04. Từ những bước cài đặt cơ bản, thiết lập các quy tắc cho các dịch vụ phổ biến, cho đến việc quản lý kết nối trạng thái và giám sát log, iptables đã chứng tỏ vai trò là một người lính gác cổng đáng tin cậy. Việc làm chủ công cụ này đồng nghĩa với việc bạn nắm trong tay quyền kiểm soát an ninh cho toàn bộ hệ thống của mình.
Bảo mật không phải là một công việc làm một lần rồi thôi, mà là một quá trình liên tục. AZWEB khuyến khích bạn hãy bắt tay vào thực hành ngay hôm nay. Hãy bắt đầu với việc thiết lập các quy tắc cơ bản và dần dần tìm hiểu sâu hơn về các tính năng nâng cao. Đừng ngại thử nghiệm, nhưng hãy luôn nhớ sao lưu cấu hình trước khi thực hiện thay đổi.
Khi đã quen thuộc với iptables, bạn có thể tìm hiểu các công cụ khác như ufw (Uncomplicated Firewall) – một giao diện đơn giản hơn của iptables, hoặc firewalld để mở rộng thêm kiến thức và kỹ năng bảo mật của mình. Chúc bạn thành công trên con đường xây dựng một không gian mạng an toàn và vững chắc!
