Bài viết hướng dẫn chi tiết cách tạo, quản lý và cấu hình các quy tắc lọc trong bảng Filter IPTABLES để đáp ứng các nhu cầu bảo mật và hiệu suất cụ thể.
Trong IPTABLES thì bảng Filter là một bảng cực kỳ quan trọng, nó có chức năng lọc các gói tin được cho phép đi vào Firewall hay không. Nhưng để có thể thao tác với nó thì các bạn hãy cùng mình tìm hiểu qua bài viết này nhé.
>>> Xem thêm: IPTABLES là gì? Cấu trúc thành phần của IPTABLES và cách sử dụng
1. Ý nghĩa của việc thao tác với bảng Filter trong iptables
Việc thiết lập các rules đối với bảng Filter là vô cùng quan trọng. Nó cho phép ta lọc các gói tin đi đến hay đi ra và cho phép xem các gói tin đấy có được tiếp tục đi hay không. Có thể nói bảng Filter chính là cốt lõi của IPTABLES.
Để có thể thao tác và hiểu rõ hơn về bảng Filter thì ta cần nhắc lại và nắm chắc các lý thuyết sau:
Các chain có sẵn trong bảng filter:
INPUT:
- Đây là chain dùng để lọc các gói tin đầu vào
- Chain này là chain các gói tin bắt buộc phải đi qua để có thể được xử lý.
OUTPUT:
- Đây là chain dùng để lọc các gói tin đầu ra.
- Chain này là chain sau khi gói tin được xử lý phải đi qua chain này để ra được bên ngoài.
FORWARD:
- Đây là chain dùng để chuyển gói tin qua lại giữa các card mạng với nhau.
- Các target được sử dụng trong các chain này có thể là ACCEPT (đồng ý) , DROP (xóa bỏ).
2. Cấu hình bảng Filter của IPTABLES với câu lệnh
Khi thao tác với bất kỳ bảng nào trong IPTABLES ta sẽ phân biệt ra 2 ý chính là các rule default và rule do người dùng thiết lập.
- Rule default là các quy tắc mặc định áp dụng với mỗi Chain, nếu các gói tin không được xử lý bởi các rules do người dùng thiết lập thì nó sẽ tuân thủ theo quy tắc default.
- Rule do người dùng thiết lập: đây là rule dùng để xử lý chính xác các gói tin với chính xác mục đích mà người dùng muốn. Có thể nói đây là rule ngoại lệ của rule default.
Phân tích 2 chỗ mà mình đánh dấu đỏ thì sẽ là: Bất cứ các gói tin đi vào chain INPUT của bảng Filter thì sẽ bị từ chối, ngoại lệ các gói tin liên quan đến dịch vụ SSH với gói tin tcp sẽ được cho phép.
Mẫu câu lệnh dùng để thao tác với bảng filter:
iptables -I <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target> |
- -I : insert các thao tác trong lệnh vào chain chỉ định
- -i : xác định card mạng
- -p : xác định giao thức, ở đây có thể là udp hay tcp
- -s : xác định địa chỉ nguồn, có thể là tên máy hoặc địa chỉ ip
- --dport : Xác định cổng thực hiện giao thức
- -j : xác định định quy tắc. Có thể là ACCEPT , DROP , RETURN
- ACCEPT : cho phép
- DROP : không cho phép gói tin đi qua
- RETURN : dùng gói đi qua chain này và yêu cầu trở về chain trước đó
Ta hãy thử thiết lập rule default xem như thế nào nhé.
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP |
Áp dụng mẫu đã cho ta hãy thử thao tác mở port 80 và 443 xem như thế nào nhé.
iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 443 -j ACCEPT |
Sau khi thêm các rule bằng lệnh thì bây giờ ta cần lưu lại lệnh và reload lại iptables.
service iptables save systemctl restart iptables |
Bây giờ ta có thể vào trình duyệt và gõ địa chỉ IP hoặc trang web để kiểm tra. Yêu cầu rằng lúc trước khi thiết lập iptables thì sẽ không thể truy cập và sau khi khi thiết lập các rule thì mới có thể truy cập.
3. Cấu hình bảng Filter của IPTABLES bằng cách chỉnh sửa nội dung file
Mặc định các rule, chain, table của IPTABLES sẽ được lưu ở file /etc/sysconfig/iptables. Đối với file này ta có thể sửa như các file bình thường và có 1 điểm lợi hơn ta có thể reload lại dịch vụ iptables mà không cần save vì thao tác save nhằm mục đích là lưu các quy tắc vào đây.
Lệnh chỉnh sửa nội dung file.
vi /etc/sysconfig/iptables |
Hãy thêm nội dung sau vào vị trí phù hợp để có thể mở port 80 và 443.
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT |
Bây giờ ta cần restart lại dịch vụ iptables để có thể áp dụng các rule ta đã thêm vào.
service iptables restart |
Vậy là mình đã hướng dẫn các bạn thao tác với IPTABLES theo 2 cách là dùng câu lệnh và chỉnh sửa file rồi. Nhưng đây mới chỉ là một vài trường hợp và vẫn chưa thể sử dụng hiệu quả IPTABLES được. Phần bên dưới sẽ tổng hợp cho các bạn các cách dùng IPTABLES hợp lý nhất.
4. Tổng hợp các câu lệnh cần được chú ý
Thao tác đầu tiên khi ta sử dụng IPTABLES thì việc cần làm là phải xác định các rule default cho các chain. Chính thói quen này sẽ giúp bảo mật rất tốt vì sau khi thiết lập các rule default thì việc còn lại ta chỉ việc thiết lập các rule ngoại lệ. Việc này sẽ tránh cho chúng ta thiết lập có ít sai sót nhất có thể.
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP |
Tiếp theo đến việc tiếp theo các bạn có thể nghĩ đến là việc xóa hết tất cả các rule ngoại lệ đã thiết lập của người dùng khác. Lưu ý rằng việc này có thể làm kết nối ssh của bạn nên bạn hãy viết ra một script bao gồm tất cả các rule mình muốn thực thi.
iptables -F iptables -X |
Cho phép các thiết lập đâng kết nối và không bị gián đoạn.
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT |
Cho phép các gói tin ssh. Ở đây nếu ta chỉ muốn các kết nối ssh từ dải IP được chỉ định ta sẽ thêm option -s để xác định source của gói tin.
iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.10.0/32 --dport 22 -j ACCEPT |
Cho phép các kết nối đến từ loopback.
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT |
Cho phép các gói tin IMCP được tối đa 5 gói 1 phút. Ở đây ta có thể thay đổi bằng các loại gói tin khác. Điều này tránh cho các trường hợp spam.
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.10.0/32 -m limit --limit 1/m --limit-burst 5 -j ACCEPT |
Chặn các gói tin có nguồn cụ thể.
iptables -A INPUT -s 192.168.20.0/24 -j DROP |
Xóa dòng thứ n của chain chỉ định (Xóa rule ở dòng thứ 2 chain INPUT)
iptables -D INPUT 2 |
Xem danh sách các chain đã được thiết lập.
iptables -L |
Ở đây là các câu lệnh cơ bản hay được dùng nhưng để có thể thao tác tốt nhất với IPTABLES ta cần phải hiểu được các giao thức của các tầng OSI hoạt động như thế nào. Một khi ta nắm bắt được nó thì việc thao tác với IPTABLES là một việc rất đơn giản.
5. Các lỗi mà bạn có thể mắc phải khi thao tác với IPTABLES
Điều đầu tiên mà bạn cần phải lưu ý là IPTABLES có cơ chế đọc từ trên xuống dưới nếu các rule sau vi phạm rule trước thì rule trước sẽ được ưu tiên hơn. Các bạn có thể phân tích ví dụ dưới đây.
Dưới đây là file cấu hình của IPTABLES.
# Generated by iptables-save v1.4.21 on Fri Feb 16 03:06:50 2024 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [53:4680] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Fri Feb 16 03:06:50 2024 |
Các bạn hãy chú ý 2 dòng này.
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p icmp -j ACCEPT |
Dòng đứng trên sẽ từ chối tất cả các gói tin của ICMP và gửi 1 cảnh báo lại nhưng dòng đứng sau lại cho phép tất cả các gói tin ICMP vậy điều này sẽ dẫn đến xung đột nên câu lệnh phía trên sẽ được ưu tiên nên các gói tin ICMP sẽ bị từ chối nhé.
Tiếp theo ta nên xóa các cấu hình có sẵn trước đó đi và thiết lập theo quy tắc của chung chúng ta để tránh các trường hợp sai sót như trên. Những việc ta nên làm là viết ra một file bash script để chạy tất cả các lệnh bao gồm cả lệnh xóa rule. Việc này cùng đảm bảo bảo kết nối ssh của bạn bị sẽ không bị mất khi xóa các rule.
6. Tổng kết
Mình tin rằng nếu đọc đến đây thì các bạn đã có thể thực hành được các thao tác đối với iptables rồi. VIệc thao tác với iptables sẽ là một vấn đề khó khăn nhưng các bạn hãy đọc và tìm hiểu rõ các chi tiết mình đã nói thì các bạn sẽ thao tác với nó tương đối đơn giản. Và một điều nữa các bạn hãy luôn nghĩ trong đầu là IPTABLES thao tác trực tiếp với gói tin để lọc gói tin, việc này là rất quan trọng nhé, chúc bạn thành công!