IPtables là gì?

  • Thursday 06/05/2021

iptables là gì?

iptables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng giúp bạn ngăn chặn các truy cập không hợp lệ. Đối với các bản phân phối Linux như Ubuntu, Fedora, CentOS… bạn có thể tìm thấy công cụ tường lửa tích hợp sẵn iptables. Các thành phần tạo nên iptables là gì?

iptables được cài đặt sẵn trong các bản Linux

iptables là một ứng dụng tường lửa có sẵn trên Linux, iptables Linux firewall cho phép người dùng thiết lập các quyền truy cập để kiểm soát lưu lượng một cách chọn lọc trên máy chủ.

Thành phần của iptables là gì?

Về cơ bản, iptables chỉ là giao diện dòng lệnh để tương tác với packet filtering của netfilter framework. Cơ chế packet filtering của iptables hoạt động gồm 3 thành phần là Tables, Chains và Targets.

Các bảng trong iptables là gì?

Table được iptables sử dụng để định nghĩa các rules(quy tắc) dành cho các gói tin. Trong đó, có các Table sau.

  • Filter Table

Là một trong những tables được iptables sử dụng nhiều nhất, Filter Table sẽ quyết định việc một gói tin có được đi đến đích dự kiến hay từ chối yêu cầu của gói tin.

  • NAT Table

Để dùng các rules về NAT(Network Address Translation), NAT Table sẽ có trách nhiệm chỉnh sửa source(IP nguồn) hoặc destination(IP đích) của gói tin khi thực hiện cơ chế NAT.

  • Mangle Table

Cho phép chỉnh sửa header của gói tin, giá trị của các trường TTL, MTU, Type of Service.

  • Raw Table

iptables là một stateful firewall với các gói tin được kiểm tra liên quan đến trạng thái(state). Ví dụ gói có thể là một phần của một kết nối mới hoặc là một phần của kết nối hiện có. Raw Table sẽ giúp bạn làm việc với các gói tin trước khi kernel bắt đầu kiểm tra trạng thái và có thể loại một số gói khỏi việc tracking vì vấn đề hiệu năng của hệ thống.

  • Security Table

Một vài kernel có thể hỗ trợ thêm Security Table, được dùng bởi SELinux để thiết lập các chính sách bảo mật.

Chains

Chains được tạo ra với một số lượng nhất định ứng với mỗi Table, giúp lọc gói tin tại các điểm khác nhau.

  • Chain PREROUTING tồn tại trong Nat Table, Mangle Table và Raw Table, các rules trong chain sẽ được thực thi ngay khi gói tin vào đến giao diện mạng (Network Interface).
  • Chain INPUT chỉ có ở Mangle Table và Nat Table với các rules được thực thi ngay trước khi gói tin gặp tiến trình.
  • Chain OUTPUT tồn tại ở Raw Table, Mangle Table và Filter Table, có các rules được thực thi sau khi gói tin được tiến trình tạo ra.
  • Chain FORWARD tồn tại ở Manle Table và Filter Table, có các rules được thực thi cho các gói tin được định tuyến qua host hiện tại.
  • Chain POSTROUTING chỉ tồn tại ở Manle Table và Nat Table với các rules được thực thi khi gói tin rời giao diện mạng.

Target

Target có thể được hiểu là hành động dành cho các gói tin khi gói tin thỏa mãn các rules đặt ra.

  • ACCEPT: chấp nhận và cho phép gói tin đi vào hệ thống.
  • DROP: loại gói tin, không có gói tin trả lời.
  • REJECT: loại gói tin những có trả lời table gói tin khác. Ví dụ: trả lời table 1 gói tin “connection reset” đối với gói TCP hoặc “destination host unreachable” đối với gói UDP và ICMP.
  • LOG: chấp nhận gói tin nhưng có ghi lại log.

Gói tin sẽ được đi qua tất cả các rules đặt ra mà không dừng lại ở bất kì rule nào đúng. Trường hợp gói tin không khớp với rules nào mặc định sẽ được chấp nhận

Cấu hình iptables cơ bản là gì?

Tất cả các dữ liệu trong các gói tin gửi đi được định dạng qua internet, Linux kernel sẽ giúp lọc các gói tin này bằng cách mang đến một giao diện sử dụng một bảng các bộ lọc. iptables là ứng dụng dòng lệnh và cũng đồng thời là bức tường lửa Linux cho phép người dùng thiết lập, duy trì và kiểm tra các bảng này.

Người sử dụng có thể tùy ý thiết lập nhiều bảng với mỗi bảng chứa nhiều chuỗi, mỗi chuỗi là một quy tắc. Mỗi quy tắc sẽ định nghĩa việc phải làm với gói tin khi phù hợp với gói đó.

Một target (mục tiêu) sẽ được đưa ra khi có một gói tin được xác định. Target có thể là một chuỗi khác để khớp với một trong các giá trị sau:

  • ACCEPT: gói tin được phép đi qua.
  • DROP: gói tin không được phép đi qua.
  • RETURN: bỏ qua chuỗi hiện tại và quay trở lại quy tắc tiếp theo từ chuỗi mà nó được gọi.

Các rules trong iptables là gì?

Người dùng có thể dùng lệnh sau để xem các rules hiện có trong iptables:

iptables -L v

TARGET    PROT OPT  IN OUT SOURCE DESTINATION

ACCEPT    all --   lo any anywhere   anywhere

ACCEPT    all --   any any anywhere   anywhere ctstate  RELATED,ESTABLISHED

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:ssh

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:http

ACCEPT    tcp --   any any anywhere   anywhere tcp dpt:https

DROP      all --   any any anywhere   anywhere

Ý nghĩa của từng cột và hàng

  • TARGET: hành động sẽ thực thi.
  • PROT: viết tắt của Protocol, là các giao thức sẽ được áp dụng để thực thi quy tắc này. Ở đây chúng ta có 3 lựa chọn là all, tcp hoặc udp. Các ứng dụng như SSH, FTP, sFTP,..đều sử dụng giao thức TCP.
  • IN: chỉ ra rule sẽ áp dụng cho các gói tin đi vào từ interface nào, ví dụ lo, eth0, eth1 hoặc any là áp dụng cho tất cả interface.
  • OUT: tương tự  IN, chỉ ra rule sẽ áp dụng cho các gói tin đi ra từ interface nào.
  • DESTINATION: địa chỉ của lượt truy cập được phép áp dụng quy tắc.
  • ACCEPT    all —   lo any anywhere   anywhere: chấp nhận toàn bộ gói tin từ interface lo (Loopback Interface), là interface ảo nội bộ, ví dụ IP 127.0.0.1 là kết nối qua thiết bị này.
  • ACCEPT    all — any  any anywhere   anywhere ctstate  RELATED,ESTABLISHED: chấp nhận toàn bộ gói tin của kết nối hiện tại. Tức khi bạn đang ở trong SSH và sửa đổi lại Firewall, nó sẽ không đẩy bạn ra khỏi SSH nếu bạn không thỏa mãn quy tắc.
  • ACCEPT    tcp —   any any anywhere   anywhere tcp dpt:ssh: chấp nhận toàn bộ gói tin của giao thức SSH ở bất cứ interface nào, với bất kể IP nguồn và đích là bao nhiêu. Mặc định sẽ hiển thị dpt:ssh để biểu diễn cổng 22 của SSH, nếu bạn đổi SSH thành cổng khác thì sẽ hiển thị số cổng.
  • ACCEPT    tcp —   any any anywhere   anywhere tcp dpt:http: cho phép kết nối vào cổng 80, mặc định sẽ biểu diễn thành chữ http.
  • ACCEPT    tcp —   any any anywhere   anywhere tcp dpt:https: cho phép kết nối vào cổng 443, mặc định nó sẽ biểu diễn thành chữ https.
  • DROP      all —   any any anywhere   anywhere: loại bỏ tất cả các gói tin nếu không khớp với các rule ở trên.

Các tùy chọn của iptables là gì?

iptables cung cấp nhiều tùy chọn cho phép người dùng thao tác

Các tùy chọn để chỉ định thông số iptables là gì?

  • Chỉ định tên table: -t ,
  • Chỉ định loại giao thức: -p ,
  • Chỉ định card mạng vào: -i ,
  • Chỉ định card mạng ra: -o ,
  • Chỉ định địa chỉ IP nguồn: -s <địa_chỉ_ip_nguồn>,
  • Chỉ định địa chỉ IP đích: -d <địa_chỉ_ip_đích>, tương tự như –s.
  • Chỉ định cổng nguồn: –sport ,
  • Chỉ định cổng đích: –dport , tương tự như –sport

Các tùy chọn để thao tác với chain trong iptables là gì?

  • Tạo chain mới: iptables -N
  • Xóa hết các rule đã tạo trong chain: iptables -X
  • Đặt chính sách cho các chain `built-in` (INPUT, OUTPUT & FORWARD): iptables -P , ví dụ: iptables -P INPUT ACCEPT để chấp nhận các packet vào chain INPUT
  • Liệt kê các rule có trong chain: iptables -L
  • Xóa các rule có trong chain (flush chain): iptables -F
  • Reset bộ đếm packet về 0: iptables -Z

Các tùy chọn để thao tác với rule trong iptables là gì?

  • Thêm rule: -A (append)
  • Xóa rule: -D (delete)
  • Thay thế rule: -R (replace)
  • Chèn thêm rule: -I (insert)

Một số lệnh cơ bản iptables là gì?

Các lệnh cơ bản trong iptables để làm việc với rule

Tạo một rule mới

iptables -A INPUT -i lo -j ACCEPT

Lệnh này có nghĩa là:

  • A INPUT: khai báo kiểu kết nối sẽ được áp dụng (A nghĩa là Append).
  • i lo: Khai báo thiết bị mạng được áp dụng (i nghĩa là Interface).
  • j ACCEPT: khai báo hành động sẽ được áp dụng cho quy tắc này (j nghĩa là Jump).

Gõ lại lệnh iptables -L -v bạn sẽ thấy 1 rule mới xuất hiện

after-created-iptables-rule

Sau khi thêm mới hoặc thay đổi gõ lệnh lưu và khởi động lại iptables để áp dụng các thay đổi.

service iptables save 
service iptables restart

Tiếp tục thêm một rule mới để cho phép lưu lại các kết nối hiện tại tránh hiện tượng tự block ra khỏi máy chủ.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Cho phép các cổng được truy cập từ bên ngoài vào qua giao thức tcp: SSH(22), HTTP(80), HTTPS(443)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-p tcp : Giao thức được áp dụng (tcp, udp, all)

–dport 22: Cổng cho phép áp dụng. 22 là cho SSH

Cuối cùng, chặn toàn bộ các kết nối truy cập từ bên ngoài vào không thỏa mãn những rule trên. Tương ứng với rule 5 ở trên.

iptables -A INPUT -j DROP

Bổ sung một rule mới

Để chèn 1 rule mới vào 1 vị trí (hàng) nào đó, ví dụ là vị trí thứ 2. Hãy thay tham số -A table bằng tham số INSERT -I.

iptables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT

Xóa 1 rule

Để xóa 1 rule mà đã tạo ra tại vị trí 4, ta sẽ sử dụng tham số -D

iptables -D INPUT 4

Xóa toàn bộ các rule chứa hành động DROP có trong iptables:

iptables -D INPUT -j DROP
Rate this post