About

Work - Learn - Share

Lê Quang Thành : quangthanh010290@gmail.com | thanhlev@amazon.com.vn

Linux Packet Filtering

Table of contents

  1. Revision history
  2. Giới thiệu
  3. Chain
    1. Chain PREROUTING
    2. Chain INPUT
    3. Chain FORWARD
    4. Chain OUTPUT
    5. Chain POSTROUTING
  4. Filter tables
  5. Công cụ để cấu hình filter tables
  6. Ví dụ: Dùng đường truyền WAN tốc độ thấp để định tuyến các mail request (TBD)
  7. References

Revision history

Revision Date Remark
0.1 Feb-02-2023 Initial Document

Giới thiệu

Chain

traversing_table_chain.png

Chain PREROUTING

- Đây là chain quan trọng, vì là chain đầu tiên mà package được đưa đến.
- Sau khi ra khỏi chain PREROUTING, gói tin sẽ được đưa đến chain INPUT hoặc chain FORWARD phụ thuộc vào địa chỉ đích của gói tin.
- Nếu địa chỉ đích là IP của host (người nhận chính là host) thì gói tin được đưa vào chain INPUT, tại đây gói tin tiếp tục được filter thông qua các filter table. Cuối cùng được kernel chuyển đến application đang chạy ở user space thông qua các port mà application này đăng ký.
- Nếu địa chỉ đích không phải là IP của host thì gói tin được chuyển đến chain FORWARD, quy trình đi qua các filter table được lặp lại.
- Có 2 filter table trên chain này là mangle table và nat table

Warning! Các rules mà user thiết lập trên filter tables của chain chỉ áp dụng cho gói tin đã được kernel đưa vào chain. Do đó để điểu khiển gói tin đi vào chain INPUT hay FORWARD ta cần điểu khiển trên chain phía trước nó.


- Ví dụ: Giả sử ta cần mở một DNS server chạy local ở user-space. DNS server này sẽ kiểm tra tất cả các DNS request đến từ network card để lọc những request phân giải các tên miền độc hại.
- Tuy nhiên chỉ khi trong package request chỉ định địa chỉ đích là địa chỉ của host thì gói tin này mới đến được chain INPUT và từ đó chuyển đến application. Khi địa chỉ đích là một địa chỉ external (ví dụ 8.8.8.8) thì gói tin được chuyển đến chain FORWARD và từ đó đi ra ngoài, application ở user space không thể nhận được. Để giải quyết vấn đề trên, ta cần thêm các rules ở chain PREROUTING để thay đổi địa chỉ đích của gói tin DNS request thành địa chỉ internal. Kết quả thay vì được đưa đến chain FORWARD thì gói tin được đưa đến chain INPUT

Chain INPUT

Chain FORWARD

Chain OUTPUT

- Các gói tin đi đến chain OUTPUT xuất phát từ application và có địa chỉ đích là IP external.
- Outout của chain này được gửi đến chain POSROUTING.
- Có 3 filter table trên chain này là `mangle table`, `nat table` và `filter table`

Chain POSTROUTING

- Đây là nơi cuối cùng trước khi package được kernel chuyển đến driver để gửi ra ngoài. Đây là một chain quan trọng và được dùng nhiều nhất.
- Trên hình ta có thể thấy nó nhận từ 2 chain OUTPUT và FORWARD.
- Nếu thiết bị dạng client, thì dữ liệu đến nhiều từ chain OUTPUT khi có nhiều ứng dụng chạy và cần giao tiếp ra bên ngoài.
- Trên các thiết bị Router thì vừa nhận từ chain OUTPUT do ứng dụng local đồng thời từ chain FORWARD từ các client của router gửi đến.
- Có 2 filter table trên chain này là `mangle table` và `nat table`. Trên router thì `nat table` ngốn nhiều CPU nhất do phải thực hiển chuyển đổi địa chỉ source address thành địa chỉ IP của router của tất cả gói tin.

Filter tables

Công cụ để cấu hình filter tables

Giải thích Lệnh
Chain OUTPUT  
Liệt kê các rule đang có trên nat table, chain OUTPUT iptables -nvL OUTPUT -t nat
Liệt kê các rule đang có trên mangle table, chain OUTPUT iptables -nvL OUTPUT -t mangle
Liệt kê các rule đang có trên filter table, chain OUTPUT iptables -nvL OUTPUT or iptables -nvL OUTPUT -t filter
Chain FORWARD  
Liệt kê các rule đang có trên mangle table, chain FORWARD iptables -nvL FORWARD -t mangle
Liệt kê các rule đang có trên filter table, chain FORWARD iptables -nvL FORWARD or iptables -nvL FORWARD -t filter
Liệt kê các rule đang có trên nat table, chain FORWARD iptables -nvL FORWARD -t nat : nếu có bài viết ở trên sai
Tất cả các chain  
Liệt kê các rule đang có trên mangle table iptables -nvL -t mangle
Liệt kê các rule đang có trên filter table iptables -nvL or iptables -nvL -t filter
Liệt kê các rule đang có trên nat table iptables -nvL -t nat

Ví dụ: Dùng đường truyền WAN tốc độ thấp để định tuyến các mail request (TBD)

References